Redis sentinel 哨兵群集

 简介

概述:哨兵模式是主从的升级版,因为主从的出现故障后,不会自动恢复,需要人为干预,这就很麻烦。在主从的基础上,实现哨兵模式就是为了监控主从的运行状况,对主从的健壮进行监控,就好像哨兵一样,只要有异常就发出警告,对异常状况进行处理

Redis Sentinel:是一个分布式系统,Redis SentinelRedis提供高可用性。可以在没有人为干预的情况下 阻止某种类型的故障 

主要作用:redis会代替宕了的主redis

其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。同时 sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程,可以做到sentinel的高可用

 如图:

 关于sentinel的三个定时任务:
1、每1秒每个sentinel对其他sentinelredis节点执行ping操作,心跳检测
2、每10秒每个sentinel会对masterslave执行info命令,目的是发现slave结点,确定主从关系
3、每2秒每个sentinel通过master节点的channel交换信息(pub/sub)。master节点上有一个发布订阅的频道(sentinel:hello)。sentinel节点通过__sentinel__:hello频道进行信息交换(对节点的"看法"和自身的信息),达成共识

 Redis Sentinel的工作方式

Redis Sentinel 系统用于管理多个 Redis 服务器(instance

工作方式如下:

1、监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
2、提醒(Notification): 当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
3、自动故障迁移Automatic failover如果 master 没有按预期工作,Sentinel 可以启动一个故障转移过程,其中一个副本被提升为 master,其他额外的副本被重新配置为使用新的 master,并且使用 Redis 服务器的应用程序会被告知要使用的新地址连接时

配置提供程序: Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinel 以请求负责给定服务的当前 Redis 主节点的地址。如果发生故障转移,Sentinels 将报告新地址 

 代替主redis的过程如图:

 默认情况下:Sentinel 使用 TCP 端口 26379 运行(请注意,6379 是普通的 Redis 端口Sentinel 接受使用 Redis 协议的命令,因此可以使用redis-cli或任何其他未修改的 Redis 客户端来与 Sentinel 对话。并且可以直接查询 Sentinel 以从其角度检查受监控 Redis 实例的状态,查看它知道的其他 Sentinel,等等 

一、部署Redis Sentinel 群集

系统类型IP地址主机名称端口
CentOS7.4192.168.2.5master6379;2379
CentOS7.4192.168.2.6salve16379
CentOS7.4192.168.2.7salve26379

1、安装redis根据之前的文献进行安装:Rdeis高性能数据库

master、salve1、salve2都需安装

2、配置主从复制


[root@salve1 ~]# echo 'slaveof 192.168.2.5 6379' >> /usr/local/redis/redis.conf                                    
[root@salve1 ~]# echo 'masterauth 123.com' >> /usr/local/redis/redis.conf                                 

[root@salve1 ~]# systemctl restart redis                                      

————————————————————————————————————————————————————————————————————
[root@salve2 ~]# echo 'slaveof 192.168.2.5 6379' >> /usr/local/redis/redis.conf                                      
[root@salve2 ~]# echo 'masterauth 123.com' >> /usr/local/redis/redis.conf                                  

[root@salve1 ~]# systemctl start redis                                  

2.1验证主从复制

——————————————————————————————————————————————主上测试
[root@master ~]# redis -h 192.168.2.5 -p 6379 -a 123.com
....
192.168.2.5:6379> set qvq 1233211234567
OK
192.168.2.5:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.2.6,port=6379,state=online,offset=14,lag=0
slave1:ip=192.168.2.7,port=6379,state=online,offset=14,lag=0
master_failover_state:no-failover
master_replid:58970ae4319d3d9ca3a0a6ecc64f6c64317acde2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

192.168.2.5:6379> quit
——————————————————————————————————————————————— salve1 上查看
[root@salve1 ~]# redis -h 192.168.2.6 -p 6379 -a 123.com
.....
192.168.2.6:6379> keys *
1) "qvq"
192.168.2.6:6379> quit
—————————————————————————————————————————————— salve2 从上查看
[root@salve2 ~]# redis -h 192.168.2.7 -p 6379 -a 123.com
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.7:6379> keys *
1) "qvq"
192.168.2.7:6379> quit

3、配置Redis sentinel

[root@master ~]# cp redis-6.2.6/src/redis-sentinel /usr/local/redis/           #复制sentinel启动脚本
[root@master ~]# cp redis-6.2.6/sentinel.conf /usr/local/redis/                #复制sentinel配置文件
[root@master ~]# mkdir -p /var/redis/data                                      #创建日志存放位置


[root@master ~]# vim /usr/local/redis/sentinel.conf
.....
..
 21 port 26379
.....
 26 daemonize yes                                                              #开启后台运行
....
 36 logfile "26379.log"                                                        #日志名称
....
 65 dir /var/redis/data                                                        #指定路径
...
..
 84 sentinel monitor mymaster 192.168.2.5 6379 1                               # 1:当一台master 出现故障进行切换
......
116 sentinel auth-pass mymaster 123.com                                        #手动输入;连接master与slave节点的密码
....
125 sentinel down-after-milliseconds mymaster 1000                             #指定master的失效时间,单位毫秒;1s
....
..
225 sentinel failover-timeout mymaster 200000                                  #切换操作成功的时间周期为200s,超过认为切换失败


保存

 3.1、启动Redis sentinel

[root@master ~]# /usr/local/redis/redis-sentinel /usr/local/redis/sentinel.conf          #启动Redis sentinel 

[root@master ~]# tail -9 /usr/local/redis/sentinel.conf 
# Generated by CONFIG REWRITE
protected-mode no
user default on nopass ~* &* +@all
sentinel myid fc06c9ec190c1d80a05d06b891f19a63b7905259
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 192.168.2.7 6379
sentinel known-replica mymaster 192.168.2.6 6379


[root@master ~]# netstat -utpln|grep redis-sen
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      107083/redis-sentin 
tcp6       0      0 :::26379                :::*                    LISTEN      107083/redis-sentin 

4、测试Redis sentinel,关闭master节点后群集切换

[root@master ~]# systemctl stop redis

 查看日志:

[root@master redis]# cat /var/redis/data/26379.log 
43681:X 24 Dec 2021 05:06:38.860 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
43681:X 24 Dec 2021 05:06:38.860 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=43681, just started
43681:X 24 Dec 2021 05:06:38.860 # Configuration loaded
43681:X 24 Dec 2021 05:06:38.860 * Increased maximum number of open files to 10032 (it was originally set to 1024).
43681:X 24 Dec 2021 05:06:38.860 * monotonic clock: POSIX clock_gettime
43681:X 24 Dec 2021 05:06:38.860 * Running mode=sentinel, port=26379.
43681:X 24 Dec 2021 05:06:38.860 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
43681:X 24 Dec 2021 05:06:38.861 # Sentinel ID is fc06c9ec190c1d80a05d06b891f19a63b7905259
43681:X 24 Dec 2021 05:06:38.861 # +monitor master mymaster 192.168.2.6 6379 quorum 1
43681:X 24 Dec 2021 05:06:39.895 # +sdown slave 192.168.2.5:6379 192.168.2.5 6379 @ mymaster 192.168.2.6 6379
Redis-Sentinel集群日志信息
+reset-master主服务器已被重置
+slave一个新的从服务器已经被Sentinel识别并关联
+failover-state-reconf-slaves故障转移状态切换到了reconf-slaves状态
+failover-detected另一个Sentinel开始了一次故障转移操作,或者一个从服务器转换成了主服务器
+slave-reconf-sent领头(leader)的Sentinel向实例发送了SLAVEOF命令,为实例设置新的主服务器
+slave-reconf-inprog实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成
+slave-reconf-done从服务器已经成功完成对新主服务器的同步
-dup-sentinel对给定主服务器进行监视的一个或多个Sentinel已经因为重复出现而被移除当Sentinel实例重启的时候,就会出现这种情况
+sentinel一个监视给定主服务器的新Sentinel已经被识别并添加
+sdown给定的实例现在处于主观下线状态
-sdown给定的实例已经不再处于主观下线状态
+odown给定的实例现在处于客观下线状态
-odown给定的实例已经不再处于客观下线状态
+new-epoch当前的纪元(epoch)已经被更新
+try-failover一个新的故障迁移操作正在执行中,等待被大多数Sentinel选中(waitingtobeelectedbythemajority
+elected-leader赢得指定纪元的选举,可以进行故障迁移操作了
+failover-state-select-slave故障转移操作现在处于select-slave状态——Sentinel正在寻找可以升级为主服务器的从服务器
no-good-slaveSentinel操作未能找到适合进行升级的从服务器。Sentinel会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作
selected-slaveSentinel顺利找到适合进行升级的从服务器
failover-state-send-slaveof-nooneSentinel正在将指定的从服务器升级为主服务器,等待升级功能完成
failover-end-for-timeout故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaveswilleventuallybeconfiguredtoreplicatewiththenewmasteranyway
failover-end故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了
+switch-master配置变更,主服务器的IP和地址已经改变。这是绝大多数外部用户都关心的信息

5、测试新master节点与slave节点之间的主从同步

[root@salve1 ~]# redis -h 192.168.2.6 -p 6379 -a 123.com
......
192.168.2.6:6379> keys *
1) "qvq"
192.168.2.6:6379> set aaa aaaa
OK

————————————————————————————————————————————————————————————————-
[root@salve2 ~]# redis -h 192.168.2.7 -p 6379 -a 123.com
...................
192.168.2.7:6379> keys *
1) "qvq"
2) "aaa"
192.168.2.7:6379> set adb ase
(error) READONLY You can't write against a read only replica.

6、恢复master节点,查看群集状态

[root@master redis]# systemctl start redis
[root@master redis]# redis -h 192.168.2.5 -a 123.com
...........
192.168.2.5:6379> info replication
# Replication
role:slave
master_host:192.168.2.6
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:1
slave_read_repl_offset:1
slave_repl_offset:1
master_sync_total_bytes:-1
master_sync_read_bytes:0
master_sync_left_bytes:-1
master_sync_perc:-0.00
master_sync_last_io_seconds_ago:0
master_link_down_since_seconds:-1
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:cfc33cdad2f9a2b7a2aa07f10e75a6bc4bad6729
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 如要实现IP地址的统一性,可以使用keepalivedshell脚本实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值