Pacemaker Active/Active haproxy 负载平衡

Pacemaker Active/Active haproxy 负载平衡

我正在使用 Haproxy 对复制的 mysql 主服务器进行负载平衡。我还使用 Heartbeat 和 Pacemaker 进行主动/主动 IP 故障转移,在两个负载平衡器上使用两个虚拟 IP,以实现 Web 服务器高可用性。我使用 Pacemaker 中的位置来保持每个负载平衡器上的 VIP 一个,并使用指向 VIP 的循环 DNS 域来对负载平衡器进行负载平衡。到目前为止一切看起来都很好!

|LB1:| 循环赛 -->|1.2.3.4| 心跳起搏器 | Haproxy | 192.168.1.1

          |           |           |             |         |

|LB2:| 循环赛 -->|5.6.7.8| 心跳起搏器 | Haproxy | 192.168.1.2

crm 配置显示

node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
    params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
    op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
    params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
    op monitor interval="40s" timeout="20s"
location vip1_pref vip1 100: lb1
location vip2_pref vip2 100: lb2
property $id="cib-bootstrap-options" \
    dc-version="1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd" \
    cluster-infrastructure="Heartbeat" \
    stonith-enabled="false" \
    no-quorum-policy="ignore" \
    expected-quorum-votes="1"

如何配置 Pacemaker,以便如果任何负载均衡器上的 Haproxy 损坏,它仍应工作,要么在另一个 lb 上使用 haproxy,要么将两个 vips 移动到工作的 haproxy lb 节点。我不想要主动/被动,而是主动/主动配置,因为在两个 lbs 上运行 haproxy 来响应 mysql 请求。

可以使用起搏器吗?有人知道吗?

非常感谢您的帮助!谢谢!

更新 1

@Arek B.使用是一个很好的提示clone。我将下面的行附加到起搏器配置中,但仍然无法准确获得实际需要的内容。我检查了haproxy两个 LB 上的停止,它由起搏器自动启动,但当我检查永久停止它( )时/etc/defaults/haproxy, enabled=0,haproxy 无法启动,在这种情况下,当它无法启动 haproxy 时,我希望将资源(ipaddr2)移动到另一个正在运行的 haproxy lb。还有其他提示吗?

primitive mysql_proxy lsb:haproxy \
        op monitor interval="10s"
clone clone_mysql_proxy mysql_proxy \
        meta clone-max="2" clone-node-max="1"
location mysql_proxy_pref1 clone_mysql_proxy 100: lb1
location mysql_proxy_pref2 clone_mysql_proxy 50: lb2

答案1

我有主动-主动 2*virtIP 集群

对于 CRM 配置:
我使用两个虚拟 IP 作为primitiveIPaddr2 服务
,并且该服务应在两个节点上运行:

  1. 为其创建原语,然后使用它的 ID
  2. 从中创建“克隆”,如下所示:
    clone any_name_of_the_clone your_primitive_service_id \
    meta clone-max="2" clone-node-max="1"

您可以添加order(在启动克隆后启动虚拟 IP - 非原始,创建克隆后您不应使用它的子 ID)

它正在运行,故障转移有效(当其他节点发生故障时,在一个节点上分配 2 个 IP)。
但是我遇到了如何制作的问题colocation- 我的意思是有受限的服务:我无法在子服务失败的节点上使用 virtIP
当服务关闭时一切正常 - 集群会将其启动,但是当启动失败(例如服务配置损坏)时 - 集群会提示错误但会启动 IP 。

有人知道原因是什么吗?
- 是监控/启动/停止控制不良的问题还是配置约束的问题?

编辑:
我已将选项添加Primitive到“op start”:。on-fail="standby"现在,当我的服务(克隆中唯一的原语)无法启动时,节点也会丢失 virtIP
这似乎解决了我的问题。

相关内容