Redis 5.0.8 05 哨兵机制

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了,哨兵能自动切换。