Sentinel 哨兵是 redis 官方提供的高可用方案,可以用它来监控多个 Redis 服务实例的运行情况。Redis Sentinel 是一个运行在特殊模式下的 Redis 服务器。Redis Sentinel 是在多个Sentinel 进程环境下互相协作工作的。
Sentinel 系统有三个主要任务:
1.监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作。
2.提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序。
3.自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会开始进行故障迁移操作。将一个从服务器升级新的主服务器。 让其他从服务器挂到新的主服务器。同时向客户端提供新的主服务器地址
高可用 Sentinel 哨兵配置
哨兵作为对redis实例的监控,通过选举算法保证哨兵的鲁棒性和高可用,所以哨兵至少要部署3台,符合半数原则,需要5或者7,超过一半,不包含一半存活的时候,才能够选举出leader,才能进行主从的切换功能。
redis服务,至少需要存活一台,才能保证服务正常运行sentinel ,选择新 master 的原则是最近可用且数据最新且优先级最高且活跃最久
哨兵高可用测试:分别连接对应的redis服务端,手动停止哨兵,停止主reids服务,看主从是否切换成功。
三哨兵情况:redis实例挂掉两台,剩下一台能够成为主,自动切换
哨兵系统的搭建过程,有几点需要注意:
(1)哨兵系统中的主从节点,与普通的主从节点并没有什么区别,故障发现和转移是由哨兵来控制和完成的。 (2)哨兵节点本质上是redis节点。
(3)每个哨兵节点,只需要配置监控主节点,便可以自动发现其他的哨兵节点和从节点。
(4)在哨兵节点启动和故障转移阶段,各个节点的配置文件会被重写(config rewrite)。
(5)一个哨兵可以只监控了一个主节点;实际上,一个哨兵可以监控多个主节点,通过配置多条sentinel monitor即可实现。
哨兵模式和主从同步简图
Redis哨兵模式 — 高可用方案
高可用都有一个特点,故障迁移特点,发生故障在从服务器选举一台成为主服务器
配置哨兵模式需要先配置Redis的主从同步
Centos 7.4
master:192.168.142.139 — node1
salve1:192.168.142.154 — node2
slave2:192.168.142.155 — node3
Redis主从同步配置如下
修改主服务器的配置文件
在主库上修改配置并绑定地址,为了方便这里绑定0.0.0.0
[root@node1 ~]# vim /etc/redis/redis.conf
bind 0.0.0.0
daemonize yes
appendonly yes
从服务器的配置
node2
[root@node2 ~]# vim /etc/redis/redis.conf
bind 0.0.0.0
daemonize yes
appendonly yes
replicaof 192.168.142.139 6379
node3
[root@node3 ~]# vim /etc/redis/redis.conf
bind 0.0.0.0
daemonize yes
appendonly yes
replicaof 192.168.142.139 6379
主从配置完成重启redis进行测试验证
在主服务器上创建键值在从服务器上查看
在主上进行配置
在从服务器上进行查看
在node3从服务器上查看
可以查看从库的状态信息
redis-cli info replication
主从配置好了后可以配置哨兵
在每一台哨兵服务器上都可以怎么配置,先进入主服务器进行配置
[root@node1 ~]# cd /etc/redis/
[root@node1 redis]# vim sentinel.conf
bind 127.0.0.1 192.168.142.139
daemonize yes
port 26379
#声明该哨兵的主库是mymaster,主库的ip和端口分别为192.168.142.139和6379
#最后一个2的含义是,在哨兵发生领导选举时,该哨兵需要获得2票才能成为leader
sentinel monitor mymaster 192.168.142.139 6379 2
完成上面配置即可;
还有一些另外的配置也可以进行配置
[root@node1 redis]# vim sentinel.conf
#在mymaster宕机30秒后进行主观下线
sentinel down-after-milliseconds mymaster 30000
#指定在发生failover故障转移时最多可以有1个slave同时对新的master进行同步
sentinel parallel-syncs mymaster 1
#设置故障转移超时时间为180秒
#这个参数的意义比较复杂,详细可以参考官方的注释说明
sentinel failover-timeout mymaster 180000
配置完成后保存可以将配置文件发送给另外两台从服务器:
通过scp传递并覆盖即可
[root@node1 redis]# scp sentinel.conf 192.168.142.154:/etc/redis
[root@node1 redis]# scp sentinel.conf 192.168.142.155:/etc/redis
传递过去需要将bind绑定地址修改为本服务器的地址
配置完成可以通过日志查看信息
tail -f /var/log/redis/redis.log
tail -f /var/log/redis/sentinel.log
登录到哨兵的端口进行查看信息
redis-cli -p 26379