ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
以es为例, 讲解脑裂 # 什么是脑裂 es 中每个主节点都会有几个对应的副本节点,当这个主节点宕机,会从其他几个从节点中选择出从节点。 某个集群中由于网络故障等原因导致形成了俩个网络分区,没有主节点所在的网络分区中的从节点与主节点无法正常连接通信,但是和客户端的连接是正常的。那么这个网络分区中的从节点就会选举出一个主节点,导致出现两个主节点。 # 脑裂导致的数据丢失 虽然某个从节点被切换成了主节点,但是可能客户端还没来得及切换到新的主节点,还继续往旧的主节点中写数据。旧的主节点再次恢复的时候,会被作为一个从节点挂到新的主节点上去,自己的数据就会**被清空**,重新从主节点上面复制数据,导致后面那部分往旧主节点写入的数据就丢失了。 # 脑裂解决方案 保证不出现脑裂问题,即可解决脑裂导致的数据丢失。 ## 全局过半 集群节点一般设置为 奇数 各个分区重新选举,分区的某个节点大于集群机器数量的一半,即大于或等于一半(n/2+1),则被选择为新的主节点。 zookeeper 就是这样解决脑裂问题。(基于 Paxos 算法) 这种方案时如果各个分区中的集群数量无法满足这个要求,则无法选举导致集群不可用 如果出现大于一半的集群节点出现故障,则会导致所有节点不可用。(没法选举出主节点了) ### Raft算法 ## 租约机制(Lease) 授权者授予的在一段时间内的承诺,授权一旦发出,只要在期限内,一定会按承诺的时间和内容执行。哪怕别的节点都连接不上这个节点,租约也照常执行。 一旦发布,无法撤销。如果主节点在到期前宕机了,租约依然有效,也就是会导致服务不可用,直到租约到期,选出新的主节点。这种方案是**牺牲可用性来保证一致性**。 一般设置租约为10s。授权租约一般是另外的机器。 时钟误差问题:授权机器和节点机器之间时钟不同步,导致服务不可用。