3种常用的Elasticsearch数据迁移方案

如果准备将自建的 elasticsearch 迁移上云,或者的迁移到其他es集群内,可以根据自己的业务需要选择合适的迁移方案。如果业务可以停服或者可以暂停写操作,可以使用以下几种方式进行数据迁移:
cos 快照,即cloud object storage logstash elasticsearch-dump   各种迁移方式的对比如下:
迁移方式 适用场景
cos 快照 数据量大的场景(gb、tb、pb 级别)对迁移速度要求较高的场景
logstash 迁移全量或增量数据,且对实时性要求不高的场景需要对迁移的数据通过 es query 进行简单的过滤的场景需要对迁移的数据进行复杂的过滤或处理的场景版本跨度较大的数据迁移场景,如 5.x 版本迁移到 6.x 版本或 7.x 版本
elasticsearch-dump 数据量较小的场景
1cos 快照 基于 cos 快照的迁移方式是使用 es 的 snapshot api 接口进行迁移,基本原理就是从源 es 集群创建索引快照,然后在目标 es 集群中进行恢复。通过 snapshot 方式进行数据迁移时,特别需要注意 es 的版本问题:
目标 es 集群的主版本号(如5.6.4中的5为主版本号)要大于等于源 es 集群的主版本号。1.x 版本的集群创建的快照不能在 5.x 版本中恢复。 在源 es 集群中创建 repository 创建快照前必须先创建 repository 仓库,一个 repository 仓库可以包含多份快照文件,repository 主要有以下几种类型。
fs:共享文件系统,将快照文件存放于文件系统中。 url:指定文件系统的 url 路径,支持协议:http、https、ftp、file、jar。 s3:aws s3 对象存储,快照存放于 s3 中,以插件形式支持,安装该插件请参考 repository-s3[1]。 hdfs:快照存放于 hdfs 中,以插件形式支持,安装该插件请参考 repository-hdfs[2]。 cos:快照存放于腾讯云cos对象存储中,以插件形式支持,安装该插件请参考 cos-repository[3]。 如果需要从自建 es 集群迁移至腾讯云的 es 集群,可以直接使用 cos 类型仓库。但需要先在自建 es 集群上安装 cos-repository 插件(安装插件后需要重启集群才能使用),先把自建 es 集群中的数据先备份到 cos,然后在腾讯云上的 es 集群中恢复出来,以完成数据的迁移。
如果自建 es 的集群不方便安装 cos-repository 插件,但是已经安装 repository-s3 或者 repository-hdfs 插件,则可以先把数据备份到 s3 或者 hdfs 中,然后把 s3 或者 hdfs 中备份好的文件上传到腾讯云 cos 中,之后在腾讯云上的集群中进行恢复。
通过 cos 快照进行数据迁移时,需要先创建 cos 仓库,您可以通过如下命令创建仓库:
put _snapshot/my_cos_backup{ type: cos, settings: { app_id: xxxxxxx, access_key_id: xxxxxx, access_key_secret: xxxxxxx, bucket: xxxxxx, region: ap-guangzhou, compress: true, chunk_size: 500mb, base_path: / }} app_id:腾讯云账号 appid。 access_key_id:腾讯云 api 密钥 secretid。 access_key_secret:腾讯云 api 密钥 secretkey。 bucket:cos bucket 名字,不带 appid 后缀的 bucket 名。 region:cos bucket 地域,必须与 es 集群同地域。 base_path:备份目录。 在源 es 集群中创建 snapshot 调用 snapshot api 创建快照以备份索引数据,创建快照时可以指定只对部分索引进行备份,也可以备份所有的索引,具体的 api 接口参数可以查阅 官方文档。
备份所有索引 将源 es 集群中的所有索引备份到 my_cos_backup 仓库下,并命名为 snapshot_1:
put _snapshot/my_cos_backup/snapshot_1 这个命令会立刻返回,并在后台异步执行直到结束。如果希望创建快照命令阻塞执行,可以添加 wait_for_completion 参数:
put _snapshot/my_cos_backup/snapshot_1?wait_for_completion=true 命令执行的时间与索引大小相关。
备份指定索引 您可以在创建快照的时候指定要备份的索引:
put _snapshot/my_cos_backup/snapshot_2{ indices: index_1,index_2} 参数 indices 的值为多个索引的时候,需要用,隔开且不能有空格。
查看快照状态 通过以下命令检查快照是否备份完成,返回结果中的state字段为success则说明快照已经备份成功:
get _snapshot/my_cos_backup/snapshot_1 在目标 es 集群中创建 repository 在目标 es 集群中创建仓库和在源 es 集群中创建仓库完全相同。
从快照恢复 将快照中备份的所有索引都恢复到 es 集群中:
post _snapshot/my_cos_backup/snapshot_1/_restore 如果 snapshot_1 包括5个索引,则这5个索引都会被恢复到 es 集群中。您还可以使用附加的选项对索引进行重命名。该选项允许您通过模式匹配索引名称,并通过恢复进程提供一个新名称。如果您想在不替换现有数据的前提下,恢复旧数据来验证内容或进行其他操作,则可以使用该选项。从快照里恢复单个索引并提供一个替换的名称:
post /_snapshot/my_cos_backup/snapshot_1/_restore{ indices: index_1, rename_pattern: index_(.+), rename_replacement: restored_index_$1} indices:只恢复 index_1 索引,忽略快照中存在的其他索引。 rename_pattern:查找所提供的模式能匹配上的正在恢复的索引。 rename_replacement:将匹配的索引重命名成替代的模式。 查看索引恢复状态 您可以通过调用 _recovery api,查看指定索引恢复的进度:
get index_1/_recovery 另外可以通过调用以下 api,查看指定索引的状态,返回结果中 status 为 green,则说明索引已经完全恢复:
get _cluster/health/index_1 2logstash logstash 支持从一个 es 集群中读取数据然后写入到另一个 es 集群,因此可以使用 logstash 进行数据迁移,使用 logstash 进行迁移前,需要注意以下几点:
需要在和腾讯云上的 es 集群相同的 vpc 下创建 cvm,部署 logstash,同时保证该 cvm 能够访问到源 es 集群。 用于部署 logstash 的 cvm 最好选择比较高的配置,例如 cpu 为16核,内存为32gb。 logstash 应该和目标 es 集群的主版本号相同,例如目标 es 集群为6.8.2版本,则 logstash 也需要使用6.8版本。 需要特别注意索引 type 的问题,因为 es 的不同版本对索引 type 的约束不同,跨大版本迁移 es 集群时可能出现因为索引的 type 而导致写入目标集群失败等的问题。具体可参考 logstash-output-elasticsearch 插件中对 document_type 参数的说明。  
一个常用的使用 logstash 进行跨集群数据迁移的配置文件如下:
input { elasticsearch { hosts => 1.1.1.1:9200 index => * docinfo => true size => 5000 scroll => 5m }}output { elasticsearch { hosts => [http://2.2.2.2:9200] user => elastic password => your_password index => %{[@metadata][_index]} document_type => %{[@metadata][_type]} document_id => %{[@metadata][_id]} }} 上述配置文件将源 es 集群的所有索引同步到目标集群中,同时也可以设置只同步指定的索引,利用 logstash 进行迁移的更多功能可查阅 logstash-input-elasticsearch 和 logstash-output-elasticsearch[4]。
3elasticsearch-dump elasticsearch-dump 是一款开源的 es 数据迁移工具,github 地址[5]。
安装 elasticsearch-dump
elasticsearch-dump 使用 node.js 开发,可使用 npm 包管理工具直接安装:
npm install elasticdump -g 主要参数说明
--input: 源地址,可为 es 集群 url、文件或 stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index}--input-index: 源 es 集群中的索引--output: 目标地址,可为 es 集群地址 url、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index}--output-index: 目标 es 集群的索引--type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias 如果集群有安全认证,可以参照下面的方法使用 reindex 集群鉴权。在对应的 http 后面,添加 user:password@ 参考样例 elasticsearch-dump --input=http://192.168.1.2:9200/my_index --output=http://user:password@192.168.1.2:9200/my_index --type=data。
迁移单个索引
以下操作通过 elasticdump 命令将集群172.16.0.39中的 companydatabase 索引迁移至集群172.16.0.20。
第一条命令先将索引的 settings 先迁移,如果直接迁移 mapping 或者 data 将失去原有集群中索引的配置信息如分片数量和副本数量等,当然也可以直接在目标集群中将索引创建完毕后再同步 mapping 与 data。
elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settingselasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mappingelasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data 迁移所有索引
以下操作通过 elasticdump 命令将集群172.16.0.39中的所有索引迁移至集群172.16.0.20。
此操作并不能迁移索引的配置,例如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据。


i.MX RT1024:移植MODBUS TCP协议栈教程
realme X50 Pro国行发布会将仅有3分钟 过程将极为简单
升压型充电管理芯片FS4062介绍
ColorOS 6带来触控屏幕优化技术
仿生无人机优势愈加明显 软硬件一体化加大市场需求
3种常用的Elasticsearch数据迁移方案
强大的JTAG边界扫描2-BSDL文件
中国新能源汽车行业再迎政策利好,推进标准对接和数据共享
飞利浦S396怎么样 值不值得买
海信智慧别墅新方案,强稳定深智控别墅更有范
启英泰伦发布第二代语音AI芯片,首批10万片已售罄,语音模组最低14.99元!
学习模拟电路应该具备的能力
小米Note3、小米Max2最新消息:雷爸爸耍猴不要紧,小米Note3、小米Max2升级来袭
中国电信以及华为在新的5G千兆网络建设方向上提出了一致的方向
未来传感技术带来优质的数据将更好地保证人工智能进行机器学习
NE555+TC4022数字转速表,ne555+TC4022 Speed counter
金立GN9007拆机图解
采用VC++和Matlab混合编程搭建基于HMM的语音识别的实验平台
两个NPN三极管搭建的直流降压稳压电源输出电压是多少?怎么算的
三星推出T55系列显示器 曲率达到前所未有的1000R