之前我们写过一次MySQL的主从复制,本文是Redis的主从复制。两篇文章有着其共通之处。
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/fllower);Master以写为主,Slave以读为主。 主从复制的作用: 1)读写分离,性能扩展; 2)故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。
1)Slave启动成功连接到master后会发送一个sync命令; 2)Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,并完成一次完全同步。 3)全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中; 4)增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步; 5)但是只要是重新连接master,都会执行一次全量复制。
普通的主从切换技术的方法是,当主服务器宕机后,手动的把一台服务器切换为主服务器。而哨兵模式是一种特殊的模式,哨兵是一个独立的进程,哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他从服务器,修改配置文件,从而切换主机。
多哨兵模式: 假设主服务器宕机,哨兵1监测到这个结果,系统并不会马上进行故障转移,仅仅是哨兵1主观认为主服务器不可用,这个现象称为主观下线。当后面的哨兵也监测到主服务器不可用,并且数量达到一定值时,那么哨兵之间会进行一次投票,并根据投票结果进行故障转移。切换成功后,通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程叫做客观下线。 哨兵模式的优点: 主从复制的所有优点;主从模式的升级,从手动切换到自动选主;
哨兵模式的缺点: 实现哨兵模式的配置比较麻烦;不好在线扩容,集群数量达到上限后,扩容比较麻烦。
哨兵模式的简单实现方式: 1.配置哨兵配置文件 sentinel.conf #sentinel monitor 被监控的名称 host port 1 Sentinel monitor myredis 127.0.0.1 6379 1 2.启动哨兵 redis-sentinel sentinel.conf