概念
哨兵(Sentinel) 是一个分布式系统,可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossip protocols)来接收关于Master主服务器是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主
观认为宕机”
任务
每10秒每个sentinel对master和slave执行info
发现slave节点
确认主从关系每2秒每个sentinel通过master节点的channel交换信息(pub/sub)
通过sentinel__:hello频道交互
交互对节点的“看法”和自身信息
每1秒每个sentinel对其他sentinel和redis执行ping
实现
配置一主两从
slove节点
文件配置
在redis.conf文件中修改
bind 0.0.0.0
replicaof 192.168.148.157 6379
masterauth 123456
命令行配置
127.0.0.1:6379> replicaof 192.168.148.158 6379
OK
127.0.0.1:6379> config set masterauth 123456
OK
应用程序连接redis
redis的客户端
sentinel配置
bind 0.0.0.0
port 26379
daemonize yes
pidfile "redis-sentinel.pid"
logfile "/apps/redis/log/sentinel.log"
dir "/apps/redis/bin" #工作目录
sentinel monitor mymaster 192.168.148.157 6379 2 #指定当前mymaster集群中master服务器的地址和端口
#2为法定人数限制(quorum),即有几个sentinel认为master down了就进行故障转移,一般此值是所有
sentinel节点(一般总数是>=3的 奇数,如:3,5,7等)的一半以上的整数值,比如,总数是3,即3/2=1.5,
取整为2,是master的ODOWN客观下线的依据
sentinel auth-pass mymaster 123456 #mymaster集群中master的密码,注意此行要在上面行的下面
sentinel down-after-milliseconds mymaster 30000 #(SDOWN)判断mymaster集群中所有节点的主观下线的时间,单位:毫秒,建议3000
sentinel parallel-syncs mymaster 1 #发生故障转移后,同时向新master同步数据的slave数量,数字越小总同步时间越长,但可以减轻新master的负载压力
sentinel failover-timeout mymaster 180000 #所有slaves指向新的master所需的超时时间,单位:毫秒
sentinel deny-scripts-reconfig yes #禁止修改脚本
同时启动
redis-sentinel /apps/redis/etc/sentinel.conf
日志文件
新增时间用+,修复用-
服务发现:
端口查看
命令行连接
查看哨兵状态
redis-cli -h 127.0.0.1 -p 26379
故障转移
关闭master节点
查看变化后节点
日志文件
确认master挂了
2062:X 23 May 2024 22:35:39.704 # +sdown master mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:35:39.760 # +odown master mymaster 192.168.148.157 6379 #quorum 2/2
选举出新的master
2062:X 23 May 2024 22:38:40.170 # +failover-end-for-timeout master mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:38:40.170 # +failover-end master mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:38:40.170 * +slave-reconf-sent-be slave 192.168.148.159:6379 192.168.148.159 6379 @ mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:38:40.170 # +switch-master mymaster 192.168.148.157 6379 192.168.148.158 6379
2062:X 23 May 2024 22:38:40.170 * +slave slave 192.168.148.159:6379 192.168.148.159 6379 @ mymaster 192.168.148.158 6379
2062:X 23 May 2024 22:38:40.170 * +slave slave 192.168.148.157:6379 192.168.148.157 6379 @ mymaster 192.168.148.158 6379
2062:X 23 May 2024 22:38:43.223 # +sdown slave 192.168.148.157:6379 192.168.148.157 6379 @ mymaster 192.168.148.158 6379
修改配置文件
2062:X 23 May 2024 22:35:39.993 * +failover-state-wait-promotion slave 192.168.148.158:6379 192.168.148.158 6379 @ mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:35:40.172 # +promoted-slave slave 192.168.148.158:6379 192.168.148.158 6379 @ mymaster 192.168.148.157 6379
2062:X 23 May 2024 22:35:40.173 # +failover-state-reconf-slaves master mymaster 192.168.148.157 6379
查看redis.conf文件
被修改了
修复
修改损坏节点的配置文件为新的master
修改redis.conf
replicaof 192.168.148.158 6379
修改sentinel
sentinel monitor mymaster 192.168.148.158 6379 2
对比
不同点 | 相同点 | |
主从 | 不能实现角色自动切换,当master宕机之后需要手动将slave切换为master | 1.可以实现数据的跨主机备份 2.不能实现性能横向扩展 |
哨兵 | 不能实现角色自动切换,当master宕机之后需要手动将slave切换为master |