有人能解释一下 Heartbeat 和 UCarp 在 IP 故障转移场景中的主要区别是什么吗?
它们似乎都提供了此功能,也许 UCarp 设置起来更简单?
谢谢。
答案1
我认为您对简单的主动-被动设置感兴趣。
在这种设置下,ucarp 和 heartbeat 做的事情几乎相同。本质上 - 当机器被选为主/热备用时,它们运行提供的脚本。
心跳可能看起来要复杂得多 [ 因为它可以帮助您自动执行 drdb 挂载、重新启动多个服务等 ] 但最后 - 您可以编写所有这些脚本并让 ucarp 调用它]。
就我个人而言 - 我使用单一资源运行心跳 - 即执行以下操作的脚本:
- [取消]绑定相应的 IP 地址
- 运行几次 arp 广播
- 启动[停止]所需服务
我的设置非常简单 [debian lenny 下的 heartbeat 2.1.3-6]:我有两台服务器:
- ser0 [首选活动节点] 在 eth0 上永久分配 10.0.0.2/24
- ser0b [等待替换主节点的热备用节点] 在 eth0 上永久分配 10.0.0.3/24
“浮动 IP”-分配给活动节点的是 10.0.1.1/24,分配给 eth1
在这种情况下,获得高可用性的服务是 apache。我分别同步从 ser0 到 ser0b 提供的 apache 的配置和内容。
以下文件在两台机器上完全相同,但有一个明显的例外:
/etc/ha.d/authkeys:
auth 1
1 md5 somethingrandom
/etc/ha.d/haresources
ser0 ha.sh
/etc/ha.d/ha.cf
keepalive 2
deadtime 10
udpport 694
; below - address permanently assigned to the peer node . this is for master:
ucast eth1 10.0.0.3
; and on slave i have
; ucast eth1 10.0.0.2
udp eth0
logfacility local0
auto_failback on
node ser0
node ser0b
/etc/init.d/ha.cf [ 也可以在 /etc/ha.d/resources.d/ha.cf 中 ]
#!/bin/bash
case "$1" in
start)
ip link set dev eth1 up
# bind 'floating' ip to the interface
ip a a 10.0.1.1/24 dev eth1
# you might want to add some route-changes here if needed
/usr/lib/heartbeat/send_arp -r 10 eth1 10.0.0.1 auto 10.0.0.255 255.255.255.0
# to make sure apache reloads it's config when machine becomes master
/etc/init.d/apache2 restart
;;
stop)
# we are no longer active, un-bind 'floating' ip from the interface
ip a d 10.0.1.1/24 dev eth1
# you could stop it as well or just skip this step
/etc/init.d/apache2 restart
;;
esac
exit 0