如何让Corosync/pcs控制nginx?

如何让Corosync/pcs控制nginx?

各位朋友,

我正在尝试用运行 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)

此时我有两个问题:

  1. 当发生故障转移时,是否可以让 HA 集群控制启动(在新节点上)并停止(在旧节点上)nginx?

  2. 是否有可能拥有多个集群资源并让它们全部转到当前节点,或者我应该将多个 web 应用程序路由到单个虚拟 ip 并在 nginx 中的服务器声明中处理它?

出于 PCI 合规性原因,我们最初将每个唯一的 Web 应用程序分离到它自己的集群中,并且我不希望多个唯一的 Web 应用程序都指向同一个虚拟 IP。

答案1

您可以查看用于管理服务的不同资源代理 -这里

有一个用于管理 nginx 守护进程的资源代理。

然后您可以使用共置约束以便nginxIP地址始终位于同一主机上。

并且使用顺序约束设置启动顺序,以便IP地址总是在启动之前启动nginx服务。IP地址也应停止后nginx如果服务移动到集群中的其他节点,守护进程将停止。

相关内容