对于redis slave的持久化模型,除了从slave到master的rsync rdb之外还有更好的方法吗?

我的redis机器的rdb大小约为1 GB。 我的应用程序严重地使用redis,不能让主人处理bgsave,否则,会减慢主机中的所有系统。 所以,我必须阻止主人做这样的事情,只让奴隶做这个持久的工作。

主机需要重启时出现问题。 它必须从从站复制rdb,以将初始数据加载到内存中。 这个过程大概需要30-60秒。 如果我的redis越来越大,这个过程的时间将会增加。

我已经尝试NFS让主和奴隶使用相同的RDB读/写,但复制过程强制主要做第一次从属连接到主,它不能做这个工作bgsave,因为源rdb(主)和目标rdb(奴隶)是在同一个地方。

问题是“有没有更好的方法来做这个初始加载rdb到内存作业?”。

简单的答案是没有固有的“更快”的方法来加速从AOF或RDB加载数据到Redis。 也许从更快的磁盘有一点点增加,但正如你所观察到的,这是一个线性时间操作。

漫长的回答是,你正在达到你目前架构的极限,而且你可以重新思考。 在这种情况下有几个select,在networking上有一些细节(你自己的经验将不得不承担哪个解决scheme最适合你)。

几个选项,最复杂的第一个:

  • 2-3个奴隶和自动故障转移,由ZooKeeper协调
  • 使用Redis Sentinel
  • twemproxy

在这一点上,对数据进行分区并不能真正帮助您,因为您的数据集相对较小。 总体而言,您需要在保持持久性的同时解决主站的可用性和协调问题。

最后,上面更复杂的答案涉及水平缩放。 在单个主机和小型数据集中,您正在经历BGSAVE压力:您应该考虑垂直扩展来解决您的直接问题(即为主机提供更强大的机器)。这样,您完全可以解决从机/重启主机/从奴隶负载,至less现在。 这在短期内也可能会certificate更具成本效益。