文档首页/ 云搜索服务 CSS/ 最佳实践/ ELasticsearch数据迁移/ 通过读写分离插件实现华为云Elasticsearch集群间数据迁移
更新时间:2024-10-25 GMT+08:00

通过读写分离插件实现华为云Elasticsearch集群间数据迁移

通过CSS服务的读写分离插件可以实现华为云Elasticsearch集群间的数据迁移。

应用场景

7.6.2和7.10.2版本的华为云Elasticsearch集群默认安装了CSS服务的读写分离插件,通过配置读写分离可以实现Elasticsearch集群间的索引数据近实时同步。

通过读写分离插件实现华为云Elasticsearch集群间数据迁移仅适用于源集群和目标集群都是CSS服务的集群。常用于以下场景:

  • 跨地域或跨账号迁移:将其他Region或账号下的Elasticsearch集群迁移到当前集群中。
  • 集群合并:将两个Elasticsearch集群的索引数据合并到一个集群中。

方案架构

图1 迁移流程

通过CSS服务的读写分离插件迁移华为云Elasticsearch集群(源集群)至华为云Elasticsearch(目标集群)的数据迁移流程如图1所示。

  1. 通过读写分离插件建立源集群和目标集群的连接。
  2. 在目标集群配置索引自动同步,实现源集群的数据自动同步到目标集群。同步周期默认是30秒,支持修改。
  3. 查询自动同步状态,确认集群数据是否迁移完成。

更多关于CSS服务的读写分离功能的介绍请参见配置Elasticsearch集群读写分离

方案优势

  • 数据一致性高:利用读写分离的主从复制机制,确保数据在不同分片之间的同步,提高数据的一致性 。
  • 迁移速度快:读写分离的自动同步速度依赖带宽,不受源集群和目标集群的影响,同步快。
  • 实时性可控:读写分离的默认同步周期为30秒,支持修改,可以控制数据迁移的实时性,减少数据同步过程中的延迟 。

约束限制

  • 集群间需要保证网络连通。

    如果源集群和目标集群在不同VPC,则需要先打通VPC网络建立对等连接。具体操作请参见对等连接简介

  • 源集群和目标集群的版本必须一致,都是7.6.2或7.10.2版本。

前提条件

源Elasticsearch集群和目标Elasticsearch集群处于可用状态,且都安装了读写分离插件(Elasticsearch 7.6.2和7.10.2版本默认安装了读写分离插件)。

操作步骤

  1. 获取Elasticsearch集群信息,用于配置迁移任务。

    表1 需要获取的Elasticsearch集群信息

    集群来源

    要获取的信息

    获取方式

    源集群

    华为云Elasticsearch集群

    • 源集群的访问地址
    • 访问源集群的用户名和密码(仅安全集群涉及)
    • 获取集群的访问地址请参见1.c
    • 用户名和密码请联系服务管理员获取。

    自建Elasticsearch集群

    • 源集群的公网访问地址
    • 访问源集群的用户名和密码(仅安全集群涉及)

    联系服务管理员获取。

    第三方Elasticsearch集群

    • 源集群的访问地址
    • 访问源集群的用户名和密码(仅安全集群涉及)

    联系服务管理员获取。

    目标集群

    华为云Elasticsearch集群

    • 目标集群的访问地址
    • 访问目标集群的用户名和密码(仅安全集群涉及)
    • 获取访问地址请参见1.c
    • 用户名和密码请联系服务管理员获取。
    1. 登录云搜索服务管理控制台
    2. 在左侧菜单栏选择集群管理 > Elasticsearch
    3. 在Elasticsearch集群列表,获取集群的访问地址。
      图2 获取集群信息

  2. 登录目标Elasticsearch集群的Kibana操作页面。

    1. 在CSS服务的Elasticsearch集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
    2. 单击左侧导航栏的“Dev Tools”进入操作页面。

  3. 通过读写分离插件,在目标集群建立与源集群的连接。

    执行如下命令,在目标集群配置源集群的信息。

    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”时,表示配置成功。

  4. 在目标集群配置索引自动同步,实现源集群的数据自动同步到目标集群。

    执行如下命令,创建匹配模式同步索引,将源集群中匹配的索引同步到目标集群中。

    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”

  5. 在目标集群查询集群的自动同步状态,同步周期默认是30秒。

    执行如下命令,获取匹配索引的同步状态。
    GET auto_sync/stats

    当返回结果中,“failed_count”“0”时,表示同步完成。

  6. 集群同步完成后,检查目标Elasticsearch集群和源集群数据的一致性。

    例如,分别在源集群和目标集群登录Kibana,进入Dev Tool,执行GET cat/indices命令,对比两者的索引信息是否一致。