我需要在主动-被动模式下构建 2 节点集群(类似?)解决方案,即一台服务器处于活动状态,而另一台服务器处于被动(备用)状态,不断从活动中复制数据。基于 KVM 的虚拟机将在活动节点上运行。
如果主动节点由于任何原因不可用,我想手动切换到第二个节点(成为主动节点和另一个被动节点)。
我看过这个教程:https ://www.alteeve.com/w/AN!Cluster_Tutorial_2#Technologies_We_Will_Use
但是,我没有足够的勇气相信全自动故障转移并构建复杂的东西并相信它可以正常运行。脑裂情况的风险太大,复杂性以某种方式失败,数据损坏等,而我的最大停机时间要求并不严重到需要立即自动故障转移。
我无法找到有关如何构建这种配置的信息。如果您已经这样做了,请在答案中分享信息/HOWTO。
或者也许可以使用 Linux 节点构建高度可靠的自动故障转移?Linux 高可用性的问题在于,就像 8 年前一样,人们似乎对这个概念产生了浓厚的兴趣,而且许多教程现在已经很老了。这表明 HA 在实践中可能存在实质性问题,一些/许多系统管理员干脆放弃了它。
如果可能,请分享如何构建它的信息以及您在生产中运行集群的经验。
为什么不使用经过数千名用户检查并证明其可靠性的东西呢?您可以使用例如 StarWind VSAN Free 部署免费的 Hyper-V 服务器,并毫无问题地获得真正的 HA。查看本手册:https ://www.starwindsoftware.com/resource-library/starwind-virtual-san-hyperconverged-2-node-scenario-with-hyper-v-server-2016
我的安装与您描述的设置非常相似:通过 DRBD 主动/被动具有备用副本的 KVM 服务器。为了使系统尽可能简单(并避免任何自动脑裂,即:由于我的客户弄乱了集群网络),我还放弃了自动集群故障转移。
该系统已有 5 年以上的历史,从未给我带来任何问题。我的音量设置如下:
我写了一些 shell 脚本来帮助我在故障转移的情况下。你可以在这里找到它们
请注意,该系统的架构旨在实现最高性能,即使以牺牲快速快照和基于文件(而不是基于卷)的虚拟磁盘等功能为代价。
现在重建一个类似的主动/被动设置,我会非常倾向于使用 ZFS 和通过
send/recv
. 它不是实时的、基于块的复制,但对于 90% 以上的情况来说已经足够了。如果真的需要实时复制,我会在 ZVOL + XFS 之上使用 DRBD;事实上,我非常满意地在我的实验室测试了这样的设置 + 自动起搏器开关。
lvmthin
如果无法使用 3rdy 部分模块(就像 ZoL 一样),我会在卷 + XFS之上使用 DRBD 资源。您可以完全设置 DRBD 并以纯手动方式使用它。这个过程根本不应该是复杂的。您只需手动执行 Pacemaker 或 Rgmanager 集群的操作即可。本质上:
自然,这将要求两个节点都安装了正确的包,并且两个节点上都存在 VM 的配置和定义。
我可以保证 Linux HA 堆栈(corosync 和起搏器)仍在积极开发和支持。许多指南很旧,该软件已经存在 10 年了。如果做得好,就不会出现重大问题或问题。它没有被抛弃,但它不再是“新奇的、令人兴奋的”。
主动/被动集群仍然在许多地方大量使用,并在生产中运行。请在下面找到我们的生产设置,它工作正常,您可以让它在手动模式下运行 (
orchestrate=start
),或启用自动故障转移 (orchestrate=ha
)。我们使用 zfs 从 zfs 发送/接收和 zfs 快照中受益,但如果您更喜欢同步复制,也可以使用 drbd。先决条件:
脚步 :
一些解释:
{svcname}
服务配置文件中的每个都是指向实际服务名称 (win1) 的引用data/win1
在挂载点上挂载zfs 数据集/srv/win1
win1
sync#1
用于声明一个异步 zfs 数据集复制到从节点(node1 上的 data/win1 发送到 node2 上的 data/win1),示例中每 12 小时一次(zfs 发送/接收由 opensvc 代理管理)一些管理命令:
svcmgr -s win1 start
启动服务svcmgr -s win1 stop
停止服务svcmgr -s win1 stop --rid container#0
在配置文件中停止容器引用 container#0svcmgr -s win1 switch
将服务重定位到另一个节点svcmgr -s win1 sync update
触发增量 zfs 数据集副本svcmgr -s win1 sync full
触发完整的 zfs 数据集副本我管理的一些服务还需要定期(每天/每周/每月)保留 zfs 快照,在这种情况下,我将以下配置片段添加到服务配置文件中,然后 opensvc 代理完成这项工作。
根据要求,我还添加了一个 lvm/drbd/kvm 配置:
drbd 资源配置
/etc/drbd.d/kvmdrbd.res
:opensvc 服务配置文件
/etc/opensvc/kvmdrbd.conf
:一些解释:
disk#1
: 是承载大逻辑卷的 lvm vg。应至少为 5GB。disk#2
: 是 drbd 资源名称指向的 drbd 磁盘。如果 opensvc 服务被命名为“foo”,你应该有 /etc/drbd.d/foo.res。或者更改服务配置文件中的 disk#2.res 参数。fs#0
: 为 kvm 来宾托管所有磁盘文件的主文件系统container#0
:kvm 来宾,与示例中的 opensvc 服务同名。代理必须能够 dns 解析 kvm 来宾,在接受启动服务之前进行 ping 检查(如果 ping 应答,则 kvm 来宾已经在某个地方运行,启动它不是一个好主意。确保双启动保护通过 opensvc 代理)standby = true
: 表示当服务在另一个节点上运行时,此资源必须保持运行状态。在我们的示例中,需要保持 drbd 正常运行shared = true
:https ://docs.opensvc.com/latest/agent.service.provisioning.html#shared-resources我目前正在使用一个非常相似的系统。2 台服务器,一台活动服务器,一台备份服务器,它们都在其中运行了一些虚拟机。正在复制数据库,并且文件服务器与 rsync 保持同步(但只有一种方式)。在紧急情况下,正在为辅助服务器提供服务。有使用 Pacemaker 和 Corosync 的想法,但由于这必须是 100%,我没有勇气尝试。我的想法是 NginX 监视服务器。可以这样做,因为我正在使用 web 应用程序,但在你的情况下,我不知道你是否可以使用它。DRBD 对我来说是一团糟。以前的服务器正在使用它,虽然它看起来很有效,但感觉就像我在尝试解剖人体。
看看这个,它可能对你有帮助:http: //jensd.be/156/linux/building-a-high-available-failover-cluster-with-pacemaker-corosync-pcs
看起来并不难,其实在小环境下我已经尝试过并且工作了。易学、易制作、易维护。实际上,我认为这就是您要寻找的。