前言
上篇文章我们讲了Redis的主从复制
搭建,但是大家这里思考
一个问题,如果我的主节点挂了
,那是不是就只有从节点了。那就没有机器接受Redis的写请求
了,那这样肯定是不行的对吧。
这里我们的哨兵机制
就是解决这个问题:故障转移
,如果主节点挂掉,就进行主从切换
,让从节点升级
为主节点,继续对外提供服务。
文章结尾可以发表一些问题、或者建议。你们的反馈能让老哥写出更好的文章。
哨兵简介
Sentinel
(哨兵)是Redis高可用
的解决方案,可以运行多个Sentinel组成一个哨兵分布式系统。
使用流言协议(gossip protocols)来接收主机是否下线
;并使用投票协议(agreement protocols)来决定是否执行自动故障迁移
;以及选择哪个从服务器作为新的主服务器
。
Sentinel哨兵职责如下:
监控
(Monitoring):Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。提醒
(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。自动故障迁移
(Automaticfailover): 当一个主服务器不能正常工作
时, Sentinel 会开始一次自动故障迁移
操作,它会将失效主服务器的其中一个从服务器升级
为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端
试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。统一的配置管理
:连接者询问sentinel取得主从的地址。
哨兵搭建
机器准备
主从复制
的搭建,之前的文章讲过了,大家可以去参考
服务器名称 | 节点类型 | IP地址 | 端口 |
Node1 | Redis服务1(主节点Master) | 192.168.14.101 | 6379 |
Node2 | Redis服务2(从节点slave1) | 192.168.14.102 | 6380 |
Node3 | Redis服务3(从节点slave2) | 192.168.14.103 | 6381 |
Sentinel1 | 哨兵服务1 | 192.168.14.101 | 26379 |
Sentinel2 | 哨兵服务2 | 192.168.14.102 | 26380 |
Sentinel3 | 肖兵服务3 | 192.168.14.103 | 26381 |
五个主要配置讲解
在每个主从Redis目录下新建一个名为sentinel.conf的文件,在该文件下配置如下命令。
命令总格式
:sentinel <option_name> <master_name> <option_value>
一:配置sentinel监控master
示例
:sentinel monitor mymaster 127.0.0.1 6380 1
详解
:sentinel监控的master的名字叫做mymaster,地址为127.0.0.1:6380;sentinel在集群中,需要多个sentinel互相沟通来确认某个master是否真的死了;数字1代表,当集群中有1个sentinel认为master死了时,才能真正认为该master已经不可用了。
二:配置sentinel心跳
示例
:sentinel down-after-milliseconds mymaster 5000
详解
:sentinel向master发送心跳PING,确认master是否存活,如果master在down-after-milliseconds
时间(单位毫秒)范围内没有给sentinel回应PONG
,或者回复一个错误消息,那么sentinel就主观的认为这个master不可用了
三:配置主从切换时,同步新master的salve个数
示例
:sentinel parallel-syncs mymaster 1
详解
:在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步数据。这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以设为 1 来保证每次只有一个slave处于不能处理命令请求的状态
四:配置故障转移最大时间
示例
:sentinel failover-timeout mymaster 60000(毫秒)
详解
:若Sentinel进程在该配置值内未能完成故障转移的操作,则认为本次故障转移操作失败。
五:配置报警脚本
示例
:sentinel notification-script mymaster
详解
:Sentinel检测到Master主服务器异常时,所要调用的报警脚本。
sentinel配置文件示例
大家按照这个配置,分别给3个sentinel节点进行配置
# 哨兵sentinel实例运行的端口 默认26379
port 26379
#以守护进程模式启动
daemonize yes
# 哨兵sentinel的工作目录
dir /tmp
#日志文件名
logfile "sentinel_26379.log"
# sentinel监控的master主机
sentinel monitor mymaster 192.168.1.108 6379 2
# sentinel连接主从密码验证,注意必须为主从设置一样的密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 1234
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
# 失效转移最大时间设置
sentinel failover-timeout mymaster 180000
#如果了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
sentinel notification-script mymaster /var/redis/notify.sh
启动sentinel
方式1
:redis-sentinel redis-sentinel.conf
方式2
:redis-server sentinel.conf --sentinel
验证主从切换
kill掉master主节点,模拟主机出现故障
上面截图红框框住的几个重要信息,这里先介绍最后一行,switch-master mymaster
192.168.14.101 6379 192.168.14.103 6381,表示master服务器由6379
切换为6381
端口的redis服务器。
PS:+switch-master
表示切换主节点
查看6381端口Redis服务器
通过命令info replication查看,我们发现,6381的Redis服务已经切换成master节点了.
另外,也可以查看sentinel.conf 配置文件,里面的 sentinel monitor mymaster 192.168.14.101 6379 2 也自动更改为6381了
至此,哨兵模式搭建验证完成。
IT 老哥