zoukankan      html  css  js  c++  java
  • 简单的主备切换方案

        主备切换是很多高可用性系统都必须解决的问题,方法有很多,象基于ZooKeeper的主备切换就是一个很好的选择。

    在这里提供一种更简单但不完美的主备切换方法:
    1) 假设A和B是集群中的主控(Master)节点
    2) 1~7是工作节点(如HDFS中的DataNode)
    3) 在每个工作节点上,都同时配置了A和B的IP,而且是对等的,无主备之分

    所谓主:是指提供服务的主控,而备是指不提供服务的主控,当主故障时,由备接管其它服务,但因网络原因,可能主和备都未故障,这个是解决主备切换的关键问题所在。

    选择A或B作为主的过程:
    1) 未连接之前,如图1所示,A和B都不是主
    2) 1~7随机选择连接到A或B
    3) 这个时候可能会出现如图2所示的情况
    4) (关键点)在指定的时间内(如1秒),不管是A还是B,发现到自己的连接数小于50%(这个值可修改)就主动切断连接,这个时候会将本来和自己建立连接的节点赶往另一边
    5) 当A或B发现到自己的连接数超过60%(这个值可修改)时,就认为自己是主了,并保持连接
    6) 这样当A或B有一个挂掉时,最终肯定会有一个满足作为主的条件

    如果是网络原因,而不是A或B本身故障,则会出现一些可以连接到A但不能连接到B,而另一些可以连接到B但不能连接到A,甚至还有些可以同时连接A和B,但总是只有满足超过50%的才提供服务,这样就不会出现同时存在两个主的情况。所以,如果恰好是一半一半,那就无法提供服务,需要人工干预了,比如工作节点,平均分配在两个不同IDC,由于两个IDC间网络故障,问题就会出现。


    图1


    图2


    图3


    会不会导致A和B都是40%或50%了?这个会,但会触发重新竞争分配,只需要做一些策略调整,就可以解决这个问题,比如A是每1秒算一个间隔,B为2秒一个间隔。

  • 相关阅读:
    Python环境的导入导出
    Jenkins+Ant+Jmeter搭建轻量级接口自动化(转载)
    VMware桥接模式连接局域网和互联网
    安装KVM
    [Beyond Compare] 排除/忽略 .svn 文件夹
    Git 如何放弃所有本地修改
    Python2 和 Python3 共存于 Centos7
    kubernetes 之部署metrics-server
    在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践
    华为云 Kubernetes 管理员实训 五 课后作业
  • 原文地址:https://www.cnblogs.com/aquester/p/9891779.html
Copyright © 2011-2022 走看看