zoukankan      html  css  js  c++  java
  • 【转】Zookeeper集群为什么要是单数

    转自https://www.cnblogs.com/LeeScofiled/p/7390937.html

    在zookeeper集群中,会有三种角色,leader、 follower、 observer分别对应着总统、议员、观察者。

    半数以上投票通过:可以这样理解。客户端的增删改操作无论访问到了哪台zookeeper服务器,最终都会被转发给leader服务器,再由leader服务器分给zookeeper集群中所有follower服务器去投票(投票指的是在内存中做增删改操作),半数投票通过就被认为操作可执行(commit),否则不可执行。

    observer观察者服务器是针对于查询操作做负载的,observer与follower服务器最大的不同在于observer没有投票权,在客户端发起的增删改操中,leader服务器是不会把消息传递给observer服务器让其投票的。但是查询操作跟follower一样,客户端的查询到了observer服务器节点,observer服务器去访问leader服务器取最新的数据然后返回给客户端。

    为什么zookeeper集群是单数?

    1、容错

    由于在增删改操作中需要半数以上服务器通过,来分析以下情况。

    2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉

    3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉

    4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉

    5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉

    6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉

    通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2台服务器挂掉

    但是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5服务器成本。这是由于半数以上投票通过决定的。

    2、防脑裂

    一个zookeeper集群中,可以有多个follower、observer服务器,但是必需只能有一个leader服务器

    如果leader服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的leader服务器。

    集群互不通讯情况:

    一个集群3台服务器,全部运行正常,但是其中1台裂开了,和另外2台无法通讯。3台机器里面2台正常运行过半票可以选出一个leader。

    一个集群4台服务器,全部运行正常,但是其中2台裂开了,和另外2台无法通讯。4台机器里面2台正常工作没有过半票以上达到3,无法选出leader正常运行。

    一个集群5台服务器,全部运行正常,但是其中2台裂开了,和另外3台无法通讯。5台机器里面3台正常运行过半票可以选出一个leader。

    一个集群6台服务器,全部运行正常,但是其中3台裂开了,和另外3台无法通讯。6台机器里面3台正常工作没有过半票以上达到4,无法选出leader正常运行。

    通可以上分析可以看出,为什么zookeeper集群数量总是单出现,主要原因还是在于第2点,防脑裂,对于第1点,无非是正本控制,但是不影响集群正常运行。但是出现第2种裂的情况,zookeeper集群就无法正常运行了。

  • 相关阅读:
    微信网页授权获取用户数据-简单开发样例
    为阿里云域名配置免费SSL支持https加密访问简单教程
    LNMP1.3 一键配置环境,简单方便
    python doc另存为docx
    一款移动端网页的代码调试器,鹅厂出品
    移动端禁止页面缩放的meta标签在这里,别再乱找了~
    分享一款极好的响应式404单页
    Tippy.js – 轻量的Javascript Tooltip工具库,最好体验的tip提示工具
    微信内打开网页提示请在浏览器打开页面效果代码
    CSS3 文字忽大忽小效果样式收藏
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/10899477.html
Copyright © 2011-2022 走看看