请教一个Failover问题
Fanduzi opened this issue · 5 comments
1
Master(A)
-----/------\----------网络分区----
Slave1(B) Slave2(C)
如果出现网络分区, Master仍然存活, 但是Master无法和Slave1,2通信, A无法和B,C通信. 但是应用仍然可以访问Master, 但由于不满足半同步最小从库数, 所有写入都被阻塞等待ack, 此时Xenon会如何处理?
2
Master(A)
-----/------\----------网络分区----
Slave1(B) Slave2(C)
如果出现网络分区, Master hang(可能由于内核bug, 任何请求都无法响应), 且Master无法和Slave1,2通信, A无法和B,C通信. 应用也不能访问Master, 此时Xenon会如何处理?
3
Master(A) ---> Slave4(E)
-------/------|------\----------网络分区----
Slave1(B) Slave2(C) Slave3(D)
如果出现网络分区, Master和Slave4仍然存活, 但无法和Slave1,2,3通信, A,E无法和B,C,D通信, 应用仍然可以访问Master, 满足半同步最小从库数, 写入数据可以提交, 此时Xenon会如何处理?
A1:
Master在收不到足够的leader heartbeat ack后,xenon降级为follower
A2:
同 A1
A3:
A 和 E是少数派,semi-sync的ack必须满足3个(包括自己,还需要其他2个),所以此时的情况跟1和3一样,都是无法写入。
这些都是少数派网络隔离问题,我们保证:
- 少数派的master无法写入
- 少数派的master xenon由于无法收到足够的leader hearbeat ack会把其降级为follower
A1:
Master在收不到足够的leader heartbeat ack后,xenon降级为followerA2:
同 A1A3:
A 和 E是少数派,semi-sync的ack必须满足3个(包括自己,还需要其他2个),所以此时的情况跟1和3一样,都是无法写入。
这些都是少数派网络隔离问题,我们保证:
- 少数派的master无法写入
- 少数派的master xenon由于无法收到足够的leader hearbeat ack会把其降级为follower
大佬我再问一下, 因为我没有实际玩而过xenon, 您说的xenon降级为follower是说xenon会把master设为read_only或者是关闭master?
降级为follower需要做以下动作:
- 摘掉 vip等,也就是执行一个follower命令
- 设置read_only
懂了, 感谢大佬!
降级为follower需要做以下动作:
发现一个问题。如果一个节点原来是leader,当降级为follower时,设置了read_only。此节点上的数据库连接并没有中断。此时这些数据库连接实际上是不能写数据的。而程序并不知道,通过这些连接写数据,会报错。所以降级时,要把这个节点的所有连接中断吧?