elasticdump备份迁移ES集群数据

#安装基础环境
 
#1. 下载官方安装包并拷贝到离线机器上,官方下载地址:https://nodejs.org/en/download/ 下载xz文件,解压后是tar文件
#2. 解压文件,相应目录例如/opt/
tar -xf node-v8.1.0-linux-x64.tar
#3. 建立文件链接使npm和node命令到系统命令
sudo ln -s /opt/node-v8.1.0-linux-x64/bin/node /usr/bin/node
sudo ln -s /opt/node-v8.1.0-linux-x64/bin/npm /usr/bin/npm
#4. 检查是否安装成功
node -v
npm -v
 
#安装elasticdump
 
#1. 找一个同样环境的联网机器,用来拷贝Elasticdump模块缓存
#2. 安装好npm和node以后,安装elasticdump,执行:
npm install elasticdump -g
#3. 安装完成后输入命令查看缓存目录位置
npm config get cache
#4. 将.npm 打包并拷贝出来,传输到离线机器上,然后执行:
npm install --cache ./npm-cache --optional --cache-min 99999999999 --shrinkwrap false elasticdump
#5. 如果报错上边指令路径不对,执行:
npm install --cache /root/.npm --optional --cache-min 99999999999 --shrinkwrap false elasticdump
#6. 验证
elasticdump --help
 
#使用
 
 
----导出
 
elasticdump --input=http://13.133.15.5:9200/motorvehicle_20200129 --output=/data3/es_bakup/motorvehicle_20200129.json --size 10
 
elasticdump --input=http://13.133.15.5:9200/face_20200129 --size 80000 --output=$ | gzip > /data3/es_bakup/face_20200129.json.gz
 
elasticdump --input=http://13.133.15.5:9200/motorvehicle_20200118 --output=/home/motorvehicle_20200118.json --searchBody '{"query":{"match":{"AlpTime":"20200119000822"}}}'
 
elasticdump --size 500000 --input=http://13.133.15.5:9200/motorvehicle_20200119 --output=$ | gzip > /home/motorvehicle_20200119.json.gz
 
elasticdump --input=http://13.133.15.5:9200/motorvehicle_20200118 --output=/home/motorvehicle_20200118.json --searchBody '{"size":20,"query": {"bool": {"must": [{"match":{"fullcarno":{"query":"冀A","operator":"and"}}}]}}}'
 
------导入
 
elasticdump --input= /home/es_bakup/motorvehicle_20200128.json --output=http://localhost:9200/motorvehicle_20200128
 
 
----------------------------------------------------------------------------------------
第一步.安装Node和Npm
 
1.下载官方安装包并拷贝到离线机器上 官方下载地址:https://nodejs.org/en/download/ 下载xz文件,解压后是tar文件
 
2.解压文件:tar -xf node-v8.1.0-linux-x64.tar  相应目录例如/opt/
 
3.建立文件链接使npm和node命令到系统命令
 
sudo ln -s /opt/node-v8.1.0-linux-x64/bin/node /usr/bin/node
 
sudo ln -s /opt/node-v8.1.0-linux-x64/bin/npm /usr/bin/npm
 
4.检查是否安装成功
 
node-v
 
npm-v
 
第二步 安装Elasticdump
 
找一个同样环境的联网机器,虚拟机也可以,用来拷贝Elasticdump模块缓存
 
安装好npm和node以后,npm install elasticdump -g
 
安装完成后输入命令查看缓存目录位置  npm config get cache
 
将.npm 打包并拷贝出来
 
传输到离线机器上输入命令
 
npm install --cache ./npm-cache --optional --cache-min 99999999999 --shrinkwrap false elasticdump 
 
安装完成
 
输入 elasticdump --help
导出文件打包
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=$ \
  | gzip > /data/my_index.json.gz
 
备份指定条件的数据
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=query.json \
  --searchBody="{\"query\":{\"term\":{\"username\": \"admin\"}}}"
 
导入数据
elasticdump \
  --input=./student_template.json \
  --output=http://10.0.0.121:9200 \
  --type=template
  
elasticdump \
  --input=./student_mapping.json \
  --output=http://10.0.0.121:9200 \
  --type=mapping
  
elasticdump \
  --input=./student_data.json \
  --output=http://10.0.0.121:9200 \
  --type=data
  
elasticdump \
  --input=./student_analyzer.json \
  --output=http://10.0.0.121:9200 \
  --type=analyzer
 
备份指定索引的脚本
cat es-bak-index.sh
#!/bin/bash
# 备份集群节点 IP 
host_ip=10.0.0.121
index_name='
student
teacher
abc
'
for index in `echo $index_name`
do
    echo "start input index ${index}"
    elasticdump --input=http://${host_ip}:9200/${index} --output=/data/${index}_alias.json --type=alias &> /dev/null
    elasticdump --input=http://${host_ip}:9200/${index} --output=/data/${index}_analyzer.json --type=analyzer &> /dev/null
    elasticdump --input=http://${host_ip}:9200/${index} --output=/data/${index}_data.json --type=data &> /dev/null
    elasticdump --input=http://${host_ip}:9200/${index} --output=/data/${index}_alias.json --type=alias &> /dev/null
    elasticdump --input=http://${host_ip}:9200/${index} --output=/data/${index}_template.json --type=template &> /dev/null
done
 
导入指定索引
cat es-imp-index.sh
#!/bin/bash
# 导入集群节点 IP 
host_ip=10.0.0.121
index_name='
abc
student
'
for index in `echo $index_name`
do
    echo "start input index ${index}"
    elasticdump --input=/data/${index}_alias.json --output=http://${host_ip}:9200/${index} --type=alias &> /dev/null
    elasticdump --input=/data/${index}_analyzer.json --output=http://${host_ip}:9200/${index} --type=analyzer &> /dev/null
    elasticdump --input=/data/${index}_data.json --output=http://${host_ip}:9200/${index} --type=data &> /dev/null
    elasticdump --input=/data/${index}_template.json --output=http://${host_ip}:9200/${index} --type=template &> /dev/null
done
 
备份全部索引为文件
cat es-back-all.sh
ES=http://10.0.0.121:9200
ED=/data
 
mkdir /data -p
 
for index in `curl -s -XGET $ES/_cat/indices?h=i`
do
    # settings, analyzer, data, mapping, alias, template
    echo "elasticdump --input=$ES/$index --output=$ED/$index"
    elasticdump --input=$ES/$index --output=${ED}/${index}_setting.json --limit=10000 --type=settings --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=${ED}/${index}_analyzer.json --limit=10000 --type=analyzer --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=${ED}/${index}_alias.json --limit=10000 --type=alias --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index  --output=${ED}/${index}_template.json --limit=10000 --type=template --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=${ED}/${index}_mapping.json --limit=10000 --type=mapping --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=${ED}/${index}_data.json --limit=10000 --type=data --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    echo ""
done
 
在线迁移
#!/bin/bash
# 源 ES 集群地址
ES=http://192.168.200.x:9200
# 目标 ES 集群地址
ED=http://192.168.100.x:9200
 
for index in `curl -s -XGET $ES/_cat/indices?h=i`
do
    # settings, analyzer, data, mapping, alias, template
    echo "elasticdump --input=$ES/$index --output=$ED/$index"
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=settings --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=analyzer --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=alias --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=template --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=mapping --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    elasticdump --input=$ES/$index --output=$ED/$index --limit=10000 --type=data --searchBody '{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'
    echo ""
done
posted @ 2022-11-09 14:40  聆听雨66  阅读(196)  评论(0)    收藏  举报