Redian新闻
>
Keepalived脑裂的解决和预防(附脚本)

Keepalived脑裂的解决和预防(附脚本)

公众号新闻

在实际生产环境中,我们可以从以下几个方面来防止裂脑问题的发生:

同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。

当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、feyce)。相当于备节点接收不到心跳消患,通过单独的线路发送关机命令关闭主节点的电源。

做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短倍就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短.

当然,在实施高可用方案时,要根据业务实际需求确定是否能容忍这样的损失。对于一般的网站常规业务.这个损失是可容忍的。

多节点集群中,可以通过增加仲裁的机制,确定谁该获得资源,这里面有几个参考的思路:

          1.增加一个仲裁机制。例如设置参考的IP,当心跳完全断开的时候,2个节点各自都ping一下参考的IP,不同则表明断点就出现在本段,这样就主动放弃竞争,让能够ping通参考IP的一端去接管服务。        

          2.通过第三方软件仲裁谁该获得资源,这个在阿里有类似的软件应用

启用磁盘锁。正在服务一方锁住共享磁盘,脑裂发生的时候,让对方完全抢不走共享的磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的乙方不主动解锁,另一方就永远得不到共享磁盘。现实中介入服务节点突然死机或者崩溃,另一方就永远不可能执行解锁命令。后备节点也就截关不了共享的资源和应用服务。于是有人在HA中涉及了“智能”锁,正在服务的一方只在发现心跳线全部断开时才启用磁盘锁,平时就不上锁了

报警报在服务器接管之前,给人员处理留足够的时间就是1分钟内报警了,但是服务器不接管,而是5分钟之后接管,接管的时间较长。数据不会丢失,但就是会导致用户无法写数据。报警后,不直接自动服务器接管,而是由人员接管。 

检查处理脚本(供参考)

注:

1.脚本无法解决服务器主备之间因为防火墙,配置等产生的脑裂问题(安装配置时注意检查,keepalived服务正常运行后再加入检查处理脚本),脚本只能处理自身网络问题产生的脑裂,必须保证网关服务器稳定

2.备机获取vip有2种情况:A主机keepalived服务发生故障vip漂移(非脑裂);B主机通信异常vip漂移(脑裂)。

脚本使用机制(引入第三方仲裁),步骤:

1.查看是否可获取vip,未获取:判断keepalived服务运行状态,运行中不操作,未运行重新启动,结束脚本。

2.服务器周期性地ping一下网关(第三方仲裁ip地址),如果ping通:判断keepalived服务运行状态,运行中不操作,未运行重新启动,结束脚本;如果ping不通则认为自身有问题,累计次数达到阈值,关闭keepalived。

脚本执行方式:

1.借助keepalived提供的vrrp_script及track_script实现(脚本内keepalived服务如果被关闭,脚本将不在执行,重新启动不生效),配置:

...vrrp_script check_local {script "/usr/local/src/check_gateway.sh 192.168.1.198" #192.168.1.198 需要检查的vipinterval 10 #10秒一次...track_script {check_local}

 2.linux定时任务(查看 tailf /var/spool/mail/root)

crontab -e

#1分1次 延迟10秒实现(时间自定义) keepalived服务脑裂脚本* * * * sleep 10; bash /usr/local/src/check_gateway.sh 192.168.1.198

脚本内容(根据实际环境修改网关ip,是否重新启动keepalived服务):

vim /usr/local/src/check_gateway.sh

#!/bin/bashexport PATH=$PATH:/usr/sbin#脑裂检查及控制:第三方仲裁机制,使用ping网关ip方式#循环次数CHECK_TIME=3#虚拟ipVIP=$1#网关ip(根据实际环境修改)GATEWAY=192.168.1.8#本机网卡eth=enp2s0#服务器和网关通信状态  0=失败,1=成功keepalived_communication_status=1#是否获取vip状态 0=失败,1=成功get_vip_status=1#keepalived服务状态 0=未运行,1=运行中keepalived_service_status=1#服务状态运行中字符串active_status_str='active (running)'echo "开始执行脚本 check_gateway.sh $VIP;时间:"date#查看是否获取vip状态function check_get_vip_status() {  #通过ip add命令查看ip信息,搜索$VIP,统计行数,是否等于1  if [ $(ip add | grep "$VIP" | wc -l) -eq 1 ]; then    get_vip_status=1  else    get_vip_status=0  fi  return $get_vip_status} #检查通信状态function check_keepalived_status() {  #检测$VIP 能否ping通$GATEWAY:使用$eth网络设备(-I $eth),发送数据包5(-c 5),源地址$VIP询问目的地[vip] $GATEWAY [网关地址 公用参考ip](-s $VIP $GATEWAY) 日志不保存 >/dev/null 2>&1  /sbin/arping -I $eth -c 5 -s $VIP $GATEWAY >/dev/null 2>&1  #判断上一步执行结果 等于0成功  if [ $? = 0 ]; then    keepalived_communication_status=1  else    keepalived_communication_status=0  fi  return $keepalived_communication_status} #检查keepalived服务状态function check_keepalived_service_status() {  #通过systemctl status keepalived.service命令查看keepalived服务状态,搜索$active_status_str,统计行数,是否等于1  if [ $(systemctl status keepalived.service | grep "$active_status_str" | wc -l) -eq 1 ]; then    keepalived_service_status=1  else    keepalived_service_status=0  fi  return $keepalived_service_status} #循环执行#判断$CHECK_TIME 不等于 0while [ $CHECK_TIME -ne 0 ]; do  #执行check_get_vip_status获取get_vip_status  check_get_vip_status  #未获取vip  if [ $get_vip_status = 0 ]; then    #修改CHECK_TIME值 结束循环    CHECK_TIME=0    #检查服务状态 执行check_keepalived_service_status获取keepalived_service_status    if [ $keepalived_service_status = 0 ]; then      echo "执行脚本 check_gateway.sh $VIP;启动keepalived服务"      systemctl start keepalived.service    fi     echo "执行脚本 check_gateway.sh $VIP;执行结果:未获取vip,无需处理,脚本执行结束,时间:"    date    #正常运行程序并退出程序    exit 0  fi  #$CHECK_TIME  = $CHECK_TIME-1  let "CHECK_TIME -= 1"  #执行check_keepalived_status获取keepalived_communication_status  check_keepalived_status  #判断 $keepalived_communication_status = 1 通信成功  if [ $keepalived_communication_status = 1 ]; then    #修改CHECK_TIME值 结束循环    CHECK_TIME=0    #检查服务状态 执行check_keepalived_service_status获取keepalived_service_status    check_keepalived_service_status    if [ $keepalived_service_status = 0 ]; then      echo "执行脚本 check_gateway.sh $VIP;启动keepalived服务"      systemctl start keepalived.service    fi     echo "执行脚本 check_gateway.sh $VIP;GATEWAY=$GATEWAY,执行结果:通信正常,无需处理,脚本执行结束,时间:"    date    #正常运行程序并退出程序    exit 0  fi  #通信失败&&连续3次  if [ $keepalived_communication_status -eq 0 ] && [ $CHECK_TIME -eq 0 ]; then    #关闭keepalived    echo "执行脚本 check_gateway.sh $VIP;关闭keepalived服务"    systemctl stop keepalived.service    echo "执行脚本 check_gateway.sh $VIP;GATEWAY=$GATEWAY,执行结果:通信失败&&连续3次 关闭keepalived,脚本执行结束,时间:"    date    #非正常运行程序并退出程序    exit 1  fi  sleep 3done

链接:http://www.syrr.cn/news/61094.html

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
微软开源DeepSpeed Chat,人人可快速训练百亿、千亿级ChatGPT大模型别 . 情《定风波》瑾沐篇(34):父慈子孝Amid Recovery Push, Street Vendors Make a Comeback Across China请问这棵树得了什么病?把握尺度,营建未来|MILESEEY迈测|DEEP GREEN美国优胜美地国家公园,人生境界减少和预防隐形霸凌,这套书强烈推荐家长和孩子一起看人手一个ChatGPT!微软DeepSpeed Chat震撼发布,一键RLHF训练千亿级大模型DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率Majority of Parents Stressed Over Children’s Education: Survey核酸检测围手术期心脏骤停的识别、治疗和预防建议Join free, user-led events — wherever you areBasketball Teams Slapped With Massive Fines Over Match-Fixing掉脑袋的事:Google Brain和DeepMind合并成Google DeepMind!!!慢性心力衰竭恶化的定义、管理和预防丨2023 ESC-HFA临床共识声明【𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶无痕内裤】49元三条!巨巨巨好穿 !!简直就是辣妹顶配,食品级冰箱收纳盒【一日团】The Shanghai Museum Keeping Memories Of Jewish Refugees Alive一个AI创业者的反思、观察和预测|此话当真 EP04Wide&Deep、DCN、xDeepFM、DIN、GateNet、IPRec…你都掌握了吗?一文总结推荐系统必备经典模型(三)DeepLab、DeepLabv3、RefineNet、PSPNet…你都掌握了吗?一文总结图像分割必备经典模型(二)庆祝IEEE Education Week | 课程优惠抢先了解Chinese Creepy Crawlies: Keeping the Pests of May at BayYoung Chinese Love Everything About Sweden. Except Living There.微软宣布开源DeepSpeed-Chat ,训练提速15倍以上,有望实现人手一个ChatGPT?Russia Predicted a Chinese Tourist Boom. It Hasn’t Arrived.Keep再次赴港上市;宝洁回应SK-II安全问题;三顿半 x Shake Shack联名推新... | 刀法品牌热讯IEEE高级会员,IEEE中国联合会前任主席,IEEE北京分会前任主席冯进军当选北京“最美科技工作者”IEEE Education Week主题演讲 | 主讲人:IEEE主席Saifur RahmanChild Sex Abuse in Rural China Is Still Being Overlooked, ReportSteve×郭兆凡:只能隐忍或分离?揭露亲密关系困境的解决之道多GPU通信效率提升4倍,RLHF生成提升2.25倍!DeepSpeed ZeRO++重磅升级Chinese Students Worried as Universities Hike FeesMacBook Pro 13in 2018 A1989 keep rebooting ( screen/battery/othe
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。