Redis高可用原理 主从哨兵集群


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并找到对应的节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值