官网中关于Redis + Sentinel主从切换的一些说明

  在redis官网中关于redis + Sentinel主从切换的一些说明,主从切换会丢失数据,无论用何种持久化方式都无法保证主从数据强一致性。

 

     在每个Sentinel设置里,redis数据复制是异步的,总是会有丢失写入数据的风险,因为一个确认写入的数据不能到达新的master。就如上面的设置,有很大的风险,由于客户端分区在老的master里。如图所示。

    在这个案例中老的master m1被网络分区隔离,从节点R2被选举为新的master。但是客户端如C1与老的master在相同的分区里,会继续往老的master中写入数据,这些数据将永远丢失直到分区恢复。老的master将重新配置为新master的从节点,丢弃它的原有的数据集。

    这个问题使用redis的复制特性能被缓解,一旦发现不能与设置数量的从节点进行传输写数据,老的master将停止接收写入数据。

   总的来说,Redis + Sentinel是一个最终一致的系统。

   虽然丢失数据的情况并不常见,但实际中还是有可能发生的,正如官方文档所言,redis并不能保证强一致性。我们在设计和开发的时候要考虑这个问题,在redis缓存数据丢失、生成ID重复等问题出现,程序要有相应的处理措施,避免导致程序崩溃或无法使用。

 

参考:https://redis.io/topics/sentinel