当前位置:网站首页>Redis高可用原理 主从哨兵集群
Redis高可用原理 主从哨兵集群
2022-07-22 02:05:00 【小锋coding】
Redis支持手动版的主从复制,使用哨兵模式监控Redis集群,master宕机自动进行主从切换,哨兵sentinel是独立的进程,为了高可用,哨兵也是采用集群方式,最新的redis-cluster是多个主从的无中心化集群,支持水平扩展,包含前两种方式的自动切换和主从复制功能,配置也更加简单。
一、主从复制
工作原理
Slave启动成功连接到master后会发送一个sync命令
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
配置: slaveof host port
二、哨兵
https://blog.csdn.net/zhanghuiqi205/article/details/112169486
配置
sentinel monitor mymaster 192.168.14.101 6379 2 # 投票master宕机的数量
工作原理
一、三个定时任务
1、每个sentinel对master和slave执行info命令,第一个是用来发现slave节点,第二个是确定主从关系
2、每个sentinel通过master的channel发布订阅交换节点信息和自身信息,判断主管下线还是客观下线
3、每个sentinel对其他sentinel和redis执行ping命令,用于心跳检测,作为存活的依据
二、主管下线和客观下线
主观下线:当前sentinel实例认为master服务不可用
客观下线:多个sentinel实例认为master服务不可用,此时master变为主观下线状态
三、故障转移
故障转移是由 sentinel 领导者节点来完成的(只需要一个sentinel节点),关于 sentinel 领导者节点的选取也是每个 sentinel 向其他 sentinel 节点发送我要成为领导者的命令,超过半数sentinel 节点同意,并且也大于quorum ,那么他将成为领导者,如果有多个sentinel都成为了领导者,则会过段时间在进行选举
故障转移步骤
1、从slave结点选出合适的结点作为master节点
slave-priority越小优先级越高
复制偏移量offset越大优先级越高(数据越完整)
runId最小的slave结点(启动越早)
2、对上面选出来的执行slaveof of no one
3、像剩余结点发送命令,让他们成为新master的slave结点
4、更新原来的master节点配置为slave节点,重新恢复去复制新master的节点信息
优缺点
优点:主从复制的加强版,自动主从切换
缺点:在线扩容比较麻烦;只有主节点提供服务,不太支持高并发
总结
sentinel集群是独立的线程,能够监控redis集群,发现master宕机后自动切换。
三、集群
https://blog.csdn.net/xueguchen/article/details/109847085
原理
将所有数据分为16384个槽位slots,每个节点负责一部分槽位。槽位的信息存储于每个节点中。
使用crc16算法进行hash并对16384取模得到具体槽位,客户端发送请求后可以缓存槽位信息。
当节点发现槽位信息不归自己管理时,会发送跳转指令携带目标操作的节点地址,客户端跳转到正确的节点进行操作,并更新本地的槽位映射表。
集群节点采用gossip协议进行通信
goosip协议包含多种消息,包括ping,pong,meet,fail等
优点在于元数据的更新比较分散,不是集中在一个地方,陆陆续续打到所有节点上,减少网络负担。(每次选择最久没通信的节点,携带少量的其他信息,因此有一定的交互延迟)
meet:发送meet给新加入的节点,让新节点加入集群
ping:互相ping交换自己的状态和维护的集群状态
pong:对ping和meet消息的返回,包含自己的状态和信息,也可用于广播和更新
fail:某节点发现其他节点宕机后,发送fail通知其他节点
JedisCluster客户端
初始化的时候,随机选择一个node,初始化hashslot映射表,同时为每个节点创建一个JedisPolol连接池。每次基于JedisCluster操作,现在本地计算key的hashSlot并找到对应的节点。
边栏推荐
- 机器学习笔记 - 机器学习系统设计流程概述
- 微服务简介
- df.drop_duplicates() 详解+用法
- Redis master-slave replication
- 2022-07-18 eliminate traversal processing of exists subquery
- 92.(leaflet篇)leaflet态势标绘-进攻方向采集
- How Linux queries Oracle error logs
- Still asking what to use for interface testing? Universal JMeter creates a performance test data platform
- 【C语言-文件】数据终于可以出内存,到外面的世界看看了/(ㄒoㄒ)/~~
- Pdf to image and content reading
猜你喜欢
MySQL Workbench使用教程
Pytorch deep learning practice-1-overview
Still asking what to use for interface testing? Universal JMeter creates a performance test data platform
Accelerate the construction of standard system and promote the high-quality development of data security industry
Worthington deoxyribonucleic acid and related research tools
K-均值聚类建模以及编程实现
IO 和NIO的区别
Various application schemes of animal free collagenase Worthington
Worthington peptide synthesis application chymotrypsin scheme
电流探头应该如何选择
随机推荐
How to prolong the working life of slip ring
visual studio踩坑记录
Huawei cloud computing fuisoncompute8.0 installation
Voting cannot be repeated
Do you know who the "open source queen" is-- Facing the threat of being fired, she still insisted on opening a famous project
TDengine学习笔记
Use expansion of redis persistence
《PyTorch深度學習實踐》-1-Overview
Pytorch deep learning practice-1-overview
【C语言-文件】数据终于可以出内存,到外面的世界看看了/(ㄒoㄒ)/~~
Various application schemes of animal free collagenase Worthington
The difference between static variables and global variables
JDBC编程
Redis使用Jedis操作
机器学习笔记 - 机器学习系统设计流程概述
RPC core module summary
电流探头应该如何选择
MySQL写循环语句的方法
涂鸦Wi-Fi&BLE SoC开发幻彩灯带(5)----烧录授权
Graffiti Wi Fi & ble SoC development slide strip (5) -- burning authorization