我正在使用 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 作为primitive
IPaddr2 服务
,并且该服务应在两个节点上运行:
- 为其创建原语,然后使用它的 ID
- 从中创建“克隆”,如下所示:
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
这似乎解决了我的问题。