TiKV如何处理脑裂的情况

TiKV处理脑裂的情况主要依赖于Raft协议。在election time这段时间内,即使region Leader本身故障(比如发生了网络分区)也仍然作为region Leader,这时数据读取的方式是Lease read,即local read。这种方式可以保证线性一致性,即在某个时间点我们写入了一个值,那么在这个时间点之后,我们的读一定能读到这个值,不可能读到这个时间点之前的值[*]

另外,如果发生脑裂,客户端请求到了少数集群,不会收到Ack,再次尝试请求,此时请求了多数集群,会收到Ack。当网络恢复后,少数集群会自动成为 Follower[*]

如果大于半数的pd节点损坏,我们可以直接参照节点全部损坏的场景去做,或者按照脑裂的方式都是可以的,因为大于半数节点损坏之后集群就无法选出leader了,或者也可以按照脑裂的样例单独启动一个节点再对其他的节点进行缩容扩容处理[*]

2 个赞