如何使用 INFINI 迁移功能

如何使用 INFINI 迁移功能 #

简介 #

本文将介绍如何使用 INFINI Console 和 INFINI Gateway 来迁移 Elasticsearch 索引数据。

准备 #

  • 下载并安装最新版 INFINI Console (版本要求 0.7 及以上)
  • 下载并安装最新版的 INFINI Gateway (版本要求 1.9 及以上)
  • 两个 Elasticsearch 集群

Gateway 迁移配置 #

配置文件名为 migration.yml

path.data: data
path.logs: log
progress_bar.enabled: false
stats.no_buffer: true

elasticsearch:
  - name: task_from
    enabled: true
    schema: http
    hosts:
      - 192.168.3.6:9200
    traffic_control: #global traffic control
      max_bps_per_node: 209715200 #max total bytes send to es per node, 200MB/s
      max_qps_per_node: 20000 #max total requests send to es per node, 20k/s
    discovery: # auto discovery elasticsearch cluster nodes
      enabled: true
      refresh:
        enabled: true
        interval: 60s

pipeline:
  - name: target_indexing
    auto_start: true
    keep_running: true
    processor:
      - disorder_bulk_indexing:
          max_worker_size: 10
          detect_interval: 100
          bulk:
            compress: true
            batch_size_in_mb: 20
            batch_size_in_docs: 5000
            invalid_queue: bulk_indexing_400
          queues:
            type: scroll_docs
          consumer:
            fetch_max_messages: 1000
  - name: task_stats
    auto_start: true
    keep_running: true
    processor:
      - dynamic_task_stats:
          detect_interval: 10000
pipeline.dynamic: true
pipeline.dynamic_task_size: 10

disk_queue:
  sync_timeout_in_ms: 10000
  sync_every_records: 10000

elastic:
  elasticsearch: task_from
  enabled: true
  remote_configs: true
  health_check:
    enabled: true
    interval: 30s
  availability_check:
    enabled: true
    interval: 60s
  metadata_refresh:
    enabled: true
    interval: 30s
  cluster_settings_check:
    enabled: true
    interval: 20s
  store:
    enabled: false
  orm:
    enabled: true
    init_template: true
    template_name: ".infini"
    index_prefix: ".infini_"

disk_queue.compress.segment.enabled: true

启动 Gateway #

./gateway-xxx-xxx -config migration.yml

注册 Gateway #

这里我们使用极限网关作为迁移任务的执行者,需要提前将网关实例注册到Console 里面管理,后面创建迁移任务的时候会用到。 点击 INFINI Console 中左侧菜单 网关管理》实例管理 ,然后点击 新建 按钮注册新的实例,如下图所示:

输入网关的地址,这里要注意网关的默认 API 地址使用的是 2900 端口,这里我们输入 192.168.3.6:9200,然后点击下一步

点击下一步,完成网关注册

注册源集群和目标集群 #

点击 INFINI Console 中左侧菜单 系统管理》集群管理,然后点击注册集群,先后注册源集群 es-v5616 和目标集群 es-v7140,如下图所示:

如果 Elasticsearch 集群有身份验证,需要设置身份验证信息,然后点击下一步

确认集群信息无误,然后点击下一步

到这里源目标集群就注册完成了,目标集群 es-v710 的注册步骤也是一样的,这里就不赘述了。

创建迁移任务 #

点击 INFINI Console 中左侧菜单 容灾备份》数据迁移,然后点击新建按钮创建迁移任务,如下图所示:

配置迁移集群 #

在源集群列表中选择集群 es-v5616, 在目标集群列表中选择集群 es-v7140

配置迁移索引 #

点击选择迁移索引按钮, 如下图:

这里我们选择了两个索引 test-10 和 test-15 ,然后点击确认

选择索引的时候请确认目标集群相应索引是否创建好 mapping, setting 等元数据信息

表格右方可以设置目标索引名称和文档 type,按需修改即可,这里我们将索引 test-10 重命名为 test-10-x, 将索引 test-15 重命名为 test-15-x,文档类型都重命名为 _doc。 选择完索引之后,点击下一步,进行迁移任务的数据范围设置和分区设置,如下图:

配置数据范围 #

如果需要过滤数据迁移,可以进行数据范围的设置,这里我们进行全量的数据迁移,就不设置了

配置数据分区 #

如果一个索引数据量特别大,可以进行数据分区的设置。数据分区根据设置的字段,以及分区步长将数据拆成多段,系统最终会将一个分段的数据作为一个子任务去运行,迁移数据, 这样的话即使,一个分段迁移过程出现异常,只需要重跑这个子任务。

数据分区设置目前支持按照日期类型字段(date), 和数字类型 (number) 拆分分区,如上图所示,我们选择日期类型字段 now_widh_format 进行拆分分区,分区步长设置为 5分钟(5m), 然后点击预览按钮,可以看到根据设置拆分可以得到 8 个分区(文档数为0的分区最终不会生成子任务)。 根据预览信息确认分区设置无误之后,点击保存关闭分区设置并保存,然后点击下一步进行运行设置。

运行设置 #

一般情况下使用默认设置,然后执行节点选择先前注册的网关实例 Dynamo,然后点击创建任务。

启动迁移任务 #

创建迁移任务成功后会看到任务列表,如下图:

可以看到,最近一条任务就是我们刚创建的,然后在表格右侧操作栏中点击 start 开始任务(任务开始之前,需要确认目标集群中索引是否已经设置好mapping, 和 settings, 索引模版,ilm )。

点击开始按钮 启动迁移任务。

查看迁移任务进度 #

任务启动成功之后,点击刷新按钮,刷新列表,看到操作一栏中有详情入口时,点击详情进入任务详情页查看任务执行状态。开启自动刷新之后,我们可以看到任务详情有如下变化:

图中蓝色方块表示,子任务(分区任务)已经在运行,灰色表示任务还没有开始

上图中可以看到方块变成了浅绿色,表示子任务(分区任务)已经数据导出完成,索引 test-10的迁移进度是 65.5%, 索引 test-15 迁移进度是 18.05%

上图中可以看到所有方块变成了绿色,索引迁移进度都是 100%, 表示数据已经迁移完成。

小结 #

使用 INFINI 数据迁移功能可以很方便地将 Elasticsearch 数据进行跨版本迁移,并且可以很直观地查看 当前数据的迁移进度。