为什么好多高可用方案都是 3 个节点?为什么是 3? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
zealinux

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

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

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

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

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

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

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

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

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

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

    (平面几何似乎与这个主题没多大关系)
    namelosw
        59
    namelosw  
       Dec 25, 2020
    嗯, 两个点构不成面, 四个点很容易出 bug, 扭起来没法构成一个面
    wangyzj
        60
    wangyzj  
       Dec 25, 2020
    脑裂
    feelinglucky
        61
    feelinglucky  
       Dec 25, 2020
    了解下 raft 算法就明白了,关键字:投票
    xuanbg
        62
    xuanbg  
       Dec 25, 2020
    3 节点是分布式系统的最小方案了。因为 1 个节点不是分布式,2 个节点没法投票……
    handsomeroger
        63
    handsomeroger  
       Dec 25, 2020
    大部分原因都是为了预防脑裂问题吧
    JCZ2MkKb5S8ZX9pq
        64
    JCZ2MkKb5S8ZX9pq  
       Dec 25, 2020
    mongodb 也是三个,可以两个复制集+一个辅助投票的。
    akira
        65
    akira  
       Dec 26, 2020
    一主一从加一备
    243205964
        66
    243205964  
       Dec 26, 2020 via Android   1
    后宫为什么会有 3 千佳丽
    About     Help     Advertise     Blog     API     FAQ     Solana     1029 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 194ms UTC 23:09 PVG 07:09 LAX 16:09 JFK 19:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86