zoukankan      html  css  js  c++  java
  • redis集群 相关

    redis集群中如果有3对主从节点,其中有一对挂掉 集群还能正常工作吗?(不能)

    1.正常启动3对主从节点的集群,查看集群节点信息

    2.kill掉当前的一个主节点6379

    发现,与6379对应的从节6389点变为主节点,仍能正常从集群查询数据

    3.关闭6389主节点,并进行数据查询

    发现获取数据异常!

    分析:

    消息机制

    redis cluster集群中通过消息来进行通信。消息共有以下5种。

    meet消息:发送者会向接受者发送cluster meet命令,请求接受者将发送者加入到集群中。上文提到的无中心网络结构就是使用meet命令构建的。

    ping消息:集群中的每个节点每秒钟都会从已知节点列表选举出5个节点,然后从这5个节点中选中一个最长时间没有发送ping消息的节点作为目标节点来发送ping消息,来检测目标节点是否处于在线状态。

    pong消息:接受者接受到发送者发送的meet消息或者ping消息后,会回复pong消息,用于确认消息已经到达。另外,pong消息也可以用于刷新接收者对发送者的信息,例如故障转移后,从节点会向集群中发送pong消息,用于告知从节点已经升级为主节点。

    fail消息:fail消息用于通知将某个节点置为下线状态。例如节点A认为节点B已下线,节点A会向集群中发送一条fail消息,接受到这条消息的节点会将节点B标记为已 下线。

    publish消息:当某个节点收到publish命令后,会向集群中发送一条publish消息。

    1.redis-cluster架构图

    架构细节:

    (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

    (2)节点的fail是通过集群中超过半数的master节点检测失效时才生效.

    (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

    (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

    2. redis-cluster选举:容错

     

    (1)领着选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作.

    (2):什么时候整个集群不可用(cluster_state:fail)

        a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

        b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

     当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

     参考:https://hot66hot.iteye.com/blog/2050676

  • 相关阅读:
    form表单提交中文乱码(前台中文到JAVA后台乱码)问题及解决
    JSON工具类库: alibaba/fastjson 使用记录
    前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "
    AJAX与后台交互传参的两种方式
    小米平板充不上电解决(非硬件问题+系统升级原因)
    对于异常的理解
    solr如何进行搜索实战,关键字全库搜索
    solr5.5.4 添加mysql数据,实现同步更新
    solr5.5.4 tomcat8部署
    log4j通过配置文件配置即,即可完成系统报错想向指定邮箱发送提醒消息,网上的很多方法都又问题
  • 原文地址:https://www.cnblogs.com/cangshublogs/p/10923553.html
Copyright © 2011-2022 走看看