(Pacemaker)Nginx使用主IP地址而不是虚拟IP与Web服务器进行通信

我使用Corosync / Pacemaker和nginx作为反向代理build立了双节点群集(主动/被动)。 OS是RHEL7,目前该机器只有一个networking接口。

我configuration了两个资源:

  • cluster-vip共享虚拟IP
  • 反向代理 nginx

这里是两个资源的声明:

pcs resource create cluster-vip ocf:heartbeat:IPaddr2 ip=192.168.0.1 cidr_netmask=24 op monitor interval=30s pcs resource create reverse-proxy systemd:nginx op monitor interval=5s meta failure-timeout=60s pcs constraint colocation add reverse-proxy with cluster-vip INFINITY pcs constraint order cluster-vip then reverse-proxy 

昨天,我发现了一个意外的行为,而networking捕获。 与客户端通信时,主动节点使用虚拟IP地址(192.168.0.1)。 与位于内部networking的Web服务器进行通信时,它将使用接口的主IP地址而不是vip(取决于活动节点的192.168.0.2或192.168.0.3)。

因此,我不得不在我的防火墙上创build两个不同的规则(一个用于node1,另一个用于node2),而不是只允许vip与Web服务器通信。 我打算将其他节点添加到群集中,而不必一个一个地允许每个节点,只是一次性允许VIP。

这种行为是否有合理的解释? 有没有办法告诉起搏器只使用VIP? 这是一个好习惯吗? 我不想做任何愚蠢的事情,所以如果你认为我不应该这样做,我会很高兴听到为什么。

问候

我不相信这是指导起搏器只使用虚拟IP,而是告诉Nginx只使用虚拟IP的问题。

我不是Nginx的专家,但通读他们的文档,我发现一个名为proxy_bind的configuration指令。 我相信这可能是你需要设置来获得所需的行为。 从这里的Nginx文档。

如果您的代理服务器有多个networking接口,有时您可能需要select特定的源IP地址以连接到代理服务器或上游。 如果将NGINX后面的代理服务器configuration为接受来自特定IPnetworking或IP地址范围的连接,这可能很有用。