应用程序的通用高可用性抽象是否可行?

应用程序的通用高可用性抽象是否可行?

我目前正在研究如何提高我们现有的服务器应用程序的可用性。该软件处理通过 UDP 或某些更高级别的铁路专用协议发送的消息。

有没有办法(框架或类似的东西)创建一个抽象层来处理冗余和故障转移?我正在考虑一个相当于具有镜像功能的 RAID 控制器的东西,但不仅用于存储,还用于整个系统。从“外部”,您只能看到一个带有网络接口的系统。在内部,有两个甚至多个并行运行的系统,抽象层负责处理所有事情,例如在冗余机器之间同步应用程序状态。您将软件安装在黑盒的公共端,内部所有内容都会自动镜像。当一台机器死机时,另一台机器会立即接管,而不会断开连接,因为它已经处于相同状态。

有没有通用的解决方案?还是我们必须在应用程序内部手动实现?

答案1

Pacemaker、Corosync 和 DRBD 是 Linux 项目,它们提供“开放集群框架”(OCF),用于使通用 Linux 服务实现 HA。

通常,DRBD 会同步复制存储(在块级别),而 Corosync 和 Pacemaker 会管理集群中哪些节点正在运行哪些服务。服务可以通过 OCF 资源代理(具有标准退出代码和功能的 shell 脚本)或服务的 systemd/upstart/sysv-init 脚本进行控制。还有通用的“任何”代理可以生成和监视集群中的进程,但如果您真的很懒,我只会使用这些代理,因为它们不够强大。

实现通用 HA 的最简单、最透明的方法之一是使用 Pacemaker 和 DRBD 创建 KVM 集群。VM 会在启动时配置并启动您的应用程序,而 Pacemaker/DRBD 会在底层(在虚拟机管理程序上)处理集群。

如果你用 Google 搜索,会发现网上有大量资源解释详细的步骤,但是 LINBIT 有一个技术指南(在软墙后面)可以逐步指导如何进行设置:https://linbit.com/tech-guide/drbd9-kvm-rhel8/

更多参考:
DRBD:https://linbit.com/
起搏器/Corosync:https://clusterlabs.org/

相关内容