我目前正在设计一项 OpenVPN 服务,为互联网用户提供增强的隐私。
到目前为止,我打算使用运行 CentOS 和 Xen 的专用服务器来提供多个域,每个域都有一个 OpenVPN 服务器,以实现高可用性和负载平衡。
如果一个 domU 出现故障,我希望在同一主机上自动启动第二个 domU。这种类型的故障转移可行吗?
有没有什么解决方案可以平衡 VPN 连接到 domU 服务器的负载?
答案1
是的,可以监视 Xen DomU 的状态,并在 DomU 发生故障时运行一些任意命令。您可以在第三台主机(DomU 或物理)上运行 Monit 守护进程的实例,该实例检查主 OpenVPN DomU,并告诉 Dom0 在主 DomU 发生故障时启动辅助 DomU。Monit 文档有很多示例可以向您展示如何实现这一点:
是的,OpenVPN 内置了一些高可用性和/或负载共享功能,并且设置起来非常简单。
首先,您将并行运行多个 OpenVPN 服务器,每个服务器都监听自己的 IP 地址。这些服务器不共享状态,彼此之间也一无所知。
然后,您可以在命令行或 OpenVPN 客户端的配置文件中指定多个“--remote”选项。当客户端有多个可用的远程服务器选项时,它会随机选择一个并与其建立连接。如果该服务器发生故障,它将重新尝试连接,然后如果连接失败,它会随机选择其他服务器。有关更多信息,请参阅此处的 OpenVPN 文档:
您可能想看看我对类似问题的回答,如下:
正如我在另一个答案中提到的,您可能需要关注这些客户端选项,特别是:
- 重试連線
- 最大连接重试次数
- 远程随机
- ifconfig-pool-persist
当然,这不是真正的负载平衡,因为 OpenVPN 客户端不会选择负载最低或客户端最少的服务器 - 它只是随机选择一个服务器。如果您需要真正的负载平衡来确保服务器负载保持均衡,您需要找到某种专用的负载平衡解决方案,无论是硬件还是软件。
答案2
也许您可以像配置普通 Linux HA 集群的两个节点一样配置两个 domU VM。但我认为这种配置只有在第二个节点处于待机状态而不是关闭时才能工作。如果您想在第一个节点不工作时启动备份 domU 节点,我认为您必须在 dom0 级别编写一个脚本,该脚本会一直运行,检查第一个节点的运行状况,并在发生故障时强制其完全关闭并启动备份(我认为这样的 shell 脚本应该不会太难,或者您可以使用一些适用于 Linux 的优秀软件来完成这项工作,但这可能会更具侵入性)。
此外,您可以考虑两个虚拟机,就像常规 Linux 机器一样,安装并使用负载平衡标准 Linux 解决方案。
答案3
对于 OpenVPN HA 集群设置,您可以结合使用 OpenVPN、WAN 负载平衡和 OSPF。这里有一份最新的 HOWTO: http://www.vyatta4people.org/highly-available-openvpn-connection-between-two-offices/ 享受!