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

相关推荐
tant1an26 分钟前
MySQL面试题(一)
数据库·mysql
喜欢的名字被抢了1 小时前
MongoDB生产实践:架构设计、分片集群与运维监控
数据库·mongodb·教程
红糖奶茶1 小时前
MySQL 8.0的自增主键持久化特性
数据库·mysql·adb
Macbethad2 小时前
基于TwinCAT的半导体刻蚀设备SCADA管理程序技术方案
运维·网络·数据库
ai_coder_ai2 小时前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行设备相关操作
数据库·云原生·自动化
oradh2 小时前
Oracle DG主备架构的基本维护操作总结
数据库·oracle·架构·dg主备架构的基本维护操作总结
xieliyu.3 小时前
MySQL 六大基础约束详解:NOT NULL/DEFAULT/UNIQUE/ 主键 / 外键 / CHECK
android·数据库·sql·mysql
前端Baymax3 小时前
Redis内存暴涨导致服务雪崩
redis
JSON_L3 小时前
MongoDB文档关系详解
数据库·mongodb
卓怡学长4 小时前
w268基于springboot + vue 物流系统
java·数据库·vue.js·spring boot·spring·intellij-idea