Redis-哨兵模式

1.redis哨兵模式作用

1.这里的哨兵作用:

监控:Sentinel会不断检查您的master和slave是否按预期工作

自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端
2、监控原理

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例,客观下线。quorum值最好超过Sentinel实例数量的一半。
3、故障恢复原理

一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:

首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-miliseconds*10)则会排除该slave节点然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举0如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高

最后是判断slave节点的运行id大小,越小优先级越高。

当选出一个新的master后,该如何实现切换呢?

流程如下:

sentinel给备选的slave1节点发送slaveofno one命令(反客为主),让该节点成为master

2.redis哨兵模式的搭建

1.编辑哨兵模式配置文件

同样的这是一台虚拟机搭建redis哨兵模式

复制代码
mkdir /usr/local/redis-6.2.6/sentinel
cd /usr/ocal/redis-6.2.6/sentinel
mkdir 27001 27002 27003

搭建三台哨兵检测,注意哨兵模式只能是单数,因为涉及到当master主机断连的情况下,重新选取主机,如果是双数的哨兵主机导致投票两台slave主机为master会出现票数相同问题,因此哨兵模式只能为单数

在27001目录下创建sentinel.conf文件,编辑内容为

复制代码
port 27001
sentinel announce-ip 192.168.217.151
sentinel monitor mymaster 192.168.217.151 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel auth-pass mymaster xxx
dir "/usr/local/redis-6.2.6/sentinel/27001"

同样的将文件内容拷贝到27002文件夹,还有27003文件夹,且只需要修改端口

2.启动哨兵模式

先启动Redis(一主二仆)

复制代码
./redis-server /usr/local/redis-6.2.6/6379/redis-6379.conf &
./redis-server /usr/local/redis-6.2.6/6380/redis-6380.conf &
./redis-server /usr/1ocal/redis-6.2.6/6381/redis-6381.conf &

./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381

# 添加临时主从配置
slaveof 192.168.217.151 6379

在启动哨兵模式

复制代码
#第1个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27001/sentinel.conf
#第2个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27002/sentinel.conf
#第3个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27003/sentinel.conf

3.开启测试

让主节点挂机,观察master主机的变化

关闭6379master主机模拟服务关闭,此时两台从机都无法连接

需要重新登录之后才可以继续使用,此时服务是没有中断的,重新登录后6381这台服务器成为了master主机

相关推荐
ClouGence14 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
TDengine (老段)14 小时前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
Decay__14 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
zjx238814 小时前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql
真上帝的左手14 小时前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
雪芽蓝域zzs14 小时前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis
实泽有之,无泽虚之15 小时前
SQL Server数据库备份与还原详解
数据库·sqlserver
DevOpenClub15 小时前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
Java后端的Ai之路15 小时前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python
AllData公司负责人15 小时前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase