Redis 哨兵模式

为什么要引入Redis 哨兵机制呢

Redis主从复制中存在问题,第一个问题:当主节点挂了 的 时候,从节点转化 为主节点 必须要人工转化

第二个 问题 :主节点写数据 的压力并没有被分担 当写请求过多,主节点仍承受巨大压力

引入哨兵机制就是为了 解决第一个问题

名词解释

主节点:一个Redis -server进程

从节点:一个Redis-server进程

Redis数据节点:主从节点

哨兵节点:一个Redis-sentinel进程(它与主从节点不同,是Redis的不同进程)用来监测主从节点

哨兵集合:主要是防止哨兵节点挂 所以引入多个哨兵结合组成集合

Redis sentinel架构如下

这些sentinel节点会与主从节点建立长的TCP连接 定时发送心跳包 来监控该节点

1.设计sentinel哨兵 节点集合 去监控 主从节点

2.当有sentinel某一节点 监控到主节点 挂了 它会与其他sentinel节点进行 沟通 查证是否 该主节点是否真正挂掉,防止出现误判的情况

3.发现主节点挂之后,sentinel节点群就会选举出一个leader 这个leader就会从从节点中选择一个作为新的主节点

4.挑选出新的节点后 ,哨兵节点就会控制该节点执行slaveof no one,将其他从节点slave到该节点下

5.哨兵节点就会通知客户端新的主节点是谁,这样客户端后续的操作就针对新的主节点进行操作了

哨兵节点核心功能:

1.监控

2.自动故障转移'

3.通知客户端

注意:哨兵节点有一个也是可以的

但会出现两个问题:

1.当哨兵节点挂时,程序 的问题无法保障

2.误判可能性增加 毕竟网络传输容易出现抖动和延迟

哨兵节点最好是奇数个 建议至少是三个

当 曾经的主节点恢复后 会变为从节点留在新主节点下

主从切换的 具体流程

1.主观下线

哨兵节点监测到主节点挂(可能 出现误判此时)

2.客观下线

哨兵节点集合就会投票 判断是否真的挂掉 (票数达到法定票数)

3.哨兵节点集合 推举出一个 leader

由这个leader去负责选一个从节点来顶替主节点

4.leader 从 从节点集合中选出一个主节点

a)优先级

每个Redis节点 都会在配置文件中,有一个优先级的设置,slave-priority 优先级高的从节点 就会胜出

b)offset 同步进度

offset 从节点从主节点 这边同步数据的进度 ,数值越大,说明此从节点的数据与主节点越接近

c)run_id

每个Redis节点启动的时候随机生成的一串数字 此时随便选一个

5.leader就会控制所选出的从节点

执行slaveof no one 成为主节点 ,其他从节点执行slaveof 加入到新主节点下

注意 哨兵集合是先选举出一个leader 而不是先选出一个从节点 从节点的选择是所选出leader的工作

总结

1.哨兵节点不能只有一个,否则哨兵节点挂了也会影响系统可用性

2.哨兵节点最好是奇数个,方便选举出leader 得票更容易超过半数

3.哨兵节点不负责存储数据,仍然是redis主从节点负责存储

4.哨兵+主从复制 解决的问题是"提高可用性",不能解决数据 极端情况下丢失的问题(当主节点挂时 从节点还未来得及数据同步 )

5.哨兵+主从复制不能提高数据的存储容量,当我们 需要存的数据接近或超过机器的物理内存时,这样的结构就难以胜任了

相关推荐
笃行3501 小时前
数据集成软件里最贵的一行字,叫“用同步工具做增量同步“
数据库
吴声子夜歌1 小时前
Docker入门与实战——Etcd(高可用的键值数据库)
数据库·docker·etcd
Pniubi1 小时前
力扣146.LRU缓存机制
算法·leetcode·缓存
qq_白羊座2 小时前
Hologres / PostgreSQL jsonb 常用函数 & 操作符对照表
数据库·postgresql
千桐科技2 小时前
qData 数据中台专业版功能解析:告别 Excel 与 SQL 拼凑,打通系统合并的可追踪数据链路
数据库·sql·excel·qdata
jiushidt2 小时前
在 DBeaver 中为 SQLite 启用 SpatiaLite
数据库·sqlite
码士集团小青3 小时前
Google 开源了啥,让 AI Agent 碰数据库不再是定时炸弹
数据库·oracle
欣栀♡3 小时前
Spring 循环依赖不止三级缓存,Boot 2.6 起这个开关默认已经关了
java·spring·缓存
CS创新实验室3 小时前
数据库突然断电,凭什么没丢数据?——WAL 日志与崩溃恢复
数据库·mysql
xiaoqiMikko3 小时前
Redis 实战(二):宕机会丢多少数据 —— kill -9 与真断电下 RDB / AOF 逐个实测(6.2.4)
redis·后端