注释:本集群所有操作都在跳板机或者堡垒机进行,运维日常一般不需要我们登录具体的机器。
#关闭集群自动均衡
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
#停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"'
--先打开写入,再打开自动均衡
#打开集群写入
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
写脚本的背景:最近接了一个业务的需求,需要添加一个配置,然后在不影响集群的情况下重启生效(业务可以接受短暂的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
因篇幅问题不能全部显示,请点此查看更多更全内容