只有两台服务器的情况下如何搭建高可用集群 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
tangzhiyong
V2EX    Linux

只有两台服务器的情况下如何搭建高可用集群

  •  
  •   tangzhiyong 2024-08-19 10:03:08 +08:00 4099 次点击
    这是一个创建于 417 天前的主题,其中的信息可能已经有所发展或是发生改变。

    只有两台服务器的情况下如何搭建高可用集群?两台服务器放在不同的市。 场景:个人使用,搭建的服务主要是 github 上的一些开源项目和自己开发的小项目。主要是 docker 镜像。 chatgpt 说搭建高可用集群至少需要 3 台服务器以上。但我只有两个物理地点,如果在其中一个物理地点放置两台服务器,一个地点放置一台服务器。万一其中一个物理地点停电断网,有机会两个管理节点都关闭,集群也无法正常。 所以想请教,只有两台服务器的情况下,如何实现高可用集群?

    37 条回复    2024-08-21 09:08:49 +08:00
    opengps
        1
    opengps  
       2024-08-19 10:04:20 +08:00
    你这叫异地多活,跟集群有所区别,跟集群不是一个方向的概念
    Huelse
        2
    Huelse  
       2024-08-19 10:08:38 +08:00
    你这有点没条件硬上了,一定要搞的话就每台机器起多个服务呗,也是测试环境的常规操作
    Mianmiss
        3
    Mianmiss  
       2024-08-19 10:09:05 +08:00   2
    keepalived+lvs ,vip 所在机器挂掉之后 自动切换到另外一个机器
    libook
        4
    libook  
       2024-08-19 10:16:17 +08:00
    你需要一个高可用的负载均衡中间件
    yinmin
        5
    yinmin  
       2024-08-19 10:17:40 +08:00 via iPhone
    集群必须部署在一个地方的。云服务器买大厂的,因为大厂的云服务器是跑在集群上的,万一物理机坏了,对云服务器的感知仅是一次异常重启。个人使用基本不用考虑集群
    m2276699
        6
    m2276699  
       2024-08-19 10:40:58 +08:00
    你提到的环境信息不足。如果环境满足,只说集群,归根结底是需要强一致的是数据库,无论是哪种数据库。而数据的一致性需要至少三个节点防止脑裂等问题。你的应用入口是否是这两台服务器?是否需要数据库?
    wjh876531738
        7
    wjh876531738  
       2024-08-19 11:39:43 +08:00
    Docker Swarm 不错的,可以参考下大佬的方案: https://dockerswarm.rocks/
    wjh876531738
        8
    wjh876531738  
       2024-08-19 11:40:56 +08:00
    如果两台机器不在同一个内网的话,可以搭配 wireguard 。
    tangzhiyong
        9
    tangzhiyong  
    OP
       2024-08-19 13:26:21 +08:00
    @opengps
    @yinmin
    感谢你帮我搞懂集群和异地多活的区别
    tangzhiyong
        10
    tangzhiyong  
    OP
       2024-08-19 13:27:29 +08:00
    @wjh876531738 Docker Swarm 实现高可用至少需要 3 台服务器哈。
    tangzhiyong
        11
    tangzhiyong  
    OP
       2024-08-19 13:29:53 +08:00
    主要关心的是:
    - 高可用,所以要讲服务器设置在两地。
    - 节点之间数据保持一致。
    这样如果其中一个地点停电断网,依然可以保证服务和数据都可以正常访问。
    请问各位有好的 idea 吗
    tangzhiyong
        12
    tangzhiyong  
    OP
       2024-08-19 13:30:57 +08:00
    主要关心的是:
    - 高可用,所以要讲服务器设置在两地。
    - 节点之间数据保持一致。包括数据库和文件要一致。
    这样如果其中一个地点停电断网,依然可以保证服务和数据都可以正常访问。
    请问各位有好的 idea 吗
    tangzhiyong
        13
    tangzhiyong  
    OP
       2024-08-19 13:33:14 +08:00
    @yinmin 其实不关心集群,主要希望高可用且每个节点数据保持同步一致。
    tangzhiyong
        14
    tangzhiyong  
    OP
       2024-08-19 13:35:11 +08:00
    @m2276699 需要数据库谢谢,希望实现单一入口,根据节点的可用性自动将入口切换到其中一台服务器。
    Akiya
        15
    Akiya  
       2024-08-19 13:40:44 +08:00
    要保证一致性至少要三台,不然会出现脑裂
    brant2ai
        16
    brant2ai  
       2024-08-19 13:44:30 +08:00
    你这都不在一个局域网下,看你部署的是啥,不过就这跨环境的网络通信都让人头大
    Rehtt
        17
    Rehtt  
       2024-08-19 13:59:03 +08:00 via Android
    @brant2ai 可以用 wireguard 之类的组建虚拟内网
    tangzhiyong
        18
    tangzhiyong  
    OP
       2024-08-19 14:03:42 +08:00
    @brant2ai
    暂时用了 tailscale 实现异地组网,所以这两台机算是在同一局域网的,谢谢
    tianhehechu
        19
    tianhehechu  
       2024-08-19 14:40:57 +08:00
    能给我一台吗,我一台也没有
    jamesjammy061
        20
    jamesjammy061  
       2024-08-19 14:45:22 +08:00
    不虚拟的话,高可用可能做不了。只能双主热备
    MrYELiex
        21
    MrYELiex  
       2024-08-19 14:48:29 +08:00
    看你的需求应该是需要主从数据库 数据库自动同步 容器无状态
    bzj
        22
    bzj  
       2024-08-19 14:54:42 +08:00
    @yinmin 谁跟你说的集群必须在一个地方?
    brant2ai
        23
    brant2ai  
       2024-08-19 17:19:55 +08:00
    @tangzhiyong #18 能理解你害怕一边服务器挂掉采取两地服务器。
    brant2ai
        24
    brant2ai  
       2024-08-19 17:22:04 +08:00
    @tangzhiyong #18 MPP 架构一般至少需要 3 个节点,这就意味着至少虚拟出一个节点出来,数据同步在 MPP 架构中是自带的,基本上写入的过程中会同时向多个数据库写。
    newbeelity
        25
    newbeelity  
       2024-08-19 18:00:29 +08:00
    无状态的话稍简单,用一些 dns 全局流量管理,GTM
    有状态则要考虑数据一致性,所以看你描述,不太可能了
    Dogtler
        26
    Dogtler  
       2024-08-19 18:15:56 +08:00
    即使是两台,一台控制 一台节点,照样可以上 k8s 。在 k8s 里面做高可用集群,ha operator
    Emiya1208
        27
    Emiya1208  
       2024-08-19 18:20:14 +08:00   2
    十年运维老司机和你说。2 个节点,不可能有最佳的做法,你自己看一下下面然后权衡考虑吧。

    以目前的产品来说。

    1. 完全依靠标准的 RAFT 算法实现的高可用不可能在 2 个节点的情况下完成高可用,即便两个节点可以使用 RAFT 算法工作,但是挂了一个另一个也不能用。

    2. 依靠仲裁机制实现的代表作是 ZK ,同样不能在两个节点下完成仲裁,同样无法高可用。

    3. 依靠宽松的同步复制实现的双节点高可用,其依赖日志与信号的同步处理,一旦通信或是其中一个挂了另外一个可以独立运行,但是数据可能不是最新的,一定会造成脑裂,注意是一定。

    4. 存在称为 "Active Failover" 的机制的产品可以依靠组合拳在引入多个角色上实现优先资源并尽可能的高可用和数据一致性。但是并不完全能避免数据脑裂。

    PS:以上不考虑你怎么处理网络的可用性。
    UN2758
        28
    UN2758  
       2024-08-19 18:30:53 +08:00
    个人用,负载也不大吧?追求高可用那就 keepalived 呗
    Maboroshii
        29
    Maboroshii  
       2024-08-19 18:34:00 +08:00
    个人用,挂了就上去重启呗,一台机器用作另一台的数据备份 ,简单又稳。 别弄复杂了
    wantstark
        30
    wantstark  
       2024-08-19 19:01:25 +08:00
    没有分布式场景的话,simple ping / DNS 一层负载即可
    niubee1
        31
    niubee1  
       2024-08-19 19:04:56 +08:00
    两台基本来即使做到了,也会有很大的问题和局限性。 一句话就是:穷鬼不配
    mark2025
        32
    mark2025  
       2024-08-19 19:24:27 +08:00
    两台服务器谈什么高可用呢
    ltkun
        33
    ltkun  
       2024-08-20 07:19:38 +08:00
    千万别搞这种事情 可靠性需要的代价不是两台个人电脑能提供的
    XinPingQiHe
        34
    XinPingQiHe  
       2024-08-20 11:07:37 +08:00
    各类容器或者虚拟机系统,需要做高可用的话,都是至少 3 台物理服务器,实际配置中可能还要多 1-2 台。这是最小规模
    liuliancao
        35
    liuliancao  
       2024-08-20 16:45:45 +08:00
    保证两个机器是一样的(动作都执行下或者是搞主从) 然后在你家里的电脑里面加一些探测和动作~
    liuliancao
        36
    liuliancao  
       2024-08-20 16:46:44 +08:00
    @liuliancao 另外如果用云的 dns 有的云可以自动做探活和替换
    tangzhiyong
        37
    tangzhiyong  
    OP
       2024-08-21 09:08:49 +08:00 via iPhone
    @Emiya1208 谢谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3470 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:20 PVG 12:20 LAX 21:20 JFK 00:20
    Do have faith in what you're doing.
    ubao 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