本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
将腾讯云Elasticsearch(以下简称ES)数据迁移到阿里云ES,除了可以使用ES快照机制实现数据搬迁外,也可以通过阿里云Logstash实现,本文介绍如何通过阿里云Logstash将索引数据从腾讯云ES迁移至阿里云ES中。
场景说明
本文的操作流程同样适用于跨账号、跨地域的阿里云Elasticsearch之间迁移数据的场景。在配置时,将input中的腾讯云Elasticsearch的配置替换为源阿里云Elasticsearch的配置即可。
在迁移过程中,Logstash需要连接公网才能与腾讯云Elasticsearch互通,因此会涉及到Logstash连接公网的相关操作。对于跨账号、跨地域的阿里云Elasticsearch之间迁移数据的场景,同样需要配置Logstash与公网连通,因此在此类场景下,您可以参考本文档的流程。
操作流程
创建阿里云Elasticsearch实例、Logstash实例和腾讯云Elasticsearch实例、开启阿里云Elasticsearch实例的自动创建索引功能、搭建腾讯云代理服务器。
选择兼容的腾讯云Elasticsearch实例、阿里云Elasticsearch实例和Logstash实例进行迁移。
通过配置文件管理方式创建并配置Logstash管道,配置时设置input为腾讯云Elasticsearch,output为阿里云Elasticsearch。
说明您也可以使用自建Logstash,需要在服务器上安装JDK(1.8及以上版本)以及相应版本的Logstash,然后在Logstash的conf下配置YML文件,并启动服务。
在Kibana中使用
GET /_cat/indices?v
,查看索引是否迁移成功。
准备工作
创建阿里云Elasticsearch实例,并开启自动创建索引功能。
具体操作步骤请参见创建阿里云Elasticsearch实例和快速访问与配置。
创建阿里云Logstash实例。
具体操作步骤请参见创建阿里云Logstash实例。
由于阿里云Logstash实例部署在专有网络VPC(Virtual Private Cloud)下,但在迁移过程中,Logstash需要连接公网才能与腾讯云Elasticsearch互通,因此需要通过配置NAT网关实现与公网连通,详情请参见配置NAT公网数据传输。
说明对于自建的Logstash,需要购买与阿里云Elasticsearch在同一VPC下的ECS实例(已符合条件的ECS不需要重复购买,需要绑定弹性公网IP)。
创建腾讯云Elasticsearch实例,并搭建腾讯云代理服务器。
由于腾讯云Elasticsearch不支持通过公网直接访问,因此需要准备cvm服务器搭建nginx代理,详情请参见通过外网访问腾讯云Elasticsearch集群。
步骤一:选取迁移方案
由于腾讯云Elasticsearch版本与阿里云Elasticsearch版本不一致,因此需要先选择兼容的版本进行迁移,本文支持的版本方案如下(其他方案不保证兼容):
腾讯云Elasticsearch | 阿里云Elasticsearch |
腾讯云Elasticsearch 5.6.4 | 迁移至阿里云Elasticsearch的版本要求:自建Logstash 5.6.x、阿里云Elasticsearch 5.5.6。 说明
|
腾讯云Elasticsearch 6.4.3 | 迁移至阿里云Elasticsearch的版本有如下两种选择:
说明
|
建议您在大版本内进行数据迁移。关于Logstash版本选取详情,请参见Support Matrix。
如果您使用的是其他方案,可参见产品兼容性判断是否存在兼容性问题。如果存在,可升级实例版本或新购实例。
步骤二:创建并配置Logstash管道
- 进入阿里云Elasticsearch控制台的Logstash页面。
- 进入目标实例。
- 在顶部菜单栏处,选择地域。
- 在Logstash实例中单击目标实例ID。
在左侧导航栏,单击管道管理。
单击创建管道。
在创建管道任务页面,输入管道ID并配置管道。
本文使用的管道配置如下。
input { elasticsearch { hosts => "http://xxxxxxxxx:9200" user => "elastic" index => "*" password => "xxxxxx" docinfo => true } } output { elasticsearch { hosts => "http://xxxxxxx.elasticsearch.aliyuncs.com:9200" user => "elastic" password => "xxxxxx" index => "%{[@metadata][_index]}" document_type => "%{[@metadata][_type]}" document_id => "%{[@metadata][_id]}" } }
参数
说明
hosts
Elasticsearch服务的访问地址。input中为
http://<腾讯云代理服务的公网地址>:<端口>
;output中为http://<阿里云Elasticsearch实例ID>.elasticsearch.aliyuncs.com:9200
。user
访问Elasticsearch服务的用户名,默认为elastic。
password
对应用户的密码。对于阿里云Elasticsearch,elastic用户的密码在创建实例时设定,如果忘记可进行重置,重置密码的注意事项和操作步骤请参见重置实例访问密码。
index
input中为待迁移的索引名,设置为*表示同步全部索引;output中为迁移后的索引名,设置为%{[@metadata][_index]}表示匹配元数据中的index,即迁移后的索引名与源索引名相同。
document_type
迁移后索引的类型。设置为%{[@metadata][_type]}表示匹配元数据中的type,即迁移后索引的类型与源索引的类型相同。
document_id
迁移后文档的ID。设置为%{[@metadata][_id]}表示匹配元数据中的id,即迁移后文档的ID与源文档的ID相同。
docinfo
设置为true,Logstash将会提取Elasticsearch文档的元信息,例如index、type和id。
更多Config配置详情请参见Logstash配置文件说明。
以上配置将源Elasticsearch集群的所有索引同步到目标集群中,您也可以设置只同步指定的索引,input配置如下。
input { elasticsearch { hosts => "http://xxxxxxxx:9200" user => "elastic" index => "alicloudtest" password => "xxxxxxx" query => '{ "query":{ "query_string": { "query": "*" } } }' docinfo => true }
Elasticsearch input插件可以根据配置的查询语句,从Elasticsearch集群读取文档数据,适用于批量导入测试日志等操作。默认读取完数据后,同步动作会自动关闭,而阿里云Logstash需保证进程一直运行,关闭后将会重新启动进程,导致某些单一任务场景(如logstash input es)存在重复写数据的情况。设置长时间范围的定时任务可绕过写重复的情况,如每年3月5日13点20分触发任务执行,执行完第一次任务后停止管道运行,可避免重复写情况。可以通过cron语法配合schedule参数实现,详情请参见Logstash官网Scheduling介绍。
例如,设置3月5日13点20分执行任务:
schedule => "20 13 5 3 *"
单击下一步,配置管道参数。
参数
说明
管道工作线程
并行执行管道的Filter和Output的工作线程数量。当事件出现积压或CPU未饱和时,请考虑增大线程数,更好地使用CPU处理能力。默认值:实例的CPU核数。
管道批大小
单个工作线程在尝试执行Filter和Output前,可以从Input收集的最大事件数目。较大的管道批大小可能会带来较大的内存开销。您可以设置LS_HEAP_SIZE变量,来增大JVM堆大小,从而有效使用该值。默认值:125。
管道批延迟
创建管道事件批时,将过小的批分派给管道工作线程之前,要等候每个事件的时长,单位为毫秒。默认值:50ms。
队列类型
用于事件缓冲的内部排队模型。可选值:
MEMORY:默认值。基于内存的传统队列。
PERSISTED:基于磁盘的ACKed队列(持久队列)。
队列最大字节数
请确保该值小于您的磁盘总容量。默认值:1024 MB。
队列检查点写入数
启用持久性队列时,在强制执行检查点之前已写入事件的最大数目。设置为0,表示无限制。默认值:1024。
警告配置完成后,需要保存并部署才能生效。保存并部署操作会触发实例重启,请在不影响业务的前提下,继续执行以下步骤。
单击保存或者保存并部署。
保存:将管道信息保存在Logstash里并触发实例变更,配置不会生效。保存后,系统会返回管道管理页面。可在管道列表区域,单击操作列下的立即部署,触发实例重启,使配置生效。
保存并部署:保存并且部署后,会触发实例重启,使配置生效。
步骤三:验证结果
登录目标阿里云Elasticsearch实例的Kibana控制台。
具体步骤请参见登录Kibana控制台。
在左侧导航栏,单击Dev Tools(开发工具)。
在Console中执行
GET /_cat/indices?v
命令,查询索引是否迁移成功。
相关文档
使用ES快照机制实现将腾讯云ES数据迁移到阿里云ES,请参见将Amazon OpenSearch Service中的Elasticsearch索引迁移至阿里云。