异步复制导致的数据丢失:
描述:
由于master到slave的数据同步是异步的,也就是说master有请求时,master先反馈给客户端,然后才会向slave同步数据。期间可能存在部分数据还没有同步到slave,master就宕机了,然后这部分数据就丢失了。
解决方案:
设置min-slaves-lag的值为n秒,首先至少需要1个slave,一旦slave复制数据和同步的延迟超过n秒,那么就认为master宕机后损失数据过多,然后master拒绝写请求,用来将那些未同步到slave的数据降低到可控范围。
脑裂导致的数据丢失:
描述:
当master所在的机器由于网络原因和slave以及sentinel短暂失去连接,但是master依然正常运行。此时sentinel就会认为master宕机了,会开始从slave中选举新的master,此刻集群中就会出现两个master,俗称脑裂。网络恢复正常后,旧的master会变成新的master的从节点,自己的数据会清空,然后重新从新的master复制数据。
解决方案:
同样是因为min-slaves-lag这个配置,如果master出现脑裂,不能继续给指定数量的slave发送数据,而且slave超过指定时间没有给自己ack消息,那么就拒绝客户端的写请求,从而减少数据丢失。