主从链
有些用户发现,创建多个从服务器可能或造成网络不可用:当复制需要通过互联网进行或者需要在不同数据中心之间进行时,尤为如此。因为Redis的主服务和从服务器并没有特别不同的地方,所以从服务器也可以拥有自己的从服务器,并由此形成主从链。
从服务器对从服务器进行复制在操作上和佛那个服务器对主服务器进行复制的唯一区别在于,如果从服务器X拥有从服务器Y,那么当从服务器X在执行上节复制步骤的步骤4时,它将断开与从服务器Y的连接,导致从服务器Y需要重新连接并重新同步。
当【读请求】的重要性明显高于【写请求】的重要性,并且读请求的数量远远超出一台Redis服务器可以处理的范围时,用户就需要添加新的从服务器来处理【读请求】。随着负载不断上升,主服务器可能会无法快速地更新所有从服务器,或者因为重新连接和重新同步从服务器而导致系统超载。为了缓解这个问题,用户可以创建一个由Redis主从节点组成的中间层来分担主服务器的复制工作。如下图所示:
一个Redis主从复制树示例,树的中层有3个帮助开展复制工作的服务器,底层与9个从服务器。
尽管主从服务器之间并不一定要像上图那样组成一个树状结构,但记住并理解这种树状结构对于Redis复制来说是可行的并且是合理的,有主于读者理解之后的内容。AOF持久化的同步选项可以控制数据丢失的时间长度:通过将每个写命令同步到硬盘里面,用户几乎可以不损失任何数据(除非系统崩溃或者硬盘驱动器损坏),但这种做法会对服务器的性能造成影响;另一方面,如果用户将同步的频率设置为每秒一次,那么服务器的性能将回到正常水平,但故障可能会造成1秒的数据损失。通过同时使用复制和AOF持久化,我们可以将数据持久化到多台服务器上面。
为了将数据保存到多台服务器上面,用户首先需要为主服务器设置多个从服务器,然后对每个从服务设置appendonly yes选项和sppendonly everysec选项(如果有需要得我话,也可以对主服务器进行相同的设置),这样的话,用户就可以让多台服务器以每秒1次的频率将数据同步到硬盘上了,但这还只是第一步:因为用户还必须等待主服务器发送的写命令到达从服务器,并且在执行后续操作之前,检查数据是否已经被同步到硬盘里面。