突破Java面试(23-8) - Redis哨兵主备切换的数据丢失问题
Github
1 数据丢失的两个场景
主备切换的过程,可能会导致数据丢失
1.1 异步复制
由于 master => slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机,于是这些数据就丢失了
1.2 脑裂导致
脑裂,也就是说,某个master所在节点突然脱离正常的网络,无法和其他slave机器连接,但实际上master还运行着
此时哨兵可能就会认为master宕机了,然后开启选举,将其他slave切换成了master
这个时候,集群里就会有两个master,也就是所谓的脑裂
此时虽然某个slave被切换成了master,但是可能client还没来得及切换到新的master,还继续写向旧master的数据可能也丢失了
因此旧master再次恢复时,会被作为一个slave挂到新的master上去,自己的数据会被清空
