文档首页> 云搜索服务 CSS> 最佳实践> 迁移集群> 源端为Elasticsearch> 使用备份与恢复迁移集群数据(源端为第三方Elasticsearch)
更新时间:2024-04-19 GMT+08:00

使用备份与恢复迁移集群数据(源端为第三方Elasticsearch)

自建ES到华为云ES之间的数据迁移和第三方友商ES到华为云ES之间的数据迁移,可以参考本章操作指导。

前提条件

  • 使用备份与恢复时,需确认如下2点:
    • 目的端ES版本≥源端ES版本
    • 目的端ES的候选主节点数>源端ES的候选主节点数的一半
  • 备份与恢复不支持增量数据同步,需停止数据更新后再进行备份。
  • CSS服务中已创建好目的端Elasticsearch集群。

迁移流程

当源端是自建ES或第三方友商ES,目的端是CSS服务的ES集群时,集群迁移流程如图1所示。

图1 使用备份与恢复迁移的集群迁移流程

操作步骤

  1. 登录Elasticsearch所在的第三方友商云,创建一个支持s3协议的共享存储仓库,例如登录阿里云的进入OSS服务创建目录patent-esbak, 或者登录腾讯云进入COS服务创建目录patent-esbak。
  2. 在自建或第三方友商Elasticsearch中创建快照备份仓库,用于存放ES快照数据。

    例如,在Elasticsearch中创建一个“my_backup”的备份仓库,关联到存储仓库OSS。

    PUT _snapshot/my_backup
        {
            # 存储仓库类型。
    	"type": "oss",
            "settings": {
    		# 步骤1中存储仓库的内网访问域名。
    		"endpoint": "http://oss-xxx.xxx.com", 
    		# 存储仓库的用户ID和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ak和sk。
    		"access_key_id": "ak",
    		"secret_access_key": "sk",
    		# 步骤1创建的存储仓库的bucket名称。
    		"bucket": "patent-esbak", 
    		# 是否打开快照文件的压缩功能。
    		"compress": false,
    		# 配置此参数可以限制快照数据的分块大小。当上传的快照数据超过这个数值,数据就会被分块上传到存储仓库中。
    		"chunk_size": "1g",
    		# 仓库的起始位置,默认是根目录。
    		"base_path": "snapshot/"
            }
    }

  3. 为自建或第三方友商Elasticsearch创建快照。

    • 为所有索引创建快照

      例如,创建一个名为“snapshot_1”的快照。

      PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
    • 为指定索引创建快照

      例如,创建一个名为“snapshot_test”的快照,该快照包含索引“patent_analyse”和“patent”。

      PUT _snapshot/my_backup/snapshot_test
      {
      "indices": "patent_analyse,patent"
      }

  4. 查看集群的快照创建进度。

    • 执行如下命令可以查看所有快照信息:
      GET _snapshot/my_backup/_all
    • 执行如下命令可以查看指定快照“snapshot_1”的信息:
      GET _snapshot/my_backup/snapshot_1

  5. 将快照数据从存储仓库迁移到对象存储服务OBS中。

    对象存储迁移服务(OMS)支持多种云服务商数据迁移到对象存储服务OBS中,具体请参见各云服务商迁移教程

  6. 在CSS服务的Elasticsearch集群中创建一个存储仓库关联到OBS,用于恢复自建或第三方友商Elasticsearch的快照数据。

    例如,在集群中创建一个“my_backup_all”的存储仓库,关联上一步数据迁移目的端的OBS。

    PUT _snapshot/my_backup_all/
    {
        "type" : "obs",
        "settings" : {
    		# OBS的内网访问域名。
    		"endpoint" : "obs.xxx.xxx.com",
    		"region" : "xxx",
    		# 访问OBS的用户名和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险, 建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例, 运行本示例前请先在本地环境中设置环境变量ak和sk。
    		"access_key": "ak",
    		"secret_key": "sk",  
    		# OBS的桶名称,和上一步迁移目的端的OBS桶名保持一致。
    		"bucket" : "esbak",   
    		"compress" : "false",
    		"chunk_size" : "1g",
    		# 注意“snapshot”后面没有/。
    		"base_path" : "snapshot",
    		"max_restore_bytes_per_sec": "100mb",
    		"max_snapshot_bytes_per_sec": "100mb"    
    	}
    }

  7. 在CSS服务的Elasticsearch集群中恢复快照数据。

    1. 查看所有快照信息。
      GET _snapshot
    2. 恢复快照。
      • 恢复某一快照的所有索引。例如恢复名为“snapshot_1”的快照的所有索引数据。
        POST _snapshot/my_backup_all/snapshot_1/_restore?wait_for_completion=true
      • 恢复某一快照的部分索引。例如名为“snapshot_1”的快照中只恢复非“.”开头的索引。
        POST _snapshot/my_backup/snapshot_1/_restore
        {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}
      • 恢复某一快照中的指定索引,并重命名。例如在名为“snapshot_1”的快照中,将索引“index_1”恢复为“restored_index_1”,“index_2”恢复为“restored_index_2”。
        POST /_snapshot/my_backup/snapshot_1/_restore
        {
        	# 只恢复索引“index_1”和“index_2”,忽略快照中的其他索引。
        	"indices": "index_1,index_2"
        	# 查找正在恢复的索引,该索引名称需要与提供的模板匹配。
        	"rename_pattern": "index_(.+)",
        	# 重命名查找到的索引。
        	"rename_replacement": "restored_index_$1"
        }

  8. 查看快照恢复结果。

    • 查看所有快照的恢复结果:
      GET /_recovery/
    • 查看指定索引的快照恢复结果: GET {index_name}/_recovery
       GET {index_name}/_recovery