当前位置:首页 > Redis > 正文内容

Redis Sentinel 哨兵模式

5年前 (2019-09-30)Redis590

哨兵介绍 


Sentinel 介绍 

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


哨兵主要功能 

Redis Sentinel 是一个分布式系统, Redis Sentinel 为 Redis提供高可用性。可以在没有人为干预的 情况下阻止某种类型的故障。
 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance)该系统执行以下三个任务:
 


1.监控(Monitoring):
 

Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。


2.提醒(Notification):

当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。


3.自动故障迁移(Automatic failover):

当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从

服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失

效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器

架构:

image.png


目录规划 


角色 IP端口 
Master10.0.0.51 6379
Sentinel-01 26379
Master 10.0.0.52 6379
Sentinel-01 26379
Master 10.0.0.52 6379
Sentinel-01 26379











安装配置命令 

哨兵是基于主从复制,所以需要先部署好主从复制 手工操作步骤如下: 

1、先配置和创建好 1 台服务器的节点和哨兵

2、使用 rsync 传输到另外 2 台机器

3、修改另外两台机器的 IP 地址 建议使用 ansible 剧本批量部署 


db01 命令 


#创建哨兵实例目录
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
配置文件解释 

#mymaster 主节点别名 主节点 ip 和端口,判断主节点失败,两个 sentinel 节点同意 
sentinel monitor mymaster 10.0.0.51 6379 2  

#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。 
sentinel down-after-milliseconds mymaster 30000  

#向新的主节点发起复制操作的从节点个数,1 轮询发起复制 
sentinel parallel-syncs mymaster 1  

#故障转移超时时间 
sentinel failover-timeout mymaster 180000

image.png


 db02/db03 命令 


db01 

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



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


配置主从关系 

db02 和 db03 

redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
redis-cli slaveof 10.0.0.51 6379 
ps -ef|grep redis



启动哨兵 


3台都操作 启动哨兵

redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf



配置文件的变化 

当所有节点启动后,配置文件的内容发生了变化,体现在三个方面: 

1、Sentinel 节点自动发现了从节点,其余 Sentinel 节点 

2、去掉了默认配置,例如 parallel-syncs failover-timeout 参数 

3、添加了配置纪元相关参数 查看配置文件命令 

[root@db01 ~]# tail -6 /opt/redis_cluster/redis_26379/conf/redis_26379.conf   
# Generated by CONFIG REWRITE 
sentinel known-slave mymaster 10.0.0.52 6379 
sentinel known-slave mymaster 10.0.0.53 6379 
sentinel known-sentinel mymaster 10.0.0.53 26379 7794fbbb9dfb62f4d2d7f06ddef06bacb62e4c97 
sentinel known-sentinel mymaster 10.0.0.52 26379 17bfab23bc53a531571790b9b31558dddeaeca40 
sentinel current-epoch 0

 

哨兵常用操作 API 

登陆命令 

[root@db01 ~]# redis-cli -h db01 -p 26379 Sentinel 节点是一个特殊的 Redis节点,他们有自己专属的 API 
Info Sentinel 
Sentinel masters 
Sentinel master <master name> 
Sentinel slaves <master name>  
Sentinel sentinels <master name> 
Sentinel get-master-addr-by-name <master name>    
Sentinel failover <master name> 
Sentinel flushconfig


模拟故障转移

image.png


停掉其中 1 个节点,然后观察其他节点的日志变化 故障转移后配置文件变化 

Redis Sentinel 存在多个从节点时,如果想将指定的从节点晋升为主节点,可以将其他从节点的 slavepriority 配

置为 0,但是需要注意 failover 后,将 slave-priority 调回原值. 

1.查询命令:CONFIG GET slave-priority 

2.设置命令:CONFIG SET slave-priority 0 

3.主动切换:sentinel failover mymaster 操作过程: db02/db03 操作 

redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0 

redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0 db01 操作 

redis-cli -h db01 -p 26379 Sentinel failover mymaster 



“Redis Sentinel 哨兵模式” 的相关文章

Redis持久化操作

Redis持久化持久化:就是将内存中的数据,写入到磁盘上,做永久保存。RDB 持久化介绍可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。RDB持久化优点:1、RDB是一种表示某个即时点的Redis数据的紧凑文件。RDB文件适合用于备份。例如,你可能想要每...

Redis主从复制

Redis主从复制

一.Redis主从复制Redis复制功能简单介绍1:使用异步复制。2:一个主服务器可以有多个从服务器。3:从服务器也可以有自己的从服务器。4:复制功能不会阻塞主服务器。5:可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可。Redis复制功能介绍1:Redis 使用异步复...

Redis 官方可视化工具

Redis 官方可视化工具

RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持): https://docs.r...