美文网首页
分布式缓存-Redis集群

分布式缓存-Redis集群

作者: 木子葱葱 | 来源:发表于2020-03-09 19:21 被阅读0次

    在前面文章介绍了Redis的一些常用命令,及持久化方式,那么Redis作为一个分布式缓存是怎么保证自己数据的高可用的,下边我们来介绍一下Redis的集群

    Redis的主从复制

    主从复制流程

    主从复制

    1.slave服务器通过psync命令发送它自己已有的同步进度(同步源ID-可以理解用master-server的唯一id,同步进度offset)
    2.master收到请求后,如果同步源id为当前master-server,则根据偏移量offset增量同步
    3.如果同步源非当前master,则进入全量同步,master-server生成rdb数据快照传输到slave,加载到slave内存中
    4.复制的过程是异步复制
    5.一个master可以拥有多个slave
    6.slave可以接受其他slave的连接,同事slave也可以有下级的sub-slave
    7.主从同步时,在master侧是非阻塞的
    8.slave初次同步,会删除旧数据,加载新数据,会阻塞到来的连接请求

    主从复制使用场景

    1.读多写少
    2.slave设为只读,数据安全隔离
    但会出现复制风暴的问题,一主多从,每个slave都要复制,并且主从复制,还是只有一个master,写的能力还是有限

    主从复制的使用

    1.为提升master写的性能,master关闭持久化,slave开启aof,减少master持久化的压力
    2.关闭故障自动重启,master重启后,无数据,会导致集群数据丢失。
    3.故障后,从slave拿到备份文件就行恢复,然后手动重启master

    Redis哨兵模式

    哨兵模式

    1.哨兵连接到master,为client提供服务,如果哨兵是一个集权,只有超过一定数量的哨兵,判定master存在问题,才会做故障切换
    2.client在使用期间,真正访问的是Redis-server master,当客户端发现Redis-server出现问题时,会去询问哨兵,如果哨兵出现了问题,此时集群中还有其他哨兵,客户端在重试之后,会连接到其他哨兵,这里只有当客户端无法去连接redis-server 的master时,才会去通过询问哨兵,获取最新的可用连接
    3.哨兵搭建与故障恢复流程


    搭建与故障恢复流程

    哨兵如何知道Redis主从信息

    1.哨兵配置文件中,保存这主从集权中master的信息,哨兵启动时,通过info命令,进行主从信息的自动发现
    2.哨兵的检测机制,哨兵通过向Redis服务发送ping请求,来判断Redis服务的状态。

    主观下线与客观下线

    1.主观下线:单个哨兵自认为Redis实例已经不能提供服务。
    2.客观下线:一定数量值的哨兵认为master下线。当哨兵认为master下线后,则通过sentinelis-master-down-by-addy 命令询问其他哨兵,是否认为master已经下线,如果达成共识(到达quorum个数,哨兵配置文件中可以配置),就认为master节点客观下线,开始故障转移。

    哨兵之间如何通信

    哨兵之间通过PUB/SUB消息订阅。

    sentinel 命令来订阅
    

    哨兵的选举规则:Raft算法

    Raft算法主要分为四个阶段。
    1.拉票阶段,所有的哨兵都希望自己成为领导者,都会去发起选举
    2.sentinel节点收到拉票命令后,如果没有收到或者同意过其他的sentinel节点的请求,就同意该sentinel节点的请求,每个sentinel只持有一张票数
    3.如果sentinel节点发现自己的票数已经超过一半的值,那么它就成为领导者,去执行故障转移
    4.投票结束后,如果超过failover-timeout的时间内,没进行实际的故障转移操作,则重新拉票选举
    Raft算法为避免出现无法选举的情况,在每个sentinel去发送拉票的时候,会有随机休眠去进行拉票,这样有效避免了无法选举出leader的情况。

    相关文章

      网友评论

          本文标题:分布式缓存-Redis集群

          本文链接:https://www.haomeiwen.com/subject/hdxmdhtx.html