Sentinel (哨兵): Redis 的主从模式下,主节点一旦发生故障,需要人工干预,将从节点晋升为主节点,同时还需要修改客户端配置,对于很多应用场景,这种方式无法接受。Sentinel(哨兵)架构解决了redis主从人工干预的问题。 Redis Sentinel 是redis 的高可用实现方案,实际生产环境中,对提高整个系统可用性非常有帮助。 Sentinel (哨兵):主要功能 Redis Sentinel 是一个分布式系统,Redis sentinel 为redis 提供高可用性,可以在没有人为干预的情况下阻止某种类型的故障。 Redis的Sentinel 系统用于管理多个Redis服务器,该系统执行以下三个任务: 1、监控(Monitoring) Sentinel 会不断地定期检查你的主服务器和从服务器是否 运行正常 2、提醒(Notification) 当被监控的某个Redis 服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。 3、自动故障迁移(Automatic failover) 当集群中一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作,它会将集群中一个从服务器升级为新的主服务器,并让集群中其他的从服务器改为复制新的主服务器,当客户端尝试连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。哨兵集群搭建: 一、目录规划:
哨兵是基于主从复制,所以需要先部署好主从复制。 二、主从配置: redis01(192.168.189.14)上面操作:(主节点) vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yes bind 192.168.189.14 port 6379 pidfile "/usr/local/redis_cluster/redis_6379/pid/redis_6379.pid" logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log" databases 16 save 900 1 save 300 10 save 60 10000 dbfilename "redis_6379.rdb" dir "/data/redis_cluster/redis_6379" +++++++++ redis02(192.168.189.15)redis配置文件 vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yes bind 192.168.189.15 port 6379 pidfile "/usr/local/redis_cluster/redis_6379/pid/redis_6379.pid" logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log" databases 16 save 900 1 save 300 10 save 60 10000 dbfilename "redis_6379.rdb" dir "/data/redis_cluster/redis_6379" replicaof 192.168.189.14 6379 ++++++++++++++++++++ redis03(192.168.189.16)redis配置文件 vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yes bind 192.168.189.16 port 6379 pidfile "/usr/local/redis_cluster/redis_6379/pid/redis_6379.pid" logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log" databases 16 save 900 1 save 300 10 save 60 10000 dbfilename "redis_6379.rdb" dir "/data/redis_cluster/redis_6379" #主从同步 replicaof 192.168.189.14 6379 在三台服务器上,先停止redis,再同时启动redis pkill redis redis-server /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf +++++++++++++++++++++++++++++++ 在redis 5.0以前的版本,主从复制命令是:slaveof IP 端口,从5.0开始,主从复制命令是replicaof IP 端口 ,原来的slaveof 将会被逐步废弃。 +++++++++++++++++++++++++++++++ 登录三台服务器的redis,查看主从信息,确认主从配置没有问题。
![]()
![]()
三、哨兵配置: redis01(192.168.189.14)上面操作:(主节点) mkdir -p /data/redis_cluster/redis_26379 mkdir -p /usr/local/redis_cluster/redis_26379/{conf,pid,logs} vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf daemonize yes bind 192.168.189.14 port 26379 logfile usr/local/redis_cluster/redis_26379/logs/redis_26379.log dir /data/redis_cluster/redis_26379 sentinel monitor mymaster 192.168.189.14 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 保存配置。 +++++++++++++++++++++ 配置说明: sentinel monitor mymaster 192.168.189.14 6379 2 #主节点别名 mymaster , 主节点,IP(master ip) 和 端口,2 判断主节点失败,两个sintinel节点同意。 如果主节点失效了,至少需要 两个节点参与选举,才能选举出新的主节点。 sentinel down-after-milliseconds mymaster 3000 ## 主节点断了多久时间,就判断为主节点挂掉了,单位毫秒。 sentinel parallel-sync master 1 ## 发起复制节点的个数,1---->表示,一个一个的复制,一个复制完了,再进行后面的节点复制。 减轻 主节点压力 sentinel failover-timeout mymaster 18000 ## 故障转移超时时间 +++++++++++ redis(192.168.189.15)操作:(从节点) mkdir -p /data/redis_cluster/redis_26379 mkdir -p /usr/local/redis_cluster/redis_26379/{conf,pid,logs} vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf daemonize yes bind 192.168.189.15 port 26379 logfile usr/local/redis_cluster/redis_26379/logs/redis_26379.log dir /data/redis_cluster/redis_26379 sentinel monitor mymaster 192.168.189.14 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 保存配置。 +++++++++++ redis(192.168.189.16)操作:(从节点) mkdir -p /data/redis_cluster/redis_26379 mkdir -p /usr/local/redis_cluster/redis_26379/{conf,pid,logs} vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf daemonize yes bind 192.168.189.16 port 26379 logfile usr/local/redis_cluster/redis_26379/logs/redis_26379.log dir /data/redis_cluster/redis_26379 sentinel monitor mymaster 192.168.189.14 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 保存配置。 ++++++++++++++++++++++++++++++ 启动哨兵: 三台服务器同时启动哨兵 redis-sentinel /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf ps -ef|grep redis ##查看 进程 查看sentinel 的配置文件 vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf
![]()
![]()
![]()
以上在哨兵配置文件添加的内容,也可以在日志文件中查看到。
![]()
![]()
四、登录哨兵(哨兵常用的一些操作命令): redis-cli -h 192.168.189.14 -p 26379 info sentinel
sentinel master mymasters ##查看 这个哨兵组里面的 master 信息
sentinel slaves mymaster ##查看 这个哨兵组里面的 所有slave 信息
sentinel get-master-addr-by-name mymaster ##获取 哨兵组里面的master IP和端口号
五、 模拟故障转移 在192.168.189.14(现在的主节点上) 上操作。 监控 192.168.189.15 和 192.168.189.16 两个从节点日志 tail -f /usr/local/redis_cluster/redis_26379/logs/redis_26379.log pkill redis
![]()
![]()
查看配置文件信息: 192.168.189.16(现在的新 主节点) vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf
vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf
192.168.189.15 上面: vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf
vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf
测试数据是否能同步: 在新的主上面,插入一个key
在 192.168.189.15 从节点上面,查看。
这时,192.168.189.14 修复上线了, redis-server /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf redis-sentinel /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf
查看192.168.189.14 redis配置文件 vim /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf
vim /usr/local/redis_cluster/redis_26379/conf/redis_26379.conf
tail -f /usr/local/redis_cluster/redis_26379/logs/redis_26379.log
六、哨兵 手动切换 master 如果还想把 redis01------>192.168.189.14 做为主节点,应该怎么操作?这也是哨兵唯一需要手动切换的地方 直接修改每个节点的 优先级(权重),每个节点优先级,默认为100 优先级调整,是登录的redis ,而不是哨兵。 config get slave-priority ##查看节点的优先级 首先,把 192.168.189.15---16 的优先级调为0 192.168.189.15---16 登录redis config set slave-priority 0 然后,登录 192.168.189.14 哨兵模式 redis-cli -h 192.168.189.14 -p 26379
redis-cli -h 192.168.189.14
其次,把另外两个节点的优先级 调整回原来默认的100,已保证当192.168.189.14 down了,哨兵能自动切换。