导致数据丢失的两种情况
主备切换的过程,可能会导致数据丢失:
- 异步复制导致的数据丢失
因为
master->slave
的复制是异步的,所以可能有部分数据还没复制到
slave
,
master
就宕机
了,此时这部分数据就丢失了。
- 脑裂导致的数据丢失
脑裂,也就是说,某个
master
所在机器突然
脱离了正常的网络
,跟其他
slave
机器不能连
接,但是实际上
master
还运行着。此时哨兵可能就会
认为
master
宕机了,然后开启选举,将
其他
slave
切换成了
master
。这个时候,集群里就会有两个
master
,也就是所谓的
脑裂
。
此时虽然某个
slave
被切换成了
master
,但是可能
client
还没来得及切换到新的
master
,还继
续向旧
master
写数据。因此旧
master
再次恢复的时候,会被作为一个
slave
挂到新的
master
上去,自己的数据会清空,重新从新的
master
复制数据。而新的
master
并没有后来
client
写
入的数据,因此,这部分数据也就丢失了。