zoukankan      html  css  js  c++  java
  • Redis高可用方案

    Redis高可用方案-哨兵与集群

                                    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                           
                               
                                    本文链接:https://blog.csdn.net/sunhuiliang85/article/details/78361211

    Redis高可用方案

    一.名词解释

    二.主从复制

           Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不可达的情况下,从节点可以作为

    后备顶上来,并且可以保障数据尽量不丢失(主从复制可以保障最终一致性)。第二,从节点可以扩展主节点的读

    能力,一旦主节点不能支持大规模并发量的读操作,从节点可以在一定程度上分担主节点的压力。

          主从复制面临的问题:

          1.当主节点发生故障的时候,需要手动的将一个从节点晋升为主节点,同时通知应用方修改主节点地址并重启

             应用,同时需要命令其它从节点复制新的主节点,整个过程需要人工干预。

          2.主节点的写能力受到单机的限制。

          3.主节点的存储能力受到单机的限制。

    三. 原始的故障迁移

          1.主节点发生故障后,客户端连接主节点失败,两个从节点与主节点连接失败造成复制中断。

        2.如果主节点无法正常启动,需要选出一个从节点(slave-1),对其执行slaveof  no one命令使其成为新的主节

           3.原来的从节点(slave-1)成为新的主节点后,更新应用方的主节点信息,重新启动应用方。

           4.客户端命令另一个从节点(slave-2)去复制新的主节点

           5.待原来的主节点恢复后,让它去复制新的主节点

    四.Redis Sentinel的高可用

        当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。

    RedisSentine是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和

    其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是“主节点”,它还会和

    其他的Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举一个Sentinel节点来完

    成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。整个过程是自动的,不需要人工干预,解决了

    Redis的高可用问题。

           Redis Sentinel包含了若干个Sentinel节点,这样做也带来了两个好处:

           1. 对节点的故障判断是由多个Sentinel节点共同完成,这样可以有效的防止误判。

           2. Sentinel节点集合是由若干个Sentinel节点组成的,这样即使个别Sentinel节点不可用,整个Sentinel节点集合依

               然是健壮的。

           Redis Sentinel具有以下几个功能:

           1.监控:Sentinel会定期检测Redis数据节点、其余Sentinel节点是否可到达

           2.通知:Sentinel会将故障转移的结果通知给应用方。

           3.主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系。

           4.配置提供者:在RedisSentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息。

    五. Redis Sentinel拓扑结构

    六. Redis Sentinel节点发现和监控机制

    Redis Sentinel通过三个定时监控任务完成对各个节点的发现和监控:

        1.每隔10秒,每个Sentinel会向主节点和从节点发送info命令获取最新的拓扑结构。

        2.每隔2秒,每个Sentinel节点会向Redis数据节点的_sentinel_:hello频道上发送该Senitnel节点对于主节点的判断。

           以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及他们对主节

           点的判断。这个定时任务可以完成以下两个工作:

           (1)发现新的Sentinel节点:通过订阅主节点的_Sentinel_:hello了解其他Sentinel节点信息。如果是新加入的

                    Sentinel节点,将该Sentinel节点信息保存起来,并与改Sentinel节点创建连接

           (2)Sentinel节点之间交换主节点状态,作为后面客观下线以及领导者选举的依据

        3.每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认

           当前节点是否可达。与主节点,从节点,其余Sentinel都建立起连接,实现了对每个节点的监控。这个定时任务

           是节点失败判定的重要依据。

    七. Redis Sentinel部署技巧

        1.Sentinel节点不应该部署在一台物理机上。

        2.部署至少三个且奇数个的Sentinel节点

        3.只有一套Sentinel,还是每个主节点配置一套Sentinel的讨论的建议方案是如果Sentinel节点集合监控的是同一个

           业务的多个主节点集合,那么使用方案一,否则使用方案2. 

    八. Redis Cluster|数据分区  

    Redis数据分区:RedisCluster采用虚拟槽分区,所有的键根据哈希函数映射到0-16383整数槽内,

    计算公式:slot=CRC16(key) &16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

    Redis虚拟槽分区的特点:

    1.解耦数据和节点之间的关系,简化了节点扩容和收缩的难度

    2.节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据

    3.支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。
    ————————————————
    版权声明:本文为CSDN博主「大道化简」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sunhuiliang85/article/details/78361211

  • 相关阅读:
    41:和为S的两个数
    40:数组中只出现一次的数字
    39-2:平衡二叉树
    39:二叉树的深度
    38:数字在排序数组中出现的次数
    37:两个链表的第一个公共结点
    36:数组中的逆序对
    35:第一个只出现一次的字符
    34:丑数
    33:把数组排成最小的数
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/12127391.html
Copyright © 2011-2022 走看看