我已经设置了一个双节点集群(主动/被动),其中 Corosync/Pacemaker 和 nginx 作为反向代理。操作系统是 RHEL7,机器目前只有一个网络接口。
我配置了两个资源:
- 集群 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
昨天,我在进行网络捕获时发现了一个意外行为。与客户端通信时,主动节点使用虚拟 IP 地址 (192.168.0.1)。与位于内部网络上的 Web 服务器通信时,它使用接口的主 IP 地址而不是 vip 地址 (192.168.0.2 或 192.168.0.3,具体取决于主动节点)。
因此,我不得不在防火墙上创建两个不同的规则(一个用于节点 1,一个用于节点 2),而不是只允许 VIP 与 Web 服务器通信。我计划将其他节点添加到集群中,这样就不必逐个允许每个节点,而只需一次性允许 VIP,这样会很方便。
这种行为有逻辑解释吗?有没有办法告诉起搏器只使用 VIP?这是一种好的做法吗?我不想做任何愚蠢的事情,所以如果你认为我不应该这样做,我很乐意听听原因。
问候
答案1
我不认为这是一个指示起搏器仅使用虚拟 IP 的问题,而是告诉 Nginx 仅使用虚拟 IP。
我不是 Nginx 专家,但通过阅读他们的文档,我发现了一个名为的配置指令proxy_bind
。我相信这可能是您需要设置才能获得所需行为的内容。来自 Nginx 文档这里。
如果您的代理服务器有多个网络接口,有时您可能需要选择特定的源 IP 地址来连接到代理服务器或上游。如果 NGINX 后面的代理服务器配置为接受来自特定 IP 网络或 IP 地址范围的连接,这可能会很有用。