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主机

相关推荐
这个DBA有点耶5 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶7 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技7 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend8 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence11 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend1 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶1 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung1 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql