V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zealinux
V2EX  ›  程序员

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

  •  
  •   zealinux · 2020-12-25 11:15:00 +08:00 · 7957 次点击
    这是一个创建于 1429 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    (平面几何似乎与这个主题没多大关系)
    namelosw
        59
    namelosw  
       2020-12-25 19:05:47 +08:00
    嗯, 两个点构不成面, 四个点很容易出 bug, 扭起来没法构成一个面
    wangyzj
        60
    wangyzj  
       2020-12-25 19:15:04 +08:00
    脑裂
    feelinglucky
        61
    feelinglucky  
       2020-12-25 19:17:25 +08:00
    了解下 raft 算法就明白了,关键字:投票
    xuanbg
        62
    xuanbg  
       2020-12-25 19:20:10 +08:00
    3 节点是分布式系统的最小方案了。因为 1 个节点不是分布式,2 个节点没法投票……
    handsomeroger
        63
    handsomeroger  
       2020-12-25 19:21:50 +08:00
    大部分原因都是为了预防脑裂问题吧
    JCZ2MkKb5S8ZX9pq
        64
    JCZ2MkKb5S8ZX9pq  
       2020-12-25 21:26:41 +08:00
    mongodb 也是三个,可以两个复制集+一个辅助投票的。
    akira
        65
    akira  
       2020-12-26 05:53:40 +08:00
    一主一从加一备
    243205964
        66
    243205964  
       2020-12-26 07:38:11 +08:00 via Android   ❤️ 1
    后宫为什么会有 3 千佳丽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2673 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:17 · PVG 18:17 · LAX 02:17 · JFK 05:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.