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
操作流程:
新增三台机器,把要替换机器上的分片迁移到新机器
关闭自动均衡配置,防止新增机器后自动均衡分片到这两台机器
说明:因为是不停机迁移,所以只能禁用自动均衡,不能禁用禁止自动分配分片,否则新创建的索引可能无法分配分片导致集群red,如果可以停机,可以使用禁用自动分片,迁移完成后在取消。无论停不停机,都建议禁用自动均衡,否则会产生大量io
迁移三台旧机器的分片到新机器
具体实施步骤:
一、禁用自动均衡
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
四、迁移完成后再次检查旧的三台节点是否还有没迁移的分片,如果有,需要再次执行迁移(因为没有关闭自动分配分片,所以可能会有新创建的索引把分片分配到该节点)
五、迁移完成,确保旧节点没有数据,直接下线
集群迁移参考:
ES机器置换,分片迁移
https://www.hechunyu.com/archives/1698221292376