• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zealinux
V2EX  ›  程序员

为什么好多高可用方案都是 3 个节点?为什么是 3?

  •  
  •   zealinux · Dec 25, 2020 · 9589 views
    This topic created in 2148 days ago, the information mentioned may be changed or developed.

    比如 eureka, 不清楚为什么不是 2,或者 4 ?

    66 replies  •  2020-12-26 07:38:11 +08:00
    shyling
    shyling
    Dec 25, 2020
    1
    2 个会投出来 1:1
    Jooooooooo
    Jooooooooo
    Dec 25, 2020
    2
    偶数投票会平票
    sonxzjw
    sonxzjw
    Dec 25, 2020❤️1
    3
    天地人三才,是最原始最初最稳固的结构
    zealinux
    zealinux
    OP
    Dec 25, 2020
    4
    @shyling 比如 erueka 又不需要投票,不能用就是不能用
    geekzhu
    geekzhu
    Dec 25, 2020
    5
    一个太少,两个不够,三个正好?
    DeepDarkVan
    DeepDarkVan
    Dec 25, 2020
    6
    一般高可用配置,超过 50%挂了就不能用了,两台挂了一台不就是不能用了?而且一般都是配的奇数,三台和四台没区别,五台和六台没区别
    outoftimeerror
    outoftimeerror
    Dec 25, 2020❤️8
    7
    道生一,一生二,二生三,三生万物。
    GooooooniX
    GooooooniX
    Dec 25, 2020 via iPhone❤️4
    8
    三个臭皮匠顶个诸葛亮
    cincout
    cincout
    Dec 25, 2020
    9
    三足鼎立
    catror
    catror
    Dec 25, 2020❤️2
    11
    如果是两个节点,由于网络故障,发生了网络分区。这时两个节点分别提供服务的话,网络恢复之后就会有数据冲突?或者两个节点都不服务,也就没有了高可用。如果是三个节点,拥有两个节点的分区就能正常提供服务,网络恢复后,数据也不会冲突。
    treblex
    treblex
    Dec 25, 2020
    12
    众所周知,三角形最稳固 (狗头
    securityCoding
    securityCoding
    Dec 25, 2020
    13
    选主要奇数,相等这不是找不自在吗?
    sunziren
    sunziren
    Dec 25, 2020❤️1
    14
    如果是 2,你又会问:"为什么是 2"
    如果是 4,你又会问:"为什么是 4"
    那它总得有个数字吧?
    h123123h
    h123123h
    Dec 25, 2020
    15
    脑裂
    gamexg
    gamexg
    Dec 25, 2020
    16
    @DeepDarkVan #6 展赞同
    为了防止脑裂问题,一般都会要求不能离线 50%以上节点。
    hhyvs111
    hhyvs111
    Dec 25, 2020
    17
    楼主没事就找个牢坐一下吧,一天天闲的
    opengps
    opengps
    Dec 25, 2020
    18
    二分之一未必扛得住总压力,但是坏一个节点,2 台机器负载原本 3 台的压力没有太大问题
    sunziren
    sunziren
    Dec 25, 2020
    19
    帮我加个狗头
    HolmLoh
    HolmLoh
    Dec 25, 2020
    20
    会脑裂
    YouLMAO
    YouLMAO
    Dec 25, 2020
    21
    ZK 一般 5 个, 标题打回重写
    wtks1
    wtks1
    Dec 25, 2020 via Android
    22
    因为万物皆三?
    samuel
    samuel
    Dec 25, 2020
    23
    偶数节点投票会出现平票,所以 3 节点就是实现高可用需要的最少节点数了
    libook
    libook
    Dec 25, 2020
    24
    我接触到的高可用设施确实通常建议至少 3 节点,但是大多 2 节点也可以工作,直至到剩下 1 个节点。

    没有找到相应的理论参考,说一下个人猜想:
    3 节点中如果 down 了 1 个节点,管理员需要想办法去恢复成 3 节点,此时可以修复 down 的节点也可以加新的空节点,不管是哪一种都涉及到同步数据的过程,此时剩下的 2 个节点中可以 1 个主要承载应用负载,另一个主要承载同步负载,使得同步过程不影响业务性能。如果是 2 节点方案的话,剩下的 1 个节点既要承担应用负载,又要承担同步负载,会使得应用性能容量减半。
    如果是 4 节点的话,除非有其他设计加成,否则和 3 节点的效果差不多,只不过连续 down 2 个节点问题也不大。
    rainman777
    rainman777
    Dec 25, 2020
    25
    稳定~🐶
    iKunsounds
    iKunsounds
    Dec 25, 2020
    26
    三角形最稳定
    carlclone
    carlclone
    Dec 25, 2020 via Android
    27
    看你高可用要达到几个 9 吧,主备 2 台也算高可用啊
    gadsavesme
    gadsavesme
    Dec 25, 2020❤️2
    28
    偶数会脑裂,3 就是除了单机最小的奇数了。
    misaka19000
    misaka19000
    Dec 25, 2020❤️1
    29
    3 是除了 1 之外的最小的正奇数
    longaiwp
    longaiwp
    Dec 25, 2020
    30
    因为符合道家的三生万物的思想?
    selboo
    selboo
    Dec 25, 2020
    31
    tcp 为什么要 3 次握手
    Suddoo
    Suddoo
    Dec 25, 2020
    32
    之前厂里的集群也是,3 节点底座,或者 7 节点底座
    wellsc
    wellsc
    Dec 25, 2020 via iPhone
    33
    五个才是 quorum 最佳实践
    anthow
    anthow
    Dec 25, 2020
    34
    三人行
    DoctorCat
    DoctorCat
    Dec 25, 2020❤️1
    35
    偶数存在脑裂问题,只有奇数才可能发挥仲裁机制,从而避免脑裂。
    由于消息没送达(集群网络故障) A 集群俩人成一伙儿,B 集群俩人成一伙儿,各自选一个 Leader 为政了(两个集群双主同时服务)。如果再引入一个人,就不会发生这种情况,一定是能选出一个 Leader
    cstj0505
    cstj0505
    Dec 25, 2020❤️1
    36
    @hhyvs111 好家伙,lz 正常饭吃得太饱,你这让他改吃牢饭了
    kiracyan
    kiracyan
    Dec 25, 2020
    37
    我猜是经验 因为飞机的高可用也是 3 套系统
    PUBG98k
    PUBG98k
    Dec 25, 2020
    38
    道生一,一生二,二生三,三生万物。
    areless
    areless
    Dec 25, 2020 via Android
    39
    由赤木直子博士开发的三台超级电脑被命名为“MAGI”,三台分别名为 Caspar 、Melchior 和 Balthasar 。典故是从东方过来礼拜基督降生的三贤人。还有夏亚的三倍速。不仅计算机,包括司法系统,三权分立啊,都是 3 个东西互相制约便是最出彩的系统设计
    A388
    A388
    Dec 25, 2020
    40
    一个节点使用,一个备份在同一个网络,另外一个备份到不同网络。
    zzzhen
    zzzhen
    Dec 25, 2020
    41
    防脑裂
    相同的容错下,奇数台节省资源
    namelosw
    namelosw
    Dec 25, 2020
    42
    3 是大于 1 的最小奇数. 一个挂了就完蛋, 两个的话不知道听谁的, 三个多数服从少数. 有时候你也能看见五个之类的.

    再给你一道题, 想想为什么游戏画面都是三角形拼的
    namelosw
    namelosw
    Dec 25, 2020
    43
    @namelosw *少数服从多数
    ershierdu
    ershierdu
    Dec 25, 2020
    44
    @selboo #31 这个比喻可能不太相似,TCP 三次握手是为了让客户端、服务端分别确认自己的接收 /发送能力、对方的接收 /发送能力正常,少一次都不全面
    litchinn
    litchinn
    Dec 25, 2020
    45
    如果是两个,其中一个数据错了你没法区分是哪个错了呀
    someonedeng
    someonedeng
    Dec 25, 2020
    46
    两个的话,挂一个剩下那个估计也差不多了
    hahastudio
    hahastudio
    Dec 25, 2020
    47
    突然意识到 split-brain 的中文译名这么惊悚。。。
    Bromine0x23
    Bromine0x23
    Dec 25, 2020
    48
    至少 3 个节点才能形成相对多数防止脑裂
    mawenjian
    mawenjian
    Dec 25, 2020 via Android
    49
    避免雪崩,两台的压力压到一台上去,活着的这台也离挂掉不远了。
    expkzb
    expkzb
    Dec 25, 2020
    50
    因为要投票选出“主”,偶数会出现平局
    cairnechen
    cairnechen
    Dec 25, 2020
    51
    3 人才能成立党支部
    Rasphino
    Rasphino
    Dec 25, 2020 via iPhone
    52
    楼主说的这个高可用,应该指的是 crash fault tolerance 的系统,节点数需要满足 n=2f+1 ( f 为会崩溃的节点数),所以最小的系统需要 3 个节点。

    拜占庭容错系统的节点数是 n=3f+1 ( f 为拜占庭节点数量)。所以拜占庭容错系统需要至少 4 个节点才能容忍 1 个拜占庭节点。

    相关的理论可以看 paxos,raft,pbft 等著名论文。主要思想是:保证正常运作的节点数量过系统的半数。
    sampeng
    sampeng
    Dec 25, 2020
    53
    两个问题:

    1 是楼上说选举的问题。
    2 是如果是 2 台,挂了一台,这可是注册中心,这个玩意挂了你全部业务都挂了,只剩一台在跑你不慌么?你能到挂一台马上起来?如果是 2 台,就算没选举的问题,挂一台,又变成单点状态了,很可能下一秒他就挂了。所以最小值是 3.

    ps,不是所有分布式都是需要选举的。。raft 等带来的复杂度也是非常可观的。
    ranxy
    ranxy
    Dec 25, 2020 via iPhone
    54
    请看 paxos 或者 raft 的 paper
    vloony
    vloony
    Dec 25, 2020
    55
    比如 3 个挂了一个 那么重新上线一个节点需要拷贝数据 就需要一个不是使用中的节点 否则拷贝使用中的节点 会影响性能
    biepin
    biepin
    Dec 25, 2020
    56
    提供一个概率角度的,假设每个节点出错的概率是 10%,且节点出错是互相独立的,那么三个同时出错的概率是 0.1*0.1*0.1 = 0.0001
    littiefish
    littiefish
    Dec 25, 2020 via iPhone
    57
    @hhyvs111 这事都怪袁隆平让他们吃的太饱
    Leon6868
    Leon6868
    Dec 25, 2020
    58
    @namelosw 三点确定一个面

    (平面几何似乎与这个主题没多大关系)
    namelosw
    namelosw
    Dec 25, 2020
    59
    嗯, 两个点构不成面, 四个点很容易出 bug, 扭起来没法构成一个面
    wangyzj
    wangyzj
    Dec 25, 2020
    60
    脑裂
    feelinglucky
    feelinglucky
    Dec 25, 2020
    61
    了解下 raft 算法就明白了,关键字:投票
    xuanbg
    xuanbg
    Dec 25, 2020
    62
    3 节点是分布式系统的最小方案了。因为 1 个节点不是分布式,2 个节点没法投票……
    handsomeroger
    handsomeroger
    Dec 25, 2020
    63
    大部分原因都是为了预防脑裂问题吧
    JCZ2MkKb5S8ZX9pq
    JCZ2MkKb5S8ZX9pq
    Dec 25, 2020
    64
    mongodb 也是三个,可以两个复制集+一个辅助投票的。
    akira
    akira
    Dec 26, 2020
    65
    一主一从加一备
    243205964
    243205964
    Dec 26, 2020 via Android❤️1
    66
    后宫为什么会有 3 千佳丽
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1051 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 198ms · UTC 18:47 · PVG 02:47 · LAX 10:47 · JFK 13:47
    ♥ Do have faith in what you're doing.