redis集群主库为什么要读写流量

redis超时问题排查一文我提过,redis因为需要定期清理过期的数据,导致主库的流量有一部分超时严重。在研究解决方法的时候,我就想过既然mysql可以读写分离,为什么redis不行呢?下面讲述原因。

其实主要是还是因为怕主库宕机。


当一个分片中,主库挂了。我们常见的容灾策略是“切主”,也就是

  • 从从库中挑选一个,升级为主库。
  • 然后再将剩下的从库挂载到新的主库成为其从库,最终恢复整个主从集群结构。

上述的过程中,最难的不是主库的切换,而是从库的重新挂载。

这是因为redis无法像mysql、mongodb那样基于同步的点位在主库发生变化后从新的主库继续同步数据。 在redis集群中一旦从库换主,redis的做法是:

  • 1、从库把内存中的数据清空
  • 2、新主库bgsave自己的数据保存rdb
  • 3、从库开始加载主库的rdb
  • 4、从库加载完成,开始提供服务

而在上述步骤的1、2、3步骤中,20G的数据可能要20分钟,从库在同步数据的过程,是不能有流量的。这个时候所有的读写流量应该都在主库上。如果此时进行了读写分离,那么新主库接收不到读流量的。对业务造成的影响不言而喻。

文章目录
  1. 1. 其实主要是还是因为怕主库宕机。
,