通过elasticdump迁移elasticsearch数据和索引
官方地址:
https://github.com/elasticsearch-dump/elasticsearch-dump
https://www.npmjs.com/package/elasticdump
安装
通过npm安装
# 安装
npm install elasticdump
# 全局安装
npm install elasticdump -g
# 运行
./elasticdump
通过docker安装
docker pull elasticdump/elasticsearch-dump
docker run --rm elasticdump/elasticsearch-dump
使用
elasticdump工作原理是将input
发送到output
,input
和output
都可以是文件或者elasticsearch的URL
elasticdump --help
elasticdump: Import and export tools for elasticsearch
version: 6.65.3
Usage: elasticdump --input SOURCE --output DESTINATION [OPTIONS]
--input # 源(必须的参数)
--input-index # 源索引和类型
--output # 目标(必须的参数)
--output-index # 目标索引和类型
--overwrite # 如果文件存在时则覆盖它
--limit # 限流,对于文件流,限制每个操作移动多少个对象,限制是近似的值(默认:100)
--size # 需要检索多少个对象(默认: -1 -> no limit)
--type # 导出的类型(默认:data,选项:[settings, analyzer, data, mapping, alias, template, component_template, index_template])
--filterSystemTemplates # 是否删除metrics-*-*和logs-*-*系统模板
--templateRegex # 正则表达式用于在传输到output之前的过滤模板
--maxSockets # 可以处理的http并发请求,默认5 [node <= v0.10.x] / Infinity [node >= v0.11.x]
--offset # 偏移量,值为整数。表示希望从--input中要跳过的行数
--httpAuthFile # 使用http认证时,需要指定以ini文件格式的凭据,文件格式为:
user=<username>
password=<password>
--support-big-int # 支持大整数
--maxRows # 按指定行数进行分割
--fileSize # 按指定文件大小分割。通过文件大小分割,有助于缓解内存溢出,分割成多个小文件,在有需要时再进去合并
--s3ForcePathStyle # 强制使用s3风格的URL路径样式
Elasticsearch
格式:{protocol}://{host}:{port}/{index}
例如:http://127.0.0.1:9200/my_Index
文件
格式:{FilePath}
例如:/tmp/dump.json
标准输入输出
格式:stdin/stdout
格式:$
使用示例
将elasticsearch数据导出到文件
# 导出mapping到文件
elasticdump \
--input=http://192.168.8.1:9200/my_index \
--output=/data/my_index_mapping.json \
--type=mapping
# 导出analyzer到文件
elasticdump \
--input=http://192.168.8.1:9200/my_index \
--output=/data/my_index_analyzer.json \
--type=analyzer
# 导出数据文件
elasticdump \
--input=http://192.168.8.1:9200/my_index \
--output=/data/my_index.json \
--type=data
将elasticsearch导出到stdout并进行gzip压缩
# 导出mapping
elasticdump \
--input=http://192.168.8.1:9200/my_index \
--output=$ \
--type=mapping \
| gzip > my_index.mapping.json.gz
# 导出数据
elasticdump \
--input=http://192.168.8.1:9200/my_index \
--output=$ \
--type=data \
| gzip > my_index.mapping.json.gz
将elasticsearch导出到s3存储
# 导出数据
elasticdump \
--s3AccessKeyId "${access_key_id}" \
--s3SecretAccessKey "${access_key_secret}" \
--input=http://192.168.8.1:9200/my_index \
--output="s3://${bucket_name}/my_index.json" \
--type=data
# 将数据从MINIO(兼容S3)导入到ES(使用S3 URL)
elasticdump \
--s3AccessKeyId "${access_key_id}" \
--s3SecretAccessKey "${access_key_secret}" \
--s3ForcePathStyle true \
--s3Endpoint https://production.minio.co \
--input "s3://${bucket_name}/${file_name}.json" \
--output=http://192.168.8.2:9200/my_index
MultiElasticDump
这个包还附带了一个multielasticdump的二进制文件,它是elasctidump的二次封装,它提供了有限的一些选项,它可以大多个索引之前同时运行elasticdump。它运行一个进程,然后fork出n个运行elasticdump的子进程(默认是CPU的数量)
使用
# multielasticdump选项
--parallel # 线程数,默认为CPU核数
--direction # 方向,这里指是要备份还是还原到服务器,参数可以是dump、load,默认值为dump
--match # 用于过滤匹配需要备份的索引正则表达式,示例:匹配所有:^.*$ 匹配以huis-开头的: ^huis-.*$
--input # 源,如果--direction是dump,则该参数必须是elasticsearch的url(例如:http://192.168.8.1:9200),并且--output必须为目录。如果 # --direction是load,则该参数必须是multielasticdump指令备份的文件目录,--output则必须为elasticsearch的url
--output # 目录,该参数应该配合--input使用,根据--direction的不同做相应改变
--ignoreType # 忽略的备份类型,支持6个选项(data,mapping,analyzer,alias,settings,template),多个类型使用逗号隔开,默认忽略analyzer、alias
--includeType # 允许备份的类型,支持6个选项(data,mapping,analyzer,alias,settings,template),多个类型使用逗号隔开
示例
# 导出所有elasticsearch索引及其它所有类型数据到/data/elasticsearch_bak目录
multielasticdump \
--direction=dump \
--parallel=10 \
--match='^.*$' \
--input=http://192.168.8.1:9200 \
--output=/data/elasticsearch_bak
# 导出以huis-开头的索引数据,仅导出数据,忽略掉mapping,analyzer,alias,settings,template
multielasticdump \
--direction=dump \
--match='^huis-.*$' \
--limit=10000 \
--input=http://192.168.8.1:9200 \
--ignoreType='mapping,analyzer,alias,settings,template' \
--output=/data/elasticsearch_bak
#
multielasticdump \
--direction=dump \
--parallel=10 \
--limit=10000 \
--match='^live_tms_order_info-(2020-1[1-2]|2021-0[1-3]).*$' \
--input=http://10.65.10.72:9200 \
--ignoreType='mapping,analyzer,alias,settings,template' \
--output=/data/elastic_back/live_tms_order_info
# 导入备份文件到es
multielasticdump \
--direction=load \
--parallel=30 \
--limit=10000 \
--input=/usr/local/src/migration_es/gc-ga-user-minute-detail \
--output=http://es-cn-6ja20m9xh000alsb2.public.elasticsearch.aliyuncs.com:9200 \
--ignoreType='mapping,analyzer,alias,settings,template' \
--httpAuthFile=/usr/local/src/migration_es/sov.ini
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。