我正在尝试构建一个必须与主节点通信的机器动态集群(用于报告、更新和主节点要处理的各种其他任务)。
为了方便我想到使用心跳项目http://linux-ha.org/wiki/Heartbeat。Hearbeat 提供了一个很好的故障转移和恢复机制,我想利用它。我不打算使用 ldirectord 或任何虚拟 IP。我真的想使用 heartbeat 来指定主节点。
目前我只是运行一个简单的 2 节点设置,节点 1 和节点 2,它们的 IP 地址不受我无法控制(通过 DHCP 分配)。
因为节点可以动态添加到集群中,所以我像这样配置了ha.cf
keepalive 2
warntime 6
deadtime 12
logfacility local0
bcast eth0 # Linux
mcast eth0 225.0.0.1 694 1 0
auto_failback on
node virtual
node node1
node node2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
还有这样的资源
virtual \
nginx
因此,我将集群设置为该virtual
节点是集群的首选资源。此节点不存在。因此,我希望所有备用节点都经过选举过程,以决定当它关闭时谁将接管它(=始终)。我这样做是因为我想动态地向配置中添加和删除节点,但我仍然需要有一个首选节点
当我启动单个节点时,它工作得很好,因为它只获取资源。但是,当我启动第二个节点时,使用完全相同的配置(scp 配置,因此不存在差异风险),两个节点都会释放其资源(我可以测试这一点,因为没有一个节点会启动其 nginx,并且前一个主节点(例如 node1)会将其关闭)。
如果需要,我可以发布完整的日志,但本质上发生的事情是节点只是试图从彼此获取资源,并最终释放大量资源
ERROR: Both machines own our resources!
和
WARN: 1 lost packet(s) for [node2] [22:24]
结束于
Jul 23 15:17:21 node1 heartbeat: [16390]: info: node2 wants to go standby [foreign]
Jul 23 15:17:21 node1 heartbeat: [16390]: info: remote resource transition completed.
Jul 23 15:17:21 node1 heartbeat: [16390]: ERROR: Both machines own our resources!
Jul 23 15:17:21 node1 heartbeat: [16390]: ERROR: Both machines own our resources!
Jul 23 15:17:22 node1 heartbeat: [16390]: info: remote resource transition completed.
Jul 23 15:17:22 node1 heartbeat: [16390]: info: standby: acquire [foreign] resources from node2
Jul 23 15:17:22 node1 heartbeat: [16678]: info: acquire local HA resources (standby).
Jul 23 15:17:22 node1 heartbeat: [16678]: info: local HA resource acquisition completed (standby).
Jul 23 15:17:22 node1 heartbeat: [16390]: info: Standby resource acquisition done [foreign].
如果有人对如何解决这个问题(修复或替代方法)有建议,我洗耳恭听。
干杯。