一个正确的ES集群重启流程(附串行重启脚本)

目录

1、关闭集群自动均衡、禁止集群写入

2、重启es集群

3、打开集群自动均衡、开启集群写入

4、补充一个串行重启es集群的shell脚本


注释:本集群所有操作都在跳板机或者堡垒机进行,运维日常一般不需要我们登录具体的机器。

1、关闭集群自动均衡、禁止集群写入

#关闭集群自动均衡
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d 
'{
  "persistent" :{
      "cluster.routing.rebalance.enable": "none"
   },
     "transient" :{
      "cluster.routing.rebalance.enable": "none"
   }
}'
#curl命令可以在kibana平台替换为如下命令:
PUT /_cluster/settings  启动时候,禁自动均衡
{
  "persistent": {
    "cluster.routing.rebalance.enable": "none"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "none"
  }
}

参数取值:
all:默认选项,允许所有种类的分片的分片平衡
primaries:仅允许主分片的分片平衡。
replicas:仅允许副本分片的分片平衡。
none:任何索引都不允许任何形式的分片平衡。

#检查集群自动均衡是否关闭
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana平台替换为如下命令:
get/_cluster/settings?pretty

#禁止集群写入
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '
{
  "persistent" :{
      "cluster.blocks.read_only" : "true"
   },
     "transient" :{
      "cluster.blocks.read_only" : "true"
   }
}'
#curl命令可以在kibana平台替换为如下命令:
PUT /_cluster/settings  //启动时候,禁写
{
  "persistent": {
    "cluster.blocks.read_only": true
  },
  "transient": {
    "cluster.blocks.read_only": true
  }
}

#检查集群写入是否已经关闭
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana平台替换为如下命令:
get /_cluster/settings?pretty

2、重启es集群

#停es服务
ssh ip -C 'ps -ef|grep  org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print \$2}'|xargs kill -9'

#启动es服务
ssh ip -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

3、打开集群自动均衡、开启集群写入

--先打开写入,再打开自动均衡
#打开集群写入
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent" :{"cluster.blocks.read_only" : "false"}}'
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"transient" :{"cluster.blocks.read_only" : "false"}}'
#curl命令可以在kibana平台替换为如下命令:
PUT /_cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": false
  }
}
PUT /_cluster/settings
{
  "transient": {
    "cluster.blocks.read_only": false
  }
}

#检查集群写入是否已经打开
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana平台替换为如下命令:
get /_cat/shards?v&pretty&s=ip:desc

#打开集群自动均衡
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent" :{"cluster.routing.rebalance.enable": "all"}}'
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"transient" :{"cluster.routing.rebalance.enable": "all"}}'
#curl命令可以在kibana平台替换为如下命令:
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.rebalance.enable": "ALL"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "ALL"
  }
}

#检查集群自动均衡是否打开
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana平台替换为如下命令:
get /_cluster/settings?pretty

4、补充一个串行重启es集群的shell脚本

写脚本的背景:最近接了一个业务的需求,需要添加一个配置,然后在不影响集群的情况下重启生效(业务可以接受短暂的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

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果在GlassFish集群中单独重启一个实例,而该实例下的应用程序不见了,可能是因为该实例的配置信息没有被正确同步到其他实例。这种情况下,可以尝试以下步骤: 1. 检查实例所在节点的状态:使用asadmin命令查看该节点的状态,确保节点正常运行。例如: ``` asadmin> get nodes ``` 如果节点已停止或无法访问,则需要先恢复该节点。 2. 检查集群配置信息:使用asadmin命令检查集群的配置信息,确保所有实例的配置信息都正确同步。例如: ``` asadmin> list-configs --target cluster_name ``` 这个命令会列出集群的所有配置信息,包括每个实例的配置信息。检查每个实例的配置信息是否正确同步。 3. 尝试重新部署应用程序:如果实例的配置信息已经同步,但应用程序仍然不见了,那么可能是应用程序没有正确部署。可以尝试重新部署应用程序,以确保应用程序已经正确部署到该实例上。例如: ``` asadmin> deploy --target instance_name /path/to/application.war ``` 这个命令会将应用程序部署到指定的实例上。 4. 检查日志文件:如果以上步骤都没有解决问题,可以查看实例的日志文件,以确定具体的原因。例如,可以查看GlassFish的server.log文件,检查是否有相关的错误或警告信息。 总之,如果在GlassFish集群中单独重启一个实例,而该实例下的应用程序不见了,需要先检查该实例的配置信息是否正确同步,并尝试重新部署应用程序。如果问题仍然存在,可以查看日志文件以确定原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值