Redis 双机高可用(High Availability,HA)的基础,是 Redis 的主备复制机制。指定主备角色,是用 slaveof 命令。

指定本机为 master 

slaveof NO ONE 

指定本机为 192.168.1.10slave 

slaveof 192.168.1.10 6379

如果同 mysqlmaster-master 机制那样,分别在配置文件中指定本机为对方的 slave,配置文件中都设置 slaveof  x.x.x.x,那么这两个 Redis 启动之后不提供服务,客户端无法连接,类似于服务死锁的状态。 

实验发现,如果两个服务按照都 master 方式启动,然后给一个 master 发送 slaveof 命令,指定其为另一个的 slave,则此时双方都为 slave,数据可以进行双向同步。基于这个原理,设计了一个 Redis 双机互备的机制。

结构如下:

redis:
server:192.168.202.40
cluster
  • master:192.168.202.114
  • slave:   192.168.202.115

实现方式如下 :

  1. 两台 redis 服务器,配合 keepalived
  2. 初始状态,是在 master(192.168.202.114)上绑定 keepalivedvirtual ip192.168.202.40
  3. 启动一个监控脚本,每秒钟对两个 redis 服务进行一次扫描。
  4. 如果两台 redis 处于正常 master-slave 状态,则不进行操作。
  5. 如果 master 挂掉,监控脚本对在线的 slave(192.168.202.115)发送 slaveof NO ONE 命令,设置其为临时的主机 master,同时由于原来的 master 服务器挂掉,virtual ip192.168.202.40 自动转移至 master,不影响应用程序对 redis 的存取。此时应用程序新产生的数据都保存到 master(192.168.202.115)上。
  6. 脚本监测到原来的 master(192.168.202.114)在挂掉后重新启动加入集群,则向原 master 发送 slaveof 192.168.202.115 6379 命令,设置其为 slave,从新 master(192.168.202.115)复制在自己挂掉期间丢失的数据。

本文涉及命令可查询 Redis 中文手册:http://classfoo.com/ccby/article/aLI66w