ElasticSearch自愈之节点丢失恢复
创始人
2025-07-05 17:01:48
0

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

背 景

Elasticsearch是一个开源的、分布式的、高可用的、实时的搜索和分析引擎,它有助于快速收集、存储和分析大量数据,广泛应用于大规模数据的实时搜索和分析。

而在现实运维中,随着业务的扩展,数据量不断增大,为保障业务性能,ES集群不断的扩容节点,扩大集群,有的集群多达上百个节点,虽集群内部具有副本冗余机制,但由于PCSERVER的不稳定性(磁盘故障、网络故障、硬件BUG、内核、内部错误等)或集群的性能压力或程序Bug,可能会导致集群节点丢失。

目前我们运维已经做到7*24短信告警监控,只是在大半夜,有可能无法即时收到短信进行恢复,为能即时恢复集群状态,进而对节点丢失场景研究,并编写自动化脚本,定义autocron task自动恢复集群。

下面是我们的一个业务的集群,由于业务压力,经常性会丢失1~2个节点,并基于该场景做自动恢复。

场景介绍

2.1 脚本设计思路

图片

  • 集群节点数统计,对节点的数量统计,节点数不同则设置不同的值,根据实际情况设置;
  • 对剩余节点判断,小于3则对节点直接拉起;
  • 等待5分钟,可根据实际情况调整,对集群状态进行判断。

目前该场景权适用于部分节点丢失的情况,由于考虑主机硬件问题导致的所有节点故障,存在主机PING告警,在主机重启后,进行判断后再拉起,在未来可对这一块进一步调整优化。

2.2 具体脚本

#!/bin/bas
MONITOR_HOME="/app/check_es"
app_home="/app"
hostip="xxxxxxxx"
node="node_xxxxxxx_9200"
node_number1=`curl -u username:xxxxxxxx http://xxxxxxxx:9200/_cat/nodes|grep 'xxxxxxxx'|wc -l`
if [ ${node_number1} -ne 5 ];then
curl -u username:xxxxxxxx http://xxxxxxxx:9200/_cat/nodes?v |grep 'xxxxxxxx'|awk '{print $10}' > $MONITOR_HOME/now.txt
grep -vwf $MONITOR_HOME/now.txt $MONITOR_HOME/last.txt > $MONITOR_HOME/check.txt
if [[ ${node_number1} < 3 ]];then
cd $MONITOR_HOME
./mess.sh -b "`date` $hostip ERROR: 丢失节点数超过3个,请检查" -t 18974885939,1536793399
else
if [[ ${node_number1} > 2 ]];then
for i in `cat ${MONITOR_HOME}/check.txt`
do
echo "`date` 节点${i}异常,准备重启" >> ${MONITOR_HOME}/error.log
if [ ${i} = ${node} ];then
pid=`ps -ef |grep ${i} |grep -v grep|grep -v controller|grep -v node_${hostip}_9201|grep -v node_${hostip}_9202|grep -v node_${hostip}_9203|grep -v node_${hostip}_9204|awk '{print $2}'`
else
pid=`ps -ef |grep ${i} |grep -v grep|grep -v controller|awk '{print $2}'`
fi
if [ !${pid} ];then

kill -9 ${pid}
cd ${app_home}/${i}/elasticsearch
./bin/elasticsearch -d
else
cd ${app_home}/${i}/elasticsearch
./bin/elasticsearch -d
fi
done
sleep 300s
node_number2=`curl -u username:xxxxxxxx http://xxxxxxxx:9200/_cat/nodes|grep 'xxxxxxxx'|wc -l`
node_status=`curl -u username:xxxxxxxx http://xxxxxxxx:9200/_cat/health|awk '{print $4}'`
if [ ${node_number2} -ne 5 ];then
echo "节点未恢复,请检查"
else
if [[ ${node_status} = "red" ]];then
echo "节点已重新加入集群,正在恢复"
else
echo "集群已恢复"
fi
fi
fi
fi
fi

自愈带来的成效:

ElasticSearch集群由于业务压力过大,有时会OOM,导致集群节点crash掉,在无主机资源增加时,该脚本解决了在收到告警而手工拉起ES节点的困惑,对业务用户来说也相对透明,通过该脚本受到一定的启发,在对于现网环境,可以不断的对特殊场景进行自愈,以保障运维的稳定性。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...