基于Logstash的Elasticsearch数据迁移方案
1、背景信息
2、数据迁移前置条件
基于logstash的增量方案,无法适用,因为增量的数据同步可能还得需要date的时间类型,但是目前趣街的关于时间的字段均是keyword类型,甚至可能有一些索引没有关于时间的字段。
- 对内对客的所有索引新增时间戳字段
- 使用ES的应用程序均需要改造
- 后续在创建新索引的时候,自动添加时间戳字段,现有的索引,我们运维通过API进行新增
- doc文档发生变动后,需要同步维护时间戳字段,将其更新为当前时间,用于logstash数据采集
3、环境与工具准备
3.1、阿里侧环境与实例准备
3.2、自建侧环境与实例准备
4、迁移索引元数据(设置和映射)
- 在进行数据迁移时,Logstash会帮助您自动创建索引,但是自动创建的索引可能与您待迁移的索引存在差异,导致迁移前后数据的格式不一致。
4.1、创建indiceCreate.py迁移脚本
1 | ## 分片数默认和源集群索引保持一致,可根据生产实际节点数修改数值。 |
1 | vim indiceCreate.py |
4.2、执行Python脚本,创建目标索引
1 | /usr/bin/python indiceCreate.py |
4.3、查看目标ES的索引是否创建
1 | curl http://10.60.2.31:9200/traderecord/_mapping?pretty |
提示:脚本简单改造,支持全量同步和指定索引同步
5、迁移全量数据
logstash会占用部分资源,建议在闲置资源侧上部署logstash服务;
5.1、logstash安装与配置
- 下载logstash,需根据es版本下载对应的logstash
1
2
3
4
5su - sspusr
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.tar.gz
tar xzvf logstash-7.3.2.tar.gz
cd /home/sspusr/logstash-7.3.2
mkdir -pv {logs,data} config/conf.d
5.2、全量pipeline文件制作
- vim /home/sspusr/logstash-7.3.2/config/conf.d/inyusyses_outalies.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45input{
elasticsearch{
# 源端ES地址。
hosts => ["http://192.168.36.59:9200"]
# 安全集群配置登录用户名密码。
#user => "xxxxxx"
#password => "xxxxxx"
# 需要迁移的索引列表,多个索引以英文以逗号(,)分隔。
index => "traderecord_202203"
# 以下三项保持默认即可,包含线程数和迁移数据大小和Logstash JVM配置相关。
#docinfo=>true
#slices => 5
#size => 5000
# 定时任务,以下配置表示每分钟执行一次
schedule => "* * * * *"
scroll => "5m"
docinfo=>true
size => 5000
}
}
filter {
# 去掉一些Logstash自己加的字段。
mutate {
remove_field => ["@timestamp", "@version"]
}
}
output{
elasticsearch{
# 目标端ES地址,可在阿里云Elasticsearch实例的基本信息页面获取。
hosts => ["http://10.60.2.31:9200"]
# 安全集群配置登录用户名密码。
#user => "elastic"
#password => "xxxxxx"
# 目标端索引名称,以下配置表示索引与源端保持一致。
index => "%{[@metadata][_index]}"
# 目标端索引type,以下配置表示索引类型与源端保持一致。
document_type => "%{[@metadata][_type]}"
# 目标端数据的id,如果不需要保留原id,可以删除以下这行,删除后性能会更好。
document_id => "%{[@metadata][_id]}"
ilm_enabled => false
manage_template => false
}
}
5.3、修改logstash.yml配置文件
- vim /home/sspusr/logstash-7.3.2/config/logstash.yml
1
2path.data: /home/sspusr/logstash-7.3.2/data
path.logs: /home/sspusr/logstash-7.3.2/logs
5.4、启动logstash服务
1 | #启动命令 |
5.5、查看数据迁移结果
6、迁移增量数据
注意:需增量迁移的索引,必须有时间戳字段,类型为date,且不支持删除数据同步;