各位朋友,
我正在尝试用运行 nginx 的多个虚拟机替换单个老化的负载平衡器。然而,在我安装 centos 7 和 nginx 后,我意识到 heartbeat 已被弃用。所以我开始研究 corosync 和 pcs 来设置和管理 HA 集群。
我设置了集群中的节点,并为每个我想使用的 Web 应用添加了虚拟 IP 资源。当我检查状态时,问题变得明显
[root@vlb1 nginx]# pcs status
Cluster name: webapps
Last updated: Thu Mar 5 21:27:03 2015
Last change: Thu Mar 5 16:43:22 2015 via cibadmin on vlb1.domain.com
Stack: corosync
Current DC: vlb2.domain.com (2) - partition with quorum
Version: 1.1.10-32.el7_0.1-368c726
2 Nodes configured
2 Resources configured
Online: [ vlb1.domain.com vlb2.domain.com ]
Full list of resources:
webapp1_cluster (ocf::heartbeat:IPaddr2): Started vlb2.domain.com
webapp2_cluster (ocf::heartbeat:IPaddr2): Started vlb1.domain.com
PCSD Status:
vlb1.domain.com: Online
vlb2.domain.com: Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
我立即看到资源集群已转到不同的节点。更大的问题是,如果没有 corosync 控制 nginx,vlb1 可能会正常工作,而 vlb2 会给出无法绑定地址的错误,即
015/03/05 21:15:51 [emerg] 985#0: bind() to 92.168.1.88:443 failed (99: Cannot assign requested address)
此时我有两个问题:
当发生故障转移时,是否可以让 HA 集群控制启动(在新节点上)并停止(在旧节点上)nginx?
是否有可能拥有多个集群资源并让它们全部转到当前节点,或者我应该将多个 web 应用程序路由到单个虚拟 ip 并在 nginx 中的服务器声明中处理它?
出于 PCI 合规性原因,我们最初将每个唯一的 Web 应用程序分离到它自己的集群中,并且我不希望多个唯一的 Web 应用程序都指向同一个虚拟 IP。