radondb/xenon

请教一个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一样,都是无法写入。
这些都是少数派网络隔离问题,我们保证:

  1. 少数派的master无法写入
  2. 少数派的master xenon由于无法收到足够的leader hearbeat ack会把其降级为follower

A1:
Master在收不到足够的leader heartbeat ack后,xenon降级为follower

A2:
同 A1

A3:
A 和 E是少数派,semi-sync的ack必须满足3个(包括自己,还需要其他2个),所以此时的情况跟1和3一样,都是无法写入。
这些都是少数派网络隔离问题,我们保证:

  1. 少数派的master无法写入
  2. 少数派的master xenon由于无法收到足够的leader hearbeat ack会把其降级为follower

大佬我再问一下, 因为我没有实际玩而过xenon, 您说的xenon降级为follower是说xenon会把master设为read_only或者是关闭master?

降级为follower需要做以下动作:

  1. 摘掉 vip等,也就是执行一个follower命令
  2. 设置read_only

懂了, 感谢大佬!

降级为follower需要做以下动作:

发现一个问题。如果一个节点原来是leader,当降级为follower时,设置了read_only。此节点上的数据库连接并没有中断。此时这些数据库连接实际上是不能写数据的。而程序并不知道,通过这些连接写数据,会报错。所以降级时,要把这个节点的所有连接中断吧?