脑裂原因

让 master、slave 和 sentinel 三类节点处于不同的网络分区,此时哨兵无法感知到 master 的存在,会将 slave 提升为 master 节点,此时就会存在两个 master,原来的客户端继续往旧的 master 写入数据,而新的 master 就会丢失这些数据

解决问题

通过配置文件修改两个参数

1
2
3
4
5
6
7
#表示连接到 master 最少 slave 的数量
min-slaves-to-write 3
#表示 slave 连接到 master 最大的延迟时间
min-slaves-max-lag 10
#新版本写法
min-replicas-to-write 3
min-replicas-max-lag 10

配置这两个参数之后,如果发生集群脑裂,原先的 master 节点接收到写入请求就会拒绝,就会减少数据同步之后的数据丢失