V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
tangzhiyong
V2EX  ›  Linux

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

  •  
  •   tangzhiyong · 128 天前 · 3397 次点击
    这是一个创建于 128 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    以目前的产品来说。

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

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

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

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

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