具有两个网络接口的故障转移起搏器群集?

具有两个网络接口的故障转移起搏器群集?

因此,我在一个 VLAN 中有两个测试服务器。

srv1
  eth1 10.10.10.11
  eth2 10.20.10.11

srv2
  eth1 10.10.10.12
  eth2 10.20.10.12

Cluster VIP - 10.10.10.100

具有两个接口的 Corosync 配置:

  rrp_mode: passive

  interface {
    ringnumber: 0
    bindnetaddr: 10.10.10.0
    mcastaddr: 226.94.1.1
    mcastport: 5405
  }

  interface {
    ringnumber: 1
    bindnetaddr: 10.20.10.0
    mcastaddr: 226.94.1.1
    mcastport: 5407
  }

起搏器配置:

# crm configure show
node srv1
node srv2
primitive cluster-ip ocf:heartbeat:IPaddr2 \
    params ip="10.10.10.100" cidr_netmask="24" \
    op monitor interval="5s"
primitive ha-nginx lsb:nginx \
    op monitor interval="5s"
location prefer-srv-2 ha-nginx 50: srv2
colocation nginx-and-cluster-ip +inf: ha-nginx cluster-ip
property $id="cib-bootstrap-options" \
    dc-version="1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c" \
    cluster-infrastructure="openais" \
    expected-quorum-votes="2" \
    no-quorum-policy="ignore" \
    stonith-enabled="false"

地位:

# crm status
============
Last updated: Thu Jan 29 13:40:16 2015
Last change: Thu Jan 29 12:47:25 2015 via crmd on srv1
Stack: openais
Current DC: srv2 - partition with quorum
Version: 1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c
2 Nodes configured, 2 expected votes
2 Resources configured.
============

Online: [ srv1 srv2 ]

 cluster-ip (ocf::heartbeat:IPaddr2):   Started srv2
 ha-nginx   (lsb:nginx):    Started srv2

戒指:

# corosync-cfgtool -s
Printing ring status.
Local node ID 185207306
RING ID 0
    id  = 10.10.10.11
    status  = ring 0 active with no faults
RING ID 1
    id  = 10.20.10.11
    status  = ring 1 active with no faults

而且,如果我这样做srv2# ifconfig eth1 down,pacemaker 仍然可以通过 eth2 工作,这是没问题的。 nginx 在 10.10.10.100 上不可用(因为 eth1 挂了,是的),pacemeker 说,一切正常。

但是,我希望当 srv2 上的 eth1 死掉后,nginx 移动到 srv1。

那么,我能做什么呢?

答案1

ocf:pacemaker:pingd 资源的设计目的正是在连接中断时对节点进行故障转移。您可以在以下集群实验室 wiki 上找到一个非常简短的示例: http://clusterlabs.org/wiki/Example_configurations#Set_up_pingd

有点不相关,但我过去曾看到过使用ifconfig down测试连接丢失的问题。我强烈建议您改用 iptables 丢弃流量来测试连接丢失。

答案2

因此,我解决了 ocf:pacemaker:ping 的问题,感谢@Dok。

# crm configure show
node srv1
node srv2
primitive P_INTRANET ocf:pacemaker:ping \
  params host_list="10.10.10.11 10.10.10.12" multiplier="100" name="ping_intranet" \
  op monitor interval="5s" timeout="5s"
primitive cluster-ip ocf:heartbeat:IPaddr2 \
  params ip="10.10.10.100" cidr_netmask="24" \
  op monitor interval="5s"
primitive ha-nginx lsb:nginx \
  op monitor interval="5s"
clone CL_INTRANET P_INTRANET \
  meta globally-unique="false"
location L_CLUSTER_IP_PING_INTRANET cluster-ip \
  rule $id="L_CLUSTER_IP_PING_INTRANET-rule" ping_intranet: defined ping_intranet
location L_HA_NGINX_PING_INTRANET ha-nginx \
  rule $id="L_HA_NGINX_PING_INTRANET-rule" ping_intranet: defined ping_intranet
location L_INTRANET_01 CL_INTRANET 100: srv1
location L_INTRANET_02 CL_INTRANET 100: srv2
colocation nginx-and-cluster-ip 1000: ha-nginx cluster-ip
property $id="cib-bootstrap-options" \
  dc-version="1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c" \
  cluster-infrastructure="openais" \
  expected-quorum-votes="2" \
  no-quorum-policy="ignore" \
  stonith-enabled="false"

答案3

由于多种原因,ping 监视器不足以应对这种情况。你 ping 什么?在 Linux 中,当接口关闭时,本地 IP 仍会 ping(这很糟糕,它不应该),但是如果你 ping 默认网关会怎么样?集群之外有很多事情可能导致默认网关 ping 丢失,几乎全部其中与集群本地网络连接的健康状况无关。

Pacemaker 需要有一种方法来监控网络接口的 UP/DOWN 状态。这是本地网络问题的最佳指示。我还没有找到任何方法来做到这一点,据我所知,这是 Pacemaker 集群中的一个严重缺陷。

相关内容