通过读写分离插件实现华为云Elasticsearch集群间数据迁移
通过CSS服务的读写分离插件可以实现华为云Elasticsearch集群间的数据迁移。
应用场景
7.6.2和7.10.2版本的华为云Elasticsearch集群默认安装了CSS服务的读写分离插件,通过配置读写分离可以实现Elasticsearch集群间的索引数据近实时同步。
通过读写分离插件实现华为云Elasticsearch集群间数据迁移仅适用于源集群和目标集群都是CSS服务的集群。常用于以下场景:
- 跨地域或跨账号迁移:将其他Region或账号下的Elasticsearch集群迁移到当前集群中。
- 集群合并:将两个Elasticsearch集群的索引数据合并到一个集群中。
方案架构
通过CSS服务的读写分离插件迁移华为云Elasticsearch集群(源集群)至华为云Elasticsearch(目标集群)的数据迁移流程如图1所示。
- 通过读写分离插件建立源集群和目标集群的连接。
- 在目标集群配置索引自动同步,实现源集群的数据自动同步到目标集群。同步周期默认是30秒,支持修改。
- 查询自动同步状态,确认集群数据是否迁移完成。
更多关于CSS服务的读写分离功能的介绍请参见配置Elasticsearch集群读写分离。
方案优势
- 数据一致性高:利用读写分离的主从复制机制,确保数据在不同分片之间的同步,提高数据的一致性 。
- 迁移速度快:读写分离的自动同步速度依赖带宽,不受源集群和目标集群的影响,同步快。
- 实时性可控:读写分离的默认同步周期为30秒,支持修改,可以控制数据迁移的实时性,减少数据同步过程中的延迟 。
性能影响
使用读写分离迁移集群的核心在于通过底层文件复制来实现数据同步,此方法绕开了Elasticsearch的外部读写API,因此对源集群的性能影响被降至最低。
约束限制
源集群和目标集群的版本必须一致,都是7.6.2或7.10.2版本。
前提条件
- 源Elasticsearch集群和目标Elasticsearch集群处于可用状态,且都安装了读写分离插件(Elasticsearch 7.6.2和7.10.2版本默认安装了读写分离插件)。
- 集群间需要保证网络连通。
如果源集群和目标集群在不同VPC,则需要先打通VPC网络建立对等连接。具体操作请参见对等连接简介。
操作步骤
- 获取Elasticsearch集群信息,用于配置迁移任务。
表1 需要获取的Elasticsearch集群信息 集群来源
要获取的信息
获取方式
源集群
华为云Elasticsearch集群
- 源集群的访问地址
- 访问源集群的用户名和密码(仅安全集群涉及)
- 获取集群的访问地址请参见1.c。
- 用户名和密码请联系服务管理员获取。
自建Elasticsearch集群
- 源集群的公网访问地址
- 访问源集群的用户名和密码(仅安全集群涉及)
联系服务管理员获取。
第三方Elasticsearch集群
- 源集群的访问地址
- 访问源集群的用户名和密码(仅安全集群涉及)
联系服务管理员获取。
目标集群
华为云Elasticsearch集群
- 目标集群的访问地址
- 访问目标集群的用户名和密码(仅安全集群涉及)
- 获取访问地址请参见1.c。
- 用户名和密码请联系服务管理员获取。
- 登录目标Elasticsearch集群的Kibana操作页面。
- 在CSS服务的Elasticsearch集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
- 单击左侧导航栏的“Dev Tools”进入操作页面。
- 通过读写分离插件,在目标集群建立与源集群的连接。
执行如下命令,在目标集群配置源集群的信息。
PUT /_cluster/settings { "persistent" : { "cluster" : { "remote.rest" : { "leader1" : { "seeds" : [ "http://10.0.0.1:9200", "http://10.0.0.2:9200", "http://10.0.0.3:9200" ] , "username": "elastic", "password": "*****" } } } } }
表2 请求体参数说明 参数名
说明
leader1
配置任务的名称,由用户自定义,在后续读写分离配置时会用到该名称。
seeds
源集群的访问地址。当集群开启HTTPS访问时,URI schema需要对应使用https。
username
源集群的用户名,仅主集群是安全集群时才需要配置。
password
源集群的密码,仅主集群是安全集群时才需要配置。
当返回结果中,“acknowledged”为“true”时,表示配置成功。
- 在目标集群配置索引自动同步,实现源集群的数据自动同步到目标集群。
执行如下命令,创建匹配模式同步索引,将源集群中匹配的索引同步到目标集群中。
PUT auto_sync/pattern/pattern1 { "remote_cluster": "leader1", "remote_index_patterns": "log*", "local_index_pattern": "{{remote_index}}", "apply_exist_index": true }
表3 请求体参数说明 参数名
说明
pattern1
自定义同步集群配置的pattern名字,用于区分多个不同的匹配模式。
remote_cluster
配置任务的名称,例如上一步的“leader1”。
remote_index_patterns
源集群待同步索引模式,支持通配符“*”。
local_index_pattern
同步到目标集群的索引模式,支持模板替换。例如取值为“{{remote_index}}”时,待同步索引为“log1”,同步过来的索引为“log1”。
apply_exist_index
是否同步主集群上已存在的索引,默认为“true”。
- 在目标集群查询集群的自动同步状态,同步周期默认是30秒。
执行如下命令,获取匹配索引的同步状态。
GET auto_sync/stats
当返回结果中,“failed_count”为“0”时,表示同步完成。
- 集群同步完成后,检查目标Elasticsearch集群和源集群数据的一致性。
例如,分别在源集群和目标集群登录Kibana,进入Dev Tool,执行GET cat/indices命令,对比两者的索引信息是否一致。