ES机器置换,分片迁移

ES集群要去除三台节点,并新增三台来替换

机器列表:

172.31.50.113 > 172.31.50.25

172.31.49.187 > 172.31.50.24

172.31.49.188 > 172.31.50.23

操作流程:

  1. 新增三台机器,把要替换机器上的分片迁移到新机器

关闭自动均衡配置,防止新增机器后自动均衡分片到这两台机器

说明:因为是不停机迁移,所以只能禁用自动均衡,不能禁用禁止自动分配分片,否则新创建的索引可能无法分配分片导致集群red,如果可以停机,可以使用禁用自动分片,迁移完成后在取消。无论停不停机,都建议禁用自动均衡,否则会产生大量io

  1. 迁移三台旧机器的分片到新机器

具体实施步骤:

一、禁用自动均衡

PUT http://master:9200/cluster/settings

{"transient":{"cluster.routing.rebalance.enable":"none"}}

二、新增机器

新增三台节点,并加入到现有ES集群中,并查看确保没有分片分配到该节点。

获取

三、获取172.31.50.113、172.31.49.187、172.31.49.188节点所有的分片和分片号

	curl -XGET 'http://172.31.50.119:9200/_cat/shards' |grep STARTED | grep '172.31.50.113'  | awk '{print $1,$2}' > 113_index_shard
	curl -XGET 'http://172.31.50.119:9200/_cat/shards' |grep STARTED | grep '172.31.49.187'  | awk '{print $1,$2}' > 187_index_shard
	curl -XGET 'http://172.31.50.119:9200/_cat/shards' |grep STARTED | grep '172.31.49.188'  | awk '{print $1,$2}' > 188_index_shard

执行脚本

#!/bin/bash
file=$1
logfile="./move.log"
es_master="172.23.6.130"
#from 为要迁移的节点id,也可以使用节点名字或ip
from="5VuDYawDRZKbVmKraaHwYw"
#to 为迁移目的节点id,也可以使用节点名字或ip
to="dn-OA27AQsex87nhYSGvJQ"
num=`cat $file|wc -l`
for ((i=1;i<="$num";i++))
do
index=`sed -n ${i}p $file | awk '{print $1}'`
shard=`sed -n ${i}p $file | awk '{print $2}'`
echo "==========开始迁移$index $shard==========" >> $logfile
echo `date` >> $logfile
json="{\"commands\" : [{\"move\" : {\"index\" : \"$index\", \"shard\" : $shard,\"from_node\" : \"$from\", \"to_node\" : \"$to\"}}]}"
curl -XPOST "http://${es_master}:9200/_cluster/reroute" -d "$json" >> ./eslog
done

进度查看:

查看当前正在迁移的分片

curl -XGET 'http://172.31.50.119:9200/_cat/shards?v'| grep RELOCATING

四、迁移完成后再次检查旧的三台节点是否还有没迁移的分片,如果有,需要再次执行迁移(因为没有关闭自动分配分片,所以可能会有新创建的索引把分片分配到该节点)

五、迁移完成,确保旧节点没有数据,直接下线

集群迁移参考:

https://cloud.tencent.com/developer/article/1545329


ES机器置换,分片迁移
https://www.hechunyu.com/archives/1698221292376
作者
chunyu
发布于
2022年08月25日
许可协议