CentOS 7:PCS Pacemaker Corosync Active/Active HAProxy 依赖项

CentOS 7:PCS Pacemaker Corosync Active/Active HAProxy 依赖项

我正在尝试在 CentOS7 上以主动/主动配置为 HAProxy 设置 PCS。我以前做过主动/主动,但我不熟悉约束和依赖组。

到目前为止,一切都很好:

 2 nodes configured
 4 resources configured

 Online: [ HOST1 HOST2 ]

 Full list of resources:

  Clone Set: VIPHA-clone [VIPHA] (unique)
      VIPHA:0     (ocf::heartbeat:IPaddr2):       Started HOST2
      VIPHA:1     (ocf::heartbeat:IPaddr2):       Started HOST1
  Clone Set: haproxy-clone [haproxy]
      Started: [ HOST2 HOST1 ]

但是,现在我想添加一个约束,即 HAPRoxy 必须正在运行,以便主机能够为该 IP 提供服务:

pcs 约束顺序为 haproxy-clone 然后是 VIPHA-clone

问题在于,除非先启动,否则 HAProxy 永远不会启动,因为它无法绑定到 IP。

我该如何设置以便:

  1. 如果健康检查(即 haproxy 进程运行)失败,pcs 是否会将主机上的 IP 脱机?

  2. 仅当健康检查(即 haproxy 进程运行)成功时,pcs 才会启动 IP?

    • 如果按照上面描述的方法无法实现,请同时开始并表现为 #1

我很感激任何意见。谢谢!

答案1

我在 haproxy.cfg 中监听通配符

bind *:443

代替

bind myvip:443

这样无论节点是否具有 VIP 资源,haproxy 资源都可以一直运行。如果节点获得 VIP,haproxy 将立即对其做出响应。

明显的副作用是 haproxy 不仅监听 VIP,还监听其所有 IP 地址。

如果端口号冲突(例如我需要在另一个 IP 或 VIP 上配置不同的端口 443),我会将其定义为bind *:9443,然后将其放在 DNAT 后面。

答案2

如果您不受 pacemaker/corosync 的约束,则可以opensvc使用以下服务配置文件来实现您所描述的行为:

[DEFAULT]
id = 84327b87-13f6-4d32-b90a-a7fad87a8d92
nodes = server1 server2
flex_min_nodes = 2
topology = flex
orchestrate = ha
monitor_action = freezestop

[ip#vip]
ipname@server1 = 192.168.100.240
ipname@server2 = 192.168.100.241
ipdev = br0
monitor = true

[app#haproxy]
type = simple
start = /sbin/haproxy -f /etc/haproxy/haproxy.cfg
restart = 1
monitor = true

解释:

[DEFAULT部分是全局配置设置:

  • id = ....唯一的服务 ID,在服务创建时自动生成(svcmgr -s myservice create然后svcmgr -s myservice edit config

  • nodes = server1 server2意味着我们正在运行一个 2 节点opensvc集群

  • flex_min_nodes = 2告诉我们,我们希望该服务至少运行 2 个实例。在这个 2 节点集群中,每个节点将有 1 个实例。

  • topology = flex指定我们正在运行主动/主动服务拓扑

  • orchestrate = ha告诉服务必须由opensvc守护进程自动管理

  • monitor_action = freezestop用于强制在关键资源发生故障时(如 haproxy 进程崩溃或终止)执行行为。如果发生这种情况, opensvc守护进程必须做出决定。3 个可能的参数:

    • freezestop:本地服务实例停止,并处于冻结状态。
    • reboot:节点已重新启动。
    • crash:节点崩溃。

[ip#vip]: 用于声明服务vip:

  • 在服务启动时,将在接口上配置server1IP192.168.100.240br0
  • 在服务启动时,将在接口上配置server2IP192.168.100.241br0
  • monitor = true告诉opensvc代理此资源至关重要(如果发生故障,则触发服务monitor_action

[app#haproxy]:描述应用程序的内容:

  • type = simple指定服务管理单个进程应用程序(非分叉守护进程)
  • start = /sbin/haproxy -f /etc/haproxy/haproxy.cfg是服务启动时运行的命令
  • restart = 1告诉守护进程如果资源出现故障则opensvc尝试重新启动该资源。1
  • monitor = truehaproxy 是关键资源。如果它宕机了,则根据前面的参数尝试重新启动 1 次,如果失败,则触发monitor_action

由于该服务依赖于 vip,因此您没有义务绑定 *:443,而只需绑定服务 vip。

关于你关于如果 haproxy 发生故障,重新启动/stonith 的问题,只需restart = 1在 中输入[app#haproxy]以尝试重新启动,并monitor_action = crashDEFAULT部分中输入 。这样,将尝试 1 次重新启动,如果此操作不起作用,则节点崩溃。

希望这可以帮助。

相关内容