只有两台服务器的情况下如何搭建高可用集群?两台服务器放在不同的市。 场景:个人使用,搭建的服务主要是 github 上的一些开源项目和自己开发的小项目。主要是 docker 镜像。 chatgpt 说搭建高可用集群至少需要 3 台服务器以上。但我只有两个物理地点,如果在其中一个物理地点放置两台服务器,一个地点放置一台服务器。万一其中一个物理地点停电断网,有机会两个管理节点都关闭,集群也无法正常。 所以想请教,只有两台服务器的情况下,如何实现高可用集群?
![]() | 1 opengps 2024-08-19 10:04:20 +08:00 你这叫异地多活,跟集群有所区别,跟集群不是一个方向的概念 |
2 Huelse 2024-08-19 10:08:38 +08:00 你这有点没条件硬上了,一定要搞的话就每台机器起多个服务呗,也是测试环境的常规操作 |
3 Mianmiss 2024-08-19 10:09:05 +08:00 ![]() keepalived+lvs ,vip 所在机器挂掉之后 自动切换到另外一个机器 |
![]() | 4 libook 2024-08-19 10:16:17 +08:00 你需要一个高可用的负载均衡中间件 |
5 yinmin 2024-08-19 10:17:40 +08:00 via iPhone 集群必须部署在一个地方的。云服务器买大厂的,因为大厂的云服务器是跑在集群上的,万一物理机坏了,对云服务器的感知仅是一次异常重启。个人使用基本不用考虑集群 |
6 m2276699 2024-08-19 10:40:58 +08:00 你提到的环境信息不足。如果环境满足,只说集群,归根结底是需要强一致的是数据库,无论是哪种数据库。而数据的一致性需要至少三个节点防止脑裂等问题。你的应用入口是否是这两台服务器?是否需要数据库? |
![]() | 7 wjh876531738 2024-08-19 11:39:43 +08:00 Docker Swarm 不错的,可以参考下大佬的方案: https://dockerswarm.rocks/ |
![]() | 8 wjh876531738 2024-08-19 11:40:56 +08:00 如果两台机器不在同一个内网的话,可以搭配 wireguard 。 |
9 tangzhiyong OP |
10 tangzhiyong OP @wjh876531738 Docker Swarm 实现高可用至少需要 3 台服务器哈。 |
11 tangzhiyong OP 主要关心的是: - 高可用,所以要讲服务器设置在两地。 - 节点之间数据保持一致。 这样如果其中一个地点停电断网,依然可以保证服务和数据都可以正常访问。 请问各位有好的 idea 吗 |
12 tangzhiyong OP 主要关心的是: - 高可用,所以要讲服务器设置在两地。 - 节点之间数据保持一致。包括数据库和文件要一致。 这样如果其中一个地点停电断网,依然可以保证服务和数据都可以正常访问。 请问各位有好的 idea 吗 |
13 tangzhiyong OP @yinmin 其实不关心集群,主要希望高可用且每个节点数据保持同步一致。 |
14 tangzhiyong OP @m2276699 需要数据库谢谢,希望实现单一入口,根据节点的可用性自动将入口切换到其中一台服务器。 |
![]() | 15 Akiya 2024-08-19 13:40:44 +08:00 要保证一致性至少要三台,不然会出现脑裂 |
16 brant2ai 2024-08-19 13:44:30 +08:00 你这都不在一个局域网下,看你部署的是啥,不过就这跨环境的网络通信都让人头大 |
18 tangzhiyong OP @brant2ai 暂时用了 tailscale 实现异地组网,所以这两台机算是在同一局域网的,谢谢 |
![]() | 19 tianhehechu 2024-08-19 14:40:57 +08:00 能给我一台吗,我一台也没有 |
20 jamesjammy061 2024-08-19 14:45:22 +08:00 不虚拟的话,高可用可能做不了。只能双主热备 |
![]() | 21 MrYELiex 2024-08-19 14:48:29 +08:00 看你的需求应该是需要主从数据库 数据库自动同步 容器无状态 |
23 brant2ai 2024-08-19 17:19:55 +08:00 @tangzhiyong #18 能理解你害怕一边服务器挂掉采取两地服务器。 |
24 brant2ai 2024-08-19 17:22:04 +08:00 @tangzhiyong #18 MPP 架构一般至少需要 3 个节点,这就意味着至少虚拟出一个节点出来,数据同步在 MPP 架构中是自带的,基本上写入的过程中会同时向多个数据库写。 |
25 newbeelity 2024-08-19 18:00:29 +08:00 无状态的话稍简单,用一些 dns 全局流量管理,GTM 有状态则要考虑数据一致性,所以看你描述,不太可能了 |
![]() | 26 Dogtler 2024-08-19 18:15:56 +08:00 即使是两台,一台控制 一台节点,照样可以上 k8s 。在 k8s 里面做高可用集群,ha operator |
![]() | 27 Emiya1208 2024-08-19 18:20:14 +08:00 ![]() 十年运维老司机和你说。2 个节点,不可能有最佳的做法,你自己看一下下面然后权衡考虑吧。 以目前的产品来说。 1. 完全依靠标准的 RAFT 算法实现的高可用不可能在 2 个节点的情况下完成高可用,即便两个节点可以使用 RAFT 算法工作,但是挂了一个另一个也不能用。 2. 依靠仲裁机制实现的代表作是 ZK ,同样不能在两个节点下完成仲裁,同样无法高可用。 3. 依靠宽松的同步复制实现的双节点高可用,其依赖日志与信号的同步处理,一旦通信或是其中一个挂了另外一个可以独立运行,但是数据可能不是最新的,一定会造成脑裂,注意是一定。 4. 存在称为 "Active Failover" 的机制的产品可以依靠组合拳在引入多个角色上实现优先资源并尽可能的高可用和数据一致性。但是并不完全能避免数据脑裂。 PS:以上不考虑你怎么处理网络的可用性。 |
![]() | 28 UN2758 2024-08-19 18:30:53 +08:00 个人用,负载也不大吧?追求高可用那就 keepalived 呗 |
![]() | 29 Maboroshii 2024-08-19 18:34:00 +08:00 个人用,挂了就上去重启呗,一台机器用作另一台的数据备份 ,简单又稳。 别弄复杂了 |
![]() | 30 wantstark 2024-08-19 19:01:25 +08:00 没有分布式场景的话,simple ping / DNS 一层负载即可 |
![]() | 31 niubee1 2024-08-19 19:04:56 +08:00 两台基本来即使做到了,也会有很大的问题和局限性。 一句话就是:穷鬼不配 |
32 mark2025 2024-08-19 19:24:27 +08:00 两台服务器谈什么高可用呢 |
33 ltkun 2024-08-20 07:19:38 +08:00 千万别搞这种事情 可靠性需要的代价不是两台个人电脑能提供的 |
![]() | 34 XinPingQiHe 2024-08-20 11:07:37 +08:00 各类容器或者虚拟机系统,需要做高可用的话,都是至少 3 台物理服务器,实际配置中可能还要多 1-2 台。这是最小规模 |
![]() | 35 liuliancao 2024-08-20 16:45:45 +08:00 保证两个机器是一样的(动作都执行下或者是搞主从) 然后在你家里的电脑里面加一些探测和动作~ |
![]() | 36 liuliancao 2024-08-20 16:46:44 +08:00 @liuliancao 另外如果用云的 dns 有的云可以自动做探活和替换 |
37 tangzhiyong OP @Emiya1208 谢谢 |