a)原理
Sentinel(哨兵)是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决
① 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
② 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
③ 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
服务搭建:
环境准备
redis-master 192.168.162.200 redis主 开启sentinel
redis-slave1 192.168.162.201 redis从 开启sentinel
redis-slave1 192.168.162.199 redis从 开启sentinel
1、开启所有机器上的redis
redis-server /usr/local/redis/etc/redis.conf
yum源安装的启动命令为:systemctl start redis
2、在主上登录查询主从关系,确实主从已经实现;
确定redis主从关系已经存在
redis-cli -h 192.168.162.199 info Replication
3、在任意一台redis主机上配置sentinel 哨兵
vim /usr/local/redis/sentinel.conf(该路径为redis的安装路径)
port 26379 #默认监听端口26379
#sentinel announce-ip 1.2.3.4 #监听地址,注释默认是0.0.0.0
sentinel monitor mymaster 192.168.30.107 6379 1 #指定主redis和投票裁决的机器数,即至少有1个 sentinel节点同时判定主节点故障时,才认为其真的故障
下面保存默认就行,根据自己的需求修改
sentinel down-after-milliseconds mymaster 5000 #如果联系不到节点5000毫秒,我们就认为此节点下线。
sentinel failover-timeout mymaster 60000 #设定转移主节点的目标节点的超时时长。
sentinel auth-pass <master-name> <password> #如果redis节点启用了auth,此处也要设置password。
sentinel parallel-syncs <master-name> <numslaves> #指在failover过程中,能够被sentinel并行配置的从节点的数量;
4、开启redis-sentinel服务 ,观察是否26379端口状态;
redis-sentinel /usr/local/redis/sentinel.conf
redis-sentinel服务开启后, 其配置文件sentinel.conf里会出现redis的配置信息,如下;
vim /usr/loacl/redis/sentinel.conf
5、模拟主master-redis 故障,一个从升为新主
干掉192.168.162.200的redis服务
ps -ef | grep redis
kill -9
从从上查询新主是谁
redis-cli -h 192.168.162.199 info Replication
查看新主日志;
tail -100f /uer/local/redis/log/redis.log
然后再重新开启旧主服务;
观察Sentinel哨兵状态;
新主成功的代替了旧主,旧主修复后成为了redis从