1.背景
因为设备资源的不足,需要将旧业务平台迁移到性能更好的服务器上。相应的ES数据作为业务详情的来源也必须一起迁移。
2.环境
-
跨集群远程迁移
-
ES版本相同(都是星海安装的)
-
目的集群数据结构(mapping模板)已同步
3.reindex说明
reindex是ES自带的一个用于迁移数据的api,支持按照分片大小进行分次迁移。远程迁移时要针对ES的配置文件进行修改。
4.迁移过程
修改目的端 es安装目录下的conf/es_config.ini 文件
reindex.remote.whitelist: ["<原机器ip:9200>"]
修改完成后重启es。
注意: 此时两端的防火墙都应该放开ES的端口通信。
迁移语句:
curl -X POST <目的机器ip>:9200/_reindex/ -d '{"source":{"remote":{"host":"http://<源机器ip>:9200","socket_timeout":"60s","connect_timeout":"60s"},"index":"xxx","size":1000},"dest":{"index":"xxx"}}'
此命令需要在目的集群执行。
source中参数为源集群参数,如源集群host,源集群index(index参数)
其中size需要根据一条数据大小进行设置,如果数据偏小可以设置比较大,数据偏大就设置比较小。
5.脚本
本次我们有300+个index,比较难处理,所以使用shell脚本进行自动化执行。
#!/bin/bash
time1=$(date)
echo $time1
for i in $(cat index_list.txt)
do
echo "-------------------------------------------"
echo $(date)
echo $i
echo "curl -X POST 1.1.1.1:9200/_reindex/ -d '{\"source\":{\"remote\":{\"host\":\"http://1.1.1.2:9200\",\"socket_timeout\":\"60s\",\"connect_timeout\":\"60s\"},\"index\":\"$i\",\"size\":1000},\"dest\":{\"index\":\"$i\"}}'"
curl -X POST 1.1.1.1:9200/_reindex/ -d "{\"source\":{\"remote\":{\"host\":\"http://1.1.1.2:9200\",\"socket_timeout\":\"60s\",\"connect_timeout\":\"60s\"},\"index\":\"$i\",\"size\":1000},\"dest\":{\"index\":\"$i\"}}"
echo "sleep 120s"
sleep 120
done
其中index_list.txt为需要迁移的index名称,每行一个
index_list.txt
xxx_20201123
xxx_20201101
xxx_20200927
xxx_20201005
...