串行重启ElasticSearch集群

注: 部分概念介绍来源于网络

写脚本的背景:业务的需求,需要添加一个配置,然后在不影响集群的情况下重启生效(业务可以接受短暂的yellow和red)。这样我就需要在集群恢复green之后,才能重启下一台机器。
脚本使用方法:脚本esrestart.sh和一个listIP列表放置es集群ip或域名。
执行如下命令:
sh esrestart.sh listIP

#!/bin/bash
#0、本脚本用于重启es集群,其中active master必须手动启动,脚本无法重启此mater
#1、判断参数
if [ $# -lt 1 ]
then
        echo -e "\033[1;31m 参数不足,请重新执行... \033[0m"
        echo -e "\033[1;32m 此脚本传参使用方法:$0 第一个参数为待重启的es集群ip列表文件名 \033[0m"
        exit ;
fi
workdir=`pwd`
 
#2、建立es相关的配合文件
list=$1
es_home="/home/es/software/elasticsearch"
es_cluster_name="es-mimi6"
list_ip=`cd ${workdir};cat $list`
 
sum=`cat $list|sed '/^$/d'|wc -l`
num=1
 
#4、人工判断脚本是否可以执行,防止误操作
while true ; do
    echo -ne "\033[33m本脚本会重启es集群,请在 120 秒内确认是否执行: (Y/N) \033[0m" ; read -t120 result
    [ -z "${result}" ] && break
    case ${result} in
            Y|y)    break ;;
            N|n)    echo -e "\033[1;31m配置有误 ,退出es集群重启 !\033[0m" ; exit 1 ;;
                *)      echo -e "\033[1;31m输入有误请重新输入 !\033[0m" ;;
    esac
done
 
#5、开始重启操作
for ip in ${list_ip[@]} ; do
    echo -e "\033[1;31m$num\033[1;32m/$sum     =============== $ip 节点 $user 用户下 现有java进程 =============== \033[0m"
    es_active_master=`curl -s http://$ip:9200/_cat/master|awk '{print $3}'`
    if [ "${ip}" != "${es_active_master}" ] ; then
        es_num=1
        while [ `curl -s http://${ip}:9200/_cat/health|awk '{print $4}'` != "green" ] ; do
            echo -e "\033[1;33m 0.${es_num}、集群未恢复green状态,${ip} 节点本次总计划等待sleep ${es_num}0s \033[0m"
            sleep 10
            let es_num++
        done
        #上次es服务启动时间
        echo -e "\033[1;35m 1、集群状态为:`curl -s http://${ip}:9200/_cat/health|awk '{print $4}'`,${ip} 节点上次启动时间如下: \033[0m"
        sudo ssh $ip -C "su - es -c 'jps|grep -v Jps'|awk '{print \$1}'|xargs ps -o lstart|grep -v STARTED"
        echo -e "\033[1;35m 2、开始执行重启命令 \033[0m"
        sudo ssh $ip -C "su - es -c 'cd ${es_home}/bin && ps -ef|grep  org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print \$2}'|xargs kill -9 && sleep 5 && sh elasticsearch -d'"
        #重启后es服务启动时间
        echo -e "\033[1;35m 3、集群状态为:`curl -s http://${es_active_master}:9200/_cat/health|awk '{print $4}'`,${ip} 节点本次启动时间如下: \033[0m"
                sudo ssh $ip -C "su - es -c 'jps|grep -v Jps'|awk '{print \$1}'|xargs ps -o lstart|grep -v STARTED"
    else
        echo -e "\033[1;31m ${ip} 为 active master,重启跳过此节点,需要手动重启 \033[0m"
    fi
    let num++
done

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值