两地三中心tikv region的写入问题

请问下各位老师,如下图所示

假设有两地三中心的架构,DC1-GZ和DC2-GZ算一个城市的两个数据中心,DC3-BJ算另外一个城市的数据中心,有5个region的副本,按照大多数原则,5个region 中有3个副本写入,就算是提交成功了,但目前有两个很困惑问题:
1、5个region 中有3个副本写入,就算是提交成功了,这3个副本是不是任意是3个副本就行,比如region1,region2,region3, 又或者是region1,region3,region4,有没有什么参数控制这种行为,比如在两地两中心架构中,存在 primary-replicas = 1 和dr-replicas = 1,必须保证主数据中心和灾备数据中心有多少个region写入才算提交?

2、假设DC2-GZ数据中心损坏,整个时候只有region1,region2,region5 这三个副本存活,但如果region5 没有收到相应的raft log,这个时候 这三个region region1,region2,region5 的数据是不一致的,这个时候还能发生选举出新的leader 然后对外提供服务吗?

2 个赞

1.一般不需要启用自适应同步模式,任意3个副本写入就算是成功了。可以通过控制 Region Leader 和 PD Leader 分布实现同城数据中心共同负载业务流量的设计。
2.两地三中心只能保证一个数据中心发生故障或灾难时对外提供服务。如果由于DC2也发生故障导致region5 没有收到相应的raft log,只存在2副本的情况无法对外提供服务。
两地三中心部署可以参考
https://docs.pingcap.com/zh/tidb/stable/three-data-centers-in-two-cities-deployment

3 个赞

1、2地3中心中就是正常的raft,没有特殊设置哪个中心必须收到信息才可以,一般会把异地中心的leader驱逐,仅同城2中心提供服务。
2、按照你的图,5副本的情况下DC2-GZ中心损坏,其他2个中心只有3个副本,只有3个副本都完成写入的情况下应用才能正常返回,否则再有一个中心出现异常就会不可用。如果在第一个中心坏掉后,调整最大副本数为3的话,则异地中心坏了不影响可用性。

2 个赞

一个中心最多损坏2副本,你配置了5个副本,也就是老数据都有5个副本,这中挂掉2副本一点问题没有。如果是新数据,才写了3副本,那么挂掉2个副本,新数据也是可以恢复成多副本的。

3 个赞

1、5个region 中有3个副本写入,就算是提交成功了,这3个副本是没控制哪三个副本的,但是可以控制Leader在哪里,这样网络访问就近3副本返回就可以成功了的。其他2个就相当于异步完成的,并不影响成功。

2、假设DC2-GZ数据中心损坏,整个时候只有region1,region2,region5 这三个副本存活,但如果region5 没有收到相应的raft log,则不对外提供服务,就类似于写入失败了。

2 个赞

region1,region2,region5 这三个副本存活,region1 选举了成了新的leader,而region5 与region1相比还差了一部分raft log,这个时候,region 5还会向region1 去获取这一部分所差的raft log,做数据补偿嘛

2 个赞

会啊,raft是不允许日志空洞的,必须是追平才可以继续服务

2 个赞

raftlog是允许有apply差异的,只要多数成员的log append了就能返回raftlog commit成功。有参数设置阈值,在阈值范围内,会走正常的raftlog apply。超出阈值范围后会直接发生整个region的snapshot

2 个赞

谢谢老师

2 个赞

谢谢大佬

3 个赞

没问题后,记得标记一下

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。