文档首页/ 云搜索服务 CSS/ 最佳实践/ ELasticsearch数据迁移/ 通过S3插件备份与恢复迁移自建Elasticsearch集群至华为云
更新时间:2024-09-14 GMT+08:00

通过S3插件备份与恢复迁移自建Elasticsearch集群至华为云

自建Elasticsearch集群数据迁移到华为云Elasticsearch集群可以使用S3快照备份恢复方式。

应用场景

S3插件(repository-s3)是一个专为Elasticsearch设计的插件,该插件允许用户将Elasticsearch的快照备份存储到与S3 API兼容的存储服务中,例如华为云的对象存储服务(OBS)。S3插件提供了一种高效、灵活且安全的方式来备份Elasticsearch集群的数据。

通过S3插件实现自建Elasticsearch集群和华为云Elasticsearch集群之间的数据迁移,常用于以下场景:

  • 服务迁移上云:将自建的Elasticsearch服务迁移到云平台,以利用云服务的可扩展性、维护简便性和成本效益。
  • 跨版本迁移:将低版本的自建Elasticsearch集群数据迁移到高版本的华为云Elasticsearch集群中。
  • 集群整合:将多个自建Elasticsearch集群迁移到一个华为云Elasticsearch集群中整合为统一的数据平台,以简化管理和提高数据一致性。
  • 技术栈统一:当企业已经在华为云上运行其他服务时,为了技术栈的统一和简化管理,可以选择将Elasticsearch集群也迁移至华为云。

方案架构

图1 迁移流程

通过S3插件备份与恢复迁移自建Elasticsearch集群(源集群)至华为云Elasticsearch(目标集群)的迁移流程如图1所示。

  1. 在自建Elasticsearch集群安装repository-s3插件。
  2. 备份自建Elasticsearch数据到华为云对象存储服务OBS上。
  3. 从华为OBS恢复数据到CSS服务的Elasticsearch。

方案优势

  • 跨版本兼容性高:支持在不同版本的Elasticsearch集群之间进行数据迁移,包括从低版本到高版本的升级。
  • 高可用性和持久性:S3提供的高持久性和可用性保证了备份数据的安全性,减少了数据丢失的风险。
  • 灵活的备份策略:可以根据业务需求,灵活选择全量备份或增量备份,优化存储使用和迁移时间。

约束限制

  • 目标集群的版本不能低于源集群的版本,版本兼容性分析请参见Snapshot version compatibility
  • 备份与恢复不支持动态增量数据同步,建议停止数据更新后再进行备份。
  • 自建Elasticsearch集群需要配置公网访问权限才能备份快照到OBS。

前提条件

  • 源Elasticsearch集群和目标Elasticsearch集群处于可用状态。
  • 已备好存储快照数据的OBS桶“backup-obs”,OBS桶必须和CSS服务的Elasticsearch集群在同一Region。
  • 已获取账号的AK/SK,获取方式请参见如何获取访问密钥AK/SK

操作步骤

  1. 在自建Elasticsearch集群上安装repository-s3插件。

    1. 查看自建Elasticsearch集群的版本,确认要安装的repository-s3插件版本。

      执行如下命令获取集群信息。

      curl http://x.x.x.x:9200 # 需输入Elasticsearch集群的IP地址。

      在返回结果中查看“version.number”,如下所示表示集群版本号是7.10.2。

      {
        "name" : "es_cluster_migrate-ess-esn-1-1",
        "cluster_name" : "es_cluster_migrate",
        "cluster_uuid" : "1VbP7-39QNOx_R-llXKKtA",
        "version" : {
          "number" : "7.10.2",
          "build_flavor" : "default",
          "build_type" : "tar",
          "build_hash" : "d2ef93d",
          "build_date" : "2018-12-17T21:17:40.758843Z",
          "build_snapshot" : false,
          "lucene_version" : "8.7.0",
          "minimum_wire_compatibility_version" : "6.7.0",
          "minimum_index_compatibility_version" : "6.0.0-beta1"
        },
        "Tagline" : "You Know, for Search"
      }
    2. 下载对应版本的repository-s3插件安装包。此处以7.10.2为例,基于集群实际版本号修改下载地址中的版本号。

      下载地址:“https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-s3/repository-s3-7.10.2.zip”

    3. 登录自建Elasticsearch集群的实例节点上,并cd到plugins目录下。
    4. 执行如下命令将repository-s3插件安装包解压到plugins目录下。
      unzip  repository-s3-7.10.2.zip -d plugins/repository-s3
    5. 给repository-s3插件添加华为云的访问密钥AK/SK。
      1. 进入自建集群Elasticsearch的安装路径,执行以下命令创建keystore文件。
        bin/elasticsearch-keystore create s3.keystore

        创建keystore文件必须用普通用户,不能用root账号,否则配置不生效。

      2. 将华为云的访问密钥AK/SK增加到keystore文件中。
        bin/elasticsearch-keystore add s3.client.default.access_key
        bin/elasticsearch-keystore add s3.client.default.secret_key

        access_key是获取到的访问密钥ID(AK);secret_key是获取到的秘密访问密钥(SK)。

    6. 当自建Elasticsearch集群有多个实例节点时,重复执行1.c1.e给其他节点安装S3插件和配置AK/SK。
    7. AKSK添加完成,重启Elastiseach集群使配置生效。
    8. 重启完成后,执行如下命令查看S3插件是否安装成功。
      curl http://x.x.x.x:9200/_cat/plugins # 需输入Elasticsearch集群的IP地址。

      当正常返回repository-s3插件的版本信息时表示安装成功,如下所示。

      node-1 repository-s3 7.10.2

  2. 备份自建Elasticsearch数据到华为云OBS。

    1. 登录自建Elasticsearch集群的Kibana,选择“Dev Tools”,进入命令行界面。
    2. 执行如下命令,创建快照仓库“my_backup”,对接华为云OBS存放快照数据的OBS桶“backup-obs”。
      PUT /_snapshot/my_backup
      {
        "type": "s3",
        "settings": {
          # OBS桶名称
          "bucket": "backup-obs",
          # OBS的外网访问地址
          "endpoint": "obs.xxx.example.com",
          "base_path": "snapshot",
          "max_snapshot_bytes_per_sec": "1000mb"
        }
      }
    3. 执行如下命令,当正常返回快照仓库信息时,表示创建成功。
      GET /_snapshot/my_backup
    4. 执行如下命令,创建快照。

      排除“.”开始的系统索引,为其他索引创建全量快照,其中“wait_for_completion”设置为“true”表示异步执行。

      PUT  _snapshot/my_backup/snapshot_all?wait_for_completion=true
      {
          "indices": "*,-.*"
      }
    5. 快照创建完成可以执行如下命令查看快照信息。
      # 查看所有存在的快照
      GET _cat/repositories
      # 查看所有的快照信息
      GET _snapshot/my_backup/_all
      # 根据快照名称查看快照信息,其中snapshot_all是快照名称
      GET _snapshot/my_backup/snapshot_all
      # 根据快照名称查看快照状态,其中snapshot_all是快照名称
      GET _snapshot/my_backup/snapshot_all/_status

  3. 从OBS恢复数据到CSS服务的Elasticsearch。

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏中,选择“集群管理 > Elasticsearch”,进入集群管理列表页面。
    3. 选择目标集群,单击操作列“Kibana”,登录Kibana。
    4. 单击左侧导航栏的“Dev Tools”进入操作页面。
    5. 执行如下命令,创建快照仓库“my_backup_all”
      PUT _snapshot/my_backup_all/
      {
          "type" : "obs",
          "settings" : {
      		# OBS的内网访问域名。
      		"endpoint" : "obs.xxx.example.com",
      		"region" : "cn-south-1",
      		# 访问OBS的用户名和密码。
      		"access_key": "xxx",
      		"secret_key": "xxx",  
      		# OBS的桶名称,和上一步迁移目的端的OBS桶名保持一致。
      		"bucket" : "backup-obs",   
      		"compress" : "false",
      		"chunk_size" : "1g",
      		"base_path" : "snapshot",
      		"max_restore_bytes_per_sec": "1000mb",
      		"max_snapshot_bytes_per_sec": "1000mb"    
      	}
      }
    6. 执行如下命令,恢复快照数据到目标集群。
      • 查看存在的快照,其中my_backup_all是仓库名称。
        GET _snapshot/my_backup_all/_all
      • 基于查看到的快照名称恢复数据到目标elasticsearch集群,其中my_backup_all是快照仓库名称,snapshot_all是快照名称。
        POST _snapshot/my_backup_all/snapshot_all/_restore?wait_for_completion=true
      • 恢复指定索引到目标Elasticsearch集群,其中my_index1和my_index2是需要恢复的索引名称。
        POST _snapshot/my_backup_all/snapshot_all/_restore?wait_for_completion=true
        {
          "indices": "my_index1,my_index2,-.*",
          "ignore_unavailable": "true"
        }