阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

iptables导致Heartbeat脑裂

144次阅读
没有评论

共计 4347 个字符,预计需要花费 11 分钟才能阅读完成。

在将 heartbeat 应用到生产环境中,还是有许多要注意的地方,一不小心就可能导致 heartbeat 无法切换或脑裂的情况,下面来介绍下由于 iptables 导致脑裂的现象。

主:192.168.3.218

192.168.4.218 心跳 ip

usvr-218 主机名

备:192.168.3.128

192.168.4.128 心跳 ip

usvr-128 主机名

现象:当启动 heartbeat 主后,VIP 在 218 上生效;然后再启动 heartbeat 备,VIP 在 128 上也生效;此时脑裂产生,导致访问异常。

解决思路:

1. 查看主机和备机的日志

主机 218 日志如下(只列出部分日志):

heartbeat[27330]: 2015/01/27_09:05:29 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:30 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:30 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:31 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:32 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:32 ERROR: Message hist queue is filling up (500 messages in queue)

heartbeat[27330]: 2015/01/27_09:05:33 WARN: node usvr-128: is dead

heartbeat[27330]: 2015/01/27_09:05:33 info: Cancelling pending standby operation

heartbeat[27330]: 2015/01/27_09:05:33 info: Dead node usvr-128 gave up resources.

heartbeat[27330]: 2015/01/27_09:05:33 info: all clients are now resumed

heartbeat[27330]: 2015/01/27_09:05:33 ERROR: lowseq cannnot be greater than ackseq

heartbeat[27330]: 2015/01/27_09:05:33 info: hist->ackseq =74575, old_ackseq=0

heartbeat[27330]: 2015/01/27_09:05:33 info: hist->lowseq =74576, hist->hiseq=74824, send_cluster_msg_level=1

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Emergency Shutdown: Master Control process died.

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Killing pid 27330 with SIGTERM

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Killing pid 27334 with SIGTERM

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Killing pid 27335 with SIGTERM

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Killing pid 27336 with SIGTERM

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Killing pid 27337 with SIGTERM

heartbeat[27333]: 2015/01/27_09:05:34 CRIT: Emergency Shutdown(MCP dead): Killing ourselves.

备机 128 日志如下(只列出部分日志):

Jan 27 10:11:35 heartbeat: [15999]: info: glib: ucast: bound receive socket to device: eth0

Jan 27 10:11:35 heartbeat: [15999]: info: glib: ucast: set SO_REUSEPORT(w)

Jan 27 10:11:35 heartbeat: [15999]: info: glib: ucast: started on port 694 interface eth0 to 192.168.4.218

Jan 27 10:11:35 heartbeat: [15999]: info: glib: ping heartbeat started.

Jan 27 10:11:35 heartbeat: [15999]: info: G_main_add_TriggerHandler: Added signal manual handler

Jan 27 10:11:35 heartbeat: [15999]: info: G_main_add_TriggerHandler: Added signal manual handler

Jan 27 10:11:35 heartbeat: [15999]: info: G_main_add_SignalHandler: Added signal handler for signal 17

Jan 27 10:11:35 heartbeat: [15999]: info: Local status now set to: ‘up’

Jan 27 10:11:35 heartbeat: [15999]: info: Link 192.168.3.1:192.168.3.1 up.

Jan 27 10:11:35 heartbeat: [15999]: info: Status update for node 192.168.3.1: status ping

Jan 27 10:13:35 heartbeat: [15999]: WARN: node usvr-218: is dead

Jan 27 10:13:35 heartbeat: [15999]: info: Comm_now_up(): updating status to active

Jan 27 10:13:35 heartbeat: [15999]: info: Local status now set to: ‘active’

Jan 27 10:13:35 heartbeat: [15999]: info: Starting child client “/usr/lib64/heartbeat/ipfail” (498,498)

Jan 27 10:13:35 heartbeat: [15999]: WARN: No STONITH device configured.

Jan 27 10:13:35 heartbeat: [15999]: WARN: Shared disks are not protected.

Jan 27 10:13:35 heartbeat: [15999]: info: Resources being acquired from localsv218.

正如如上显示,主备双方都检查对方的 node 死掉,从而接管 VIP,导致脑裂产生。

2. 初步断定是由于主备双方无法通讯或网络延迟导致,难道由于时间不同步导致,虽然时间不同不对 heartbeat 影响较小,但是相差很多,肯定会有问题,于是双方对时。

/usr/sbin/ntpdate ntp.api.bz&&hwclock -w

echo “0 23 * * * root /usr/sbin/ntpdate ntp.api.bz&&hwclock -w > /dev/null 2>&1” >>/etc/crontab

3. 对时完毕,仍然报日志中的错误,再次检查主备配置文件,发现都没有问题,唯一区别在于主备上都有防火墙,由于 heartbeat 设置的是由 udp 694 端口通讯,于是将 udp 694

端口在放火墙中放过。

在主 218 上加入:

/sbin/iptables -A INPUT -i eth0 -p udp -s 192.168.4.128 –dport 694 -m comment –comment “heartbeat-slave” -j ACCEPT

在备 128 上加入:

/sbin/iptables -A INPUT -i eth0 -p udp -s 192.168.4.218 –dport 694 -m comment –comment “heartbeat-master” -j ACCEPT

注意:1. 如果防火墙策略严格时,要对心跳 ip 放过,否则 udp 通讯仍会失败

2. 入口网卡针对对心跳 ip 的网卡

经过防火墙配置后,主备可以正常通讯了,正常情况下主节点接管 VIP 工作,当主节点 down 掉或主节点的 heartbeat 服务停掉,备用节点便会接管 VIP

————————————– 分割线 ————————————–

iptables 使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm

iptables—包过滤(网络层)防火墙 http://www.linuxidc.com/Linux/2013-08/88423.htm

Linux 防火墙 iptables 详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables+L7+Squid 实现完善的软件防火墙 http://www.linuxidc.com/Linux/2013-05/84802.htm

iptables 的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux 下防火墙 iptables 用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm

————————————– 分割线 ————————————–

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4347字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中