zl程序教程

您现在的位置是:首页 >  工具

当前栏目

elasticdump备份迁移ES集群数据——筑梦之路

2023-09-14 09:09:36 时间
#安装基础环境

#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