redis技术3--Redis Sentinel哨兵

一.哨兵介绍

1.哨兵的提出

Redis的主从模式下,主节点一旦发生故障不能提供服务,需要人工干预,将从节点晋升为主节点,同时还需要修改客户端配置。对于很多应用场景这种方式无法接受。
Sentinel(哨兵)架构解决了redis主从人工干预的问题。
Redis Sentinel是redis的高可用实现方案,实际生产环境中,对提高整个系统可用性非常有帮助的。

架构图
在这里插入图片描述

2.哨兵主要功能

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

2.Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance)该系统执行以下三个任务:
1)监控(Monitoring):
Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。
2)提醒(Notification):
当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
3)自动故障迁移(Automatic failover):
当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器

二.实验部署

1.目录规划

角色             IP          端口
Master          10.0.0.51   6379
Sentinel-01                 26379
Master          10.0.0.52   6379
Sentinel-01                 26379
Master          10.0.0.53   6379
Sentinel-01                 26379

2.安装配置命令

哨兵是基于主从复制,所以需要先部署好主从复制
手工操作步骤如下:
1.先配置和创建好1台服务器的节点和哨兵
2.使用rsync传输到另外2台机器
3.修改另外两台机器的IP地址
建议使用ansible剧本批量部署

环境准备请参考:
redis1技术–基本介绍和操作
https://blog.csdn.net/weixin_44736359/article/details/107236279
redis技术2–主从复制
https://blog.csdn.net/weixin_44736359/article/details/107236301

2.1 db01配置

在db01:
mkdir -p /data/redis_cluster/redis_26379
mkdir -p /opt/redis_cluster/redis_26379/{conf,pid,logs}
vim /opt/redis_cluster/redis_26379/conf/redis_26379.conf
bind 10.0.0.51
port 26379
daemonize yes
logfile /opt/redis_cluster/redis_26379/logs/redis_26379.log
dir /data/redis_cluster/redis_26379
sentinel monitor mymaster 10.0.0.51 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000

rsync -avz /opt/* db02:/opt/
rsync -avz /opt/* db03:/opt/

2.2 配置文件解释

sentinel monitor mymaster 10.0.0.51 6379 2 
#mymaster主节点别名 主节点 ip 和端口,判断主节点失败,两个 sentinel 节点同意
sentinel down-after-milliseconds mymaster 30000 
#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
sentinel parallel-syncs mymaster 1 
#向新的主节点发起复制操作的从节点个数,1轮询发起复制
sentinel failover-timeout mymaster 180000 
#故障转移超时时间

2.3 db02/db03操作

在db02:
mkdir -p /data/redis_cluster/redis_26379
cd /opt/redis_cluster/redis
make install
sed -i 's#bind 10.0.0.51#bind 10.0.0.52#g' /opt/redis_cluster/redis_6379/conf/redis_6379.conf
sed -i 's#bind 10.0.0.51#bind 10.0.0.52#g' /opt/redis_cluster/redis_26379/conf/redis_26379.conf

在db03:
mkdir -p /data/redis_cluster/redis_26379
cd /opt/redis_cluster/redis
make install
sed -i 's#bind 10.0.0.51#bind 10.0.0.53#g' /opt/redis_cluster/redis_6379/conf/redis_6379.conf
sed -i 's#bind 10.0.0.51#bind 10.0.0.53#g' /opt/redis_cluster/redis_26379/conf/redis_26379.conf

3.配置主从关系

在db01和db02:
vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
添加这一行:
slaveof 10.0.0.51 6379

pkill redis
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
ps -ef|grep redis

4.启动哨兵

所有机子:
redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf

5.配置文件的变化

5.1 查看变化

查看配置文件,发生变化:
[root@db01 ~]# cat /opt/redis_cluster/redis_26379/conf/redis_26379.conf  
bind 10.0.0.53
port 26379
daemonize yes
logfile "/opt/redis_cluster/redis_26379/logs/redis_26379.log"
dir "/data/redis_cluster/redis_26379"
sentinel myid d9f536cbf81fae9d462e6a4cffebc74cb35ad2e5
sentinel monitor mymaster 10.0.0.51 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 18000

# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 10.0.0.53 6379
sentinel known-slave mymaster 10.0.0.52 6379
sentinel known-sentinel mymaster 10.0.0.52 26379 e55c203f3306da206af978bb5ba77efe39c392b7
sentinel known-sentinel mymaster 10.0.0.51 26379 8f5282526de5f8f13b6c88df0dd0f0c68c25c44e
sentinel current-epoch 0
查看内容:
[root@db03 redis]# cd /data/redis_cluster/redis_26379/
[root@db03 redis_26379]# ls  没有内容
可知:哨兵只负责监控警告和故障转移,不负责处理任何数据。
   
查日志的命令:
tail -f /opt/redis_cluster/redis_6379/logs/redis_6379.log
tail -f /opt/redis_cluster/redis_26379/logs/redis_26379.log

5.2变化总结

当所有节点启动后,配置文件的内容发生了变化,体现在三个方面:
1)Sentinel节点自动发现了从节点,其余Sentinel节点
2)去掉了默认配置,例如parallel-syncs failover-timeout参数
3)添加了配置纪元相关参数

6.哨兵常用操作API

登录命令
[root@db01 ~]# redis-cli -h db01 -p 26379
Sentinel节点是一个特殊的Redis节点,他们有自己专属的API
Info Sentinel                                   #查看Sentinel信息
Sentinel masters                                #查看masters信息
Sentinel master <master name>                   #查看masters节点信息
Sentinel slaves <master name>                   #查看从节点信息
Sentinel sentinels <master name>
Sentinel get-master-addr-by-name <master name>  #获取当前主节点的信息和端口号
Sentinel failover <master name>
Sentinel flushconfig

7.模拟故障转移

7.1 自动故障转移

实验目的:哨兵主节点发生故障,查看其他节点是否会重新选择主节点
在db01:
[root@m01 ~]# pkill redis   模拟主节点发生故障
在从节点查看:
[root@m02 redis]# redis-cli -h db02 -p 26379
db02:26379> Sentinel get-master-addr-by-name mymaster
1) "10.0.0.52"
2) "6379"
[root@db03 redis_26379]# redis-cli -h db03 -p 26379
db03:26379> Sentinel get-master-addr-by-name mymaster
1) "10.0.0.52"
2) "6379"
主节点已经自动切换为db02

此时在原本为主节点的db01上操作:
[root@m01 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@m01 ~]# redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf
[root@m01 ~]# redis-cli -h db01 -p 26379
db01:26379> Sentinel get-master-addr-by-name mymaster
1) "10.0.0.52"
2) "6379"     
db01已经自动切换为从节点,主节点为db02

7.2 手动指定主节点

Redis Sentinel存在多个从节点时,如果想将指定的从节点晋升为主节点,可以将其他从节点的slavepriority配置为0,但是需要注意failover后,将slave-priority调回原值.
1.查询命令:CONFIG GET slave-priority
2.设置命令:CONFIG SET slave-priority 0
3.主动切换:sentinel failover mymaster

实验目的:在发生故障后,本来是随机选取主节点,而实验想要指定某个节点为主节点。
指定db01为哨兵主节点:

在db02操作:
redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
在db03操作:
redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0

在db01操作:
redis-cli -h db01 -p 26379 Sentinel failover mymaster    #强制发生重新选举

查看:
在db01:
[root@m01 ~]# redis-cli -h db01 -p 26379
db01:26379> Sentinel get-master-addr-by-name mymaster
1) "10.0.0.51"
2) "6379"
db01已成为哨兵主节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值