标签: database-replication

如何处理MySQL读写分离的最终一致性问题

我一直在研究扩展 MySQL 的解决方案。除了添加 Memcached 层之外,经常出现的一个问题是读/写分离——所有写入都发送到主服务器,所有读取都发送到一组负载平衡的从服务器。

这种方法明显出现的一个问题是“最终一致性”。当我在主服务器上运行写入操作时,复制到读取从服务器需要一定的时间。因此,如果我请求新创建的行,它可能不存在。

有谁知道处理这个问题的具体策略?我读过有关“读你所写”能力的概念性部分解决方案。但是,有谁知道如何实现这样的解决方案——无论是概念上的,还是具体在 Spring/Hibernate 堆栈中?

mysql relational-database database-replication amazon-rds horizontal-scaling

5
推荐指数
1
解决办法
1378
查看次数

mysql复制中被动master和slave有什么区别?

有多种方法可以配置 mysql 复制。我知道如何配置复制集群以使用主-主-主动-被动模型或主从模型。

如果我在每个模型中将被动主站和从站配置为“只读”,并且被动主站和从站都可以在故障转移中提升为主动主站,那么我想知道它们之间有什么区别?

mysql database-replication

5
推荐指数
0
解决办法
1782
查看次数

AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

大多数nosql解决方案仅使用最终一致性,并且考虑到DynamoDB将数据复制到三个数据中心,如何保持写后读一致性?

解决此类问题的通用方法是什么?我认为这很有趣,因为即使在 MySQL 复制中,数据也是异步复制的。

eventual-consistency database-replication amazon-web-services nosql amazon-dynamodb

5
推荐指数
1
解决办法
7833
查看次数

Redis 是否支持主主复制?

根据我对以下问题的理解,这些问题很久以前就被问到了,Redis 没有对主-主复制的内置支持。

问题 1

问题2

问题 3

截至目前,官方网站似乎没有关于主-主复制的内容。还是这样吗,即Redis还是没有多主复制的选项。甚至第三方工具似乎也没有帮助 Redis 实现同样的目标。我遇到了 Zabcluster 和 Zookeeper,但我不确定这是否能满足我对简单主-主设置的要求,而无需进行太多额外的复杂更改。

集群

database-replication redis multi-master-replication

5
推荐指数
1
解决办法
1587
查看次数

PostgreSQL 复制:多个 Master 到单个 Slave

我在不同的地理位置(本地站点)有几个 PostgreSQL 数据库。

  • 每个本地站点 DB 都具有相同的架构,但具有唯一的数据。例如,以包含以下列的表为例:Site_ID、Department_ID、Department_Name。Site_ID 对于每个站点都是唯一的。
  • 我想将本地站点数据库中的所有数据收集到充当数据仓库的集中式数据库(再次是 PostgreSQL)中。
  • 集中式数据库上的相应示例表将具有与上述相同的列。所有本地站点数据都将进入此表。当然,每个站点数据由 Site_ID 指定。

问题:如何使用 PostgreSQL 复制方法实现这一点?(流媒体/多主 UDR/BDR/等)

限制:本地站点只能进行传出网络连接(即由于防火墙限制不能进行入站连接)

postgresql replication database-replication transactional-replication

5
推荐指数
0
解决办法
621
查看次数

MonogoDB 副本集状态未从启动更改为辅助

我已经设置了一个带有 3 个节点(虚拟机运行 CentOS)的 MongoDB 副本集。一个节点成为主节点,其他 2 个节点卡在启动中。当这 2 个节点将其状态从启动更改为辅助时。

aryabhata:PRIMARY> rs.status()
{
    "set" : "aryabhata",
    "date" : ISODate("2016-04-30T08:10:45.173Z"),
    "myState" : 1,
    "members" : [
            {
                    "_id" : 0,
                    "name" : "localhost.localdomain:27017",
                    "health" : 1,
                    "state" : 1,
                    "stateStr" : "PRIMARY",
                    "uptime" : 69091,
                    "optime" : Timestamp(1461935462, 1),
                    "optimeDate" : ISODate("2016-04-29T13:11:02Z"),
                    "electionTime" : Timestamp(1461934754, 1),
                    "electionDate" : ISODate("2016-04-29T12:59:14Z"),
                    "configVersion" : 459192,
                    "self" : true
            },
            {
                    "_id" : 1,
                    "name" : "repset1.com:27017",
                    "health" : 1,
                    "state" : 0,
                    "stateStr" : …
Run Code Online (Sandbox Code Playgroud)

mongodb database-replication replicaset

5
推荐指数
2
解决办法
8206
查看次数

为什么在 MongoDB 中找不到文档,但读取重试有帮助?

有时我们会观察到下一种情况:

  • 我们w: 1通过mongos写入分片primaryA 副本的路由器向 MongoDB 插入一个带有写入问题的文档。
  • 我们local通过mongos应该从分片primaryA 的副本读取的路由器使用默认读取关注从 MongoDB 读取此文档。
  • 这就像未找到文档一样findOne返回null
  • (实际上它是 Python 驱动程序pymongo - find_one(),它返回None)。
  • 我们休眠 0.1 秒并重试读取。
  • 在步骤 2-5 中,文档最终被成功读取。

我们发现:

  • 当大量文档快速插入到此集合中时,会更频繁地观察到这种情况。
  • 我们怀疑这样​​的插入会导致块从分片 A 到分片 B 的分块和迁移。
  • 文档在迁移时,是否会在短时间内无法读取?
  • 但是只有一个插入到只有一个分片db.oplog.rs,没有fromMigrate标志。

为什么会发生?如何正确处理?

这些误报“未找到”-s 可能会导致错误的原子查找或创建通过$setOnInsert?

sharding database-migration mongodb database-replication pymongo

5
推荐指数
0
解决办法
394
查看次数

Google Datastore 跨区域复制

我们有一个在美国和欧盟托管的应用程序。为了获得出色的性能,我们将在两个位置托管一个数据存储实例。

现在我们的问题是如何将数据从美国数据存储复制到欧盟数据存储?

或者从技术角度来看,我们将数据存储在哪里并不重要?

database-replication google-cloud-datastore

5
推荐指数
1
解决办法
4629
查看次数

微服务数据复制模式

在微服务架构中,我们通常有两种微服务通信的方式。假设服务 A 需要从服务 B 获取信息。第一个选项是远程调用,通常通过 HTTPS 同步,因此服务 A 查询服务 B 托管的 API。

第二种选择是采用事件驱动架构,其中服务 B 的状态可以以异步方式由服务 A 发布和消费。使用此模型,服务 A 可以使用来自服务 B 的事件的信息更新其自己的数据库,并且所有查询都在此数据库中本地进行。这种方法的优点是可以更好地分离微服务,从开发到运营。但它有一些与数据复制相关的缺点。

第一个是磁盘空间的高消耗,因为相同的数据可以驻留在需要它的微服务的数据库中。但在我看来,第二个最糟糕:如果服务 B 不能按需要快速处理其订阅,或者在服务 B 上创建它的同时它不能用于服务 A,则数据可能会变得陈旧,因为模型的最终一致性。

假设我们使用 Kafka 作为事件中心,其主题配置为使用 7 天的数据保留期。当服务 B 发布其状态时,服务 A 保持同步。两周后,新服务 C 部署完毕,其数据库需要使用服务 B 拥有的所有信息进行充实。由于最旧的事件已经消失,我们只能从 Kafka 主题中获取部分信息。我的问题是我们可以使用哪些模式来实现此微服务的数据库丰富(除了要求服务 B 将其所有当前状态重新发布到事件中心)。

event-driven eventual-consistency database-replication apache-kafka microservices

5
推荐指数
1
解决办法
2656
查看次数

我可以编写一个 activerecord 作用域,在查询时将结果包装在一个块中吗?

我们的 rails 应用程序有一个主数据库和一个副本数据库。我们已经定义了一个接受块的方法,并且在块内部时,将对副本进行查询,如下所示:

on_replica do
  @my_things = MyModel.where(my_attr: "my value").to_a
end
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下效果很好,但如果您实际上不在块中执行查询,则它不起作用:

on_replica do
  @my_things = MyModel.where(my_attr: "my value")
end

# this will run its query against the primary DB
@my_things.to_a 
Run Code Online (Sandbox Code Playgroud)

我真的很想能够定义一个范围(或类似范围的东西),以便任何发生在方法链中该点之后的查询都会针对副本发生:

@my_things = MyModel.where(my_attr: "my value").eventually_on_replica

# this runs its query against the replica DB:
@my_things.to_a
Run Code Online (Sandbox Code Playgroud)

是否可以eventually_on_replica使用现有on_replica方法定义一种以这种方式工作的方法?如果MyModel.eventually_on_replica.where(my_attr: "my value")工作也加分。

ruby-on-rails database-replication rails-activerecord

5
推荐指数
1
解决办法
110
查看次数