# 通过备份与恢复实现Elasticsearch集群跨账号/跨区域迁移
通过CSS服务的快照备份与恢复功能，结合OBS和OMS，实现Elasticsearch集群在跨账号或跨区域场景下的数据高效迁移，适用于大规模数据的容灾备份与资源转移。
#### 应用场景
当您的Elasticsearch集群数据需要在不同账号或不同区域之间迁移时，例如企业组织架构调整后的资源转移、业务跨地域部署的容灾需求，直接复制数据的方式耗时长且对业务影响大。通过云搜索服务CSS的快照备份与恢复功能，结合对象存储服务OBS和对象存储迁移服务OMS，可以实现跨账号或跨区域的集群数据高效迁移。
典型应用场景：
- 跨区域迁移：将A区域的Elasticsearch集群数据迁移到B区域的Elasticsearch集群中，满足业务跨地域部署、容灾备份、就近接入等需求。
- 跨账号迁移：将A账号下的Elasticsearch集群数据迁移到B账号下的Elasticsearch集群中，适用于企业组织架构调整、项目间资源转移、多账号统一管理等场景。
- 跨版本迁移：将低版本Elasticsearch集群数据迁移到高版本集群中，实现集群版本升级。
- 集群合并：将多个Elasticsearch集群的索引数据合并到一个集群中，实现数据集中管理。
- 容灾恢复：将生产环境的Elasticsearch集群数据通过快照备份到异地，在灾难发生时快速恢复业务。
 
#### 方案架构
图1迁移流程   
![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002630641796.png "点击放大")
迁移流程如下：
1. 源集群开启快照：在源Elasticsearch集群上开启集群快照功能，配置OBS桶用于存储快照数据。
2. 创建手动快照：对源Elasticsearch集群创建手动快照，将索引数据备份到源OBS桶中。
3. 迁移OBS数据：通过OBS的跨区域复制规则或OMS将源OBS桶的快照数据迁移到目标OBS桶。
   - 同账号跨区域场景：通过跨区域复制规则，将账号A在区域A的源OBS桶中的快照数据复制到账号A在区域B的目标OBS桶中。
   
   - 跨账号跨区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号B在区域B的目标OBS桶中。
   
   - 同账号同区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号A在区域A的目标OBS桶中。
   
   - 跨账号同区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号B在区域A的目标OBS桶中。
    
4. 目标集群配置快照仓库：在目标Elasticsearch集群（B区域/B账号）上创建快照仓库，关联到目标OBS桶。
5. 目标集群恢复快照：将目标OBS桶中的快照恢复到目标Elasticsearch集群。
 
#### 方案优势
- 操作简单，易于管理：在CSS服务控制台使用集群快照功能实现备份与恢复，操作简单直观，无需编写代码即可完成迁移。
- 适用于大规模数据迁移：快照备份适用于数据量大的场景，当数据量达到GB、TB甚至PB级别时，快照方式是最优选择。
- 支持跨区域和跨账号：通过结合OMS的跨区域/跨账号数据迁移能力，实现不同区域和不同账号之间的集群数据迁移。
- 恢复过程可控：恢复数据时，可以选择恢复特定索引或全部索引，支持重命名索引恢复，避免索引名称冲突。
- 迁移时长可控：基于迁移时长评估公式可以预估迁移耗时，通过配置最大备份/恢复速率控制迁移速率，降低对业务的影响。
 
#### 性能影响
- 源集群影响：快照备份直接复制数据存储层的文件实现备份，避免了对Elasticsearch外部读写接口的依赖，对延迟敏感性较低的业务场景，对集群性能的干扰几乎可以忽略。
- 目标集群影响：快照恢复阶段会占用目标集群的CPU、内存和磁盘IO资源。建议在业务空闲期恢复，或通过配置"最大恢复速率（每秒）"参数限制恢复速率，降低对目标集群业务的影响。
 
#### 迁移时长评估
迁移过程分为备份阶段、OMS数据迁移和恢复阶段。备份阶段耗时由源集群决定，恢复阶段耗时由目标集群决定，OMS数据迁移时长取决于数据量和网络带宽。
迁移时长评估公式：
- 当索引shard个数大于节点个数时： 总时长（s） = 待迁移的数据量（GB） ÷ 40MB ÷（源集群节点个数 + 目的集群节点个数）× 索引个数 + 待迁移的数据量（GB） ÷ OMS迁移速率（MB/s）
  
- 当索引shard个数小于节点个数时： 总时长（s） = 待迁移的数据量（GB） ÷ 40MB ÷（源集群索引shard个数 + 目的集群索引shard个数）× 索引个数 + 待迁移的数据量（GB） ÷ OMS迁移速率（MB/s）
  
上述评估公式基于理想状态下（即单节点以最快速度40MB/s传输）的迁移时长，实际迁移时长还会受到网络、OBS性能、OMS迁移速率等因素影响。OMS迁移速率可达到几十MB/s至数百MB/s，且支持流量控制，可在业务高峰期限制迁移速率。
#### 约束限制
- 目标集群的版本不能低于源集群的版本，版本兼容性分析请参见[Snapshot version compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/snapshot-restore.html#snapshot-cluster-compatibility)。
- 建议目标集群的节点数大于源集群的分片副本数最大值，防止集群同一个分片的副本（Replica）与主分片（Primary）无法完全分配，导致集群状态处于Yellow状态。
- 建议目标集群的节点数大于源集群的节点数的一半，防止目标集群规模过小，导致单个节点承受的压力（CPU/IO）远超源集群。
- 建议目标集群的CPU、MEM和Disk配置大于或等于源集群的配置，防止目标集群性能降级，导致服务崩溃或响应变慢。
- 快照备份与恢复不支持动态增量数据同步，建议停止数据更新后再备份，或在业务低峰期操作。
- 跨区域迁移时，源OBS桶和目标OBS桶位于不同区域，需要通过OMS服务进行数据迁移，此时OMS迁移任务中的"元数据迁移方式"必须选择"保留元数据"，否则快照数据恢复会异常。
- 跨账号迁移时，需要确保目标账号具有访问目标OBS桶的权限，且OBS桶与目标集群位于同一区域。
- 源OBS桶和目标OBS桶的"存储类别"均需为"标准存储"。
- 以"."开头的系统索引不建议通过快照备份恢复，避免引发业务异常。
 
#### 资源和成本规划
表1资源和成本规划 
| 资源         | 资源说明                                 | 数量  | 费用说明           |
|:---|:---|:---|:---|
| 云搜索服务CSS   | 源Elasticsearch集群和目标Elasticsearch集群。    | 2 | 按需计费。          |
| 对象存储服务OBS    | 源OBS桶和目标OBS桶，"存储类别"为"标准存储"，用于存储集群快照。 | 2    | 按存储量和时长计费。    |
| 对象存储迁移服务OMS | 迁移任务，在跨区域/跨账号场景下，用于迁移OBS桶中的快照数据。      | 1   | 数据迁移产生的流量费用。 |
   
 #### 步骤一：为源集群创建手动快照
在源Elasticsearch集群上开启快照功能，配置OBS桶，并创建手动快照将索引数据备份到源OBS桶中。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，单击目标集群名称，进入集群详情页。
4. 选择"集群快照"页签，查看集群是否启用快照功能。
   - 是，则执行[7]。
   
   - 否，则执行[5]。
    
5. 在集群快照页面，单击"开启快照"，在弹窗中完成集群快照配置。
   图2开启快照   
   ![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002661200949.png "点击放大")
   表2配置开启快照 
   | 参数         | 说明                                                               |
   |:---|:---|
   | OBS桶         | 在下拉框中选择用于存储快照数据的OBS桶。                                           |
   | 备份路径      | 快照数据在OBS桶中的存储路径，例如"css_repository/es-source"。                   |
   | 最大备份速率（每秒） | 每个节点的最大备份速率，可保持默认值也可根据业务需求调整。                                    |
   | 最大恢复速率（每秒） | 每个节点的最大恢复速率，可保持默认值也可根据业务需求调整。                                   |
   | IAM委托      | 选择IAM委托，授权当前账号访问和使用OBS的权限。可使用自动创建的委托"css_obs_agency"，也可选择自定义委托。 |
   | 自动创建集群快照     | 取消勾选，集群迁移无需自动快照。                                                 |
      
   
6. 配置完成后，单击"确定"，启用集群快照功能。 此时集群快照页面会显示配置信息。
   
7. 在集群快照页面，单击"手动创建快照"，在弹窗中完成备份策略配置。
   图3手动创建快照   
   ![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002630801696.png)
   表3创建快照配置 
   | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   |:---|:---|
   | 快照名称   | 设置快照名称。可保持默认值，也可自定义。例如"snapshot-source"。                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 索引    | 指定备份的索引名称。 - 支持备份指定的索引，多个索引之间使用英文逗号隔开，例如"index1,index2,index3"。  - 支持使用"\*"匹配多个索引，比如"index\*"，表示备份名称前缀是index的所有索引。   如果不填写，则默认备份集群中所有索引。 |
   | 快照描述 | 添加快照描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   
8. 配置完成后，单击"确定"，开始创建快照。 当"快照任务状态"为"可用"时，表示备份完成。
   
9. 查看数据是否备份成功。 在集群快照任务列表中，单击快照名称左侧的![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002661200951.png)，展开快照详情，获取备份的分片和索引信息，通过对比数据可以判断数据是否备份成功。
   图4查看详情   
   ![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002631164942.png "点击放大") 
 
#### 步骤二：迁移OBS快照数据
将源OBS桶中的快照数据迁移到目标OBS桶中。
- 同账号跨区域场景：通过跨区域复制规则，将账号A在区域A的源OBS桶中的快照数据复制到账号A在区域B的目标OBS桶中。
- 跨账号跨区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号B在区域B的目标OBS桶中。
- 同账号同区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号A在区域A的目标OBS桶中。
- 跨账号同区域场景：通过OMS服务，将账号A在区域A的源OBS桶中的数据复制到账号B在区域A的目标OBS桶中。
具体操作请参见[OBS数据复制](https://support.huaweicloud.com/usermanual-obs/obs_10_1001.html)。
通过OMS服务迁移OBS快照数据时，迁移任务的"元数据迁移方式"必须选择"保留元数据"，否则快照数据恢复会异常。
等待OMS迁移任务完成，确认迁移任务状态为"迁移成功"。
#### 步骤三：为目标集群配置快照仓库
在目标Elasticsearch集群上通过Kibana创建快照仓库，关联到目标OBS桶，使目标集群能够读取迁移后的快照数据。
1. 登录Kibana进入命令执行页面。
   1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
   
   2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
   
   3. 在集群列表，选择目标集群，单击操作列的"Kibana"，登录Kibana。
   
   4. 在Kibana左侧导航栏选择"Dev Tools"，进入操作页面。 控制台左侧是命令输入框，其右侧的三角形图标为执行按钮，右侧区域则显示执行结果。
      
    
2. 执行以下命令创建快照仓库，如"my_backup_all"，并关联到目标OBS桶。
   ```
   PUT _snapshot/my_backup_all/
   {
     "type" : "obs",
     "settings" : {
       "endpoint" : "obs.<目标区域>.example.com",
       "region" : "<目标区域>",
       "access_key": "<目标账号AK>",
       "secret_key": "<目标账号SK>",
       "bucket" : "<目标OBS桶名>",
       "compress" : "false",
       "chunk_size" : "1g",
       "base_path" : "<备份路径>",
       "max_restore_bytes_per_sec": "100mb",
       "max_snapshot_bytes_per_sec": "100mb"
     }
   }
   ```
   表4快照仓库参数说明 
   | 参数                          | 说明                                                                                                       |
   |:---|:---|
   | endpoint                      | OBS域名地址，格式为"obs.\<目标区域\>.example.com"。                                                                    |
   | region                     | 目标集群所在的区域，如cn-north-4。                                                                                     |
   | access_key                 | 目标账号的Access Key ID，获取方法请参见[如何获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。   |
   | secret_key                  | 目标账号的Secret Access Key，获取方法请参见[如何获取访问密钥AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。 |
   | bucket                     | 存储快照数据的目标OBS桶名称。                                                                                        |
   | base_path                     | 需要与源集群快照的备份路径一致。例如，源集群使用的备份路径是"css_repository/es-source"，则此处填写与源集群相同的路径。                                |
   | max_restore_bytes_per_sec | 最大恢复速率（每秒），可根据业务需求调整。                                                                                     |
   | max_snapshot_bytes_per_sec    | 最大备份速率（每秒），可根据业务需求调整。                                                                                    |
      
   
3. 执行以下命令，确认快照仓库创建成功。
   ```
   GET _snapshot
   ```
   返回结果中包含"my_backup_all"仓库信息，表示创建成功。
   
4. 执行以下命令，查看快照仓库中的快照列表，确认目标OBS桶中的快照数据可被目标集群识别。
   ```
   GET _snapshot/my_backup_all/_all
   ```
   返回结果中包含[步骤一：为源集群创建手动快照]创建的快照信息"snapshot-source"，表示快照数据可正常识别。
   
 
#### 步骤四：为目标集群恢复快照数据
从快照中恢复数据到目标集群。
1. 根据需要选择以下方式恢复快照数据。
   - 恢复某一快照中的所有索引：
     ```
     POST _snapshot/my_backup_all/<快照名称>/_restore?wait_for_completion=true
     ```
     
   
   - 恢复某一快照中的部分索引（排除系统索引）：
     ```
     POST _snapshot/my_backup_all/<快照名称>/_restore
     {
       "indices": "*,-.monitoring*,-.security*,-.kibana*",
       "ignore_unavailable": "true"
     }
     ```
     
   
   - 恢复指定索引并重命名：
     ```
     POST _snapshot/my_backup_all/<快照名称>/_restore
     {
       "indices": "index_1,index_2",
       "rename_pattern": "index_(.+)",
       "rename_replacement": "restored_index_$1"
     }
     ```
     
    
2. 查看快照恢复进度。
   ```
   # 查看所有快照的恢复结果 
   GET /_recovery
   # 查看指定索引的快照恢复结果 
   GET <索引名称>/_recovery
   ```
   
 
#### 步骤五：验证数据完整性
确认目标集群中的数据与源集群一致。
1. 在目标集群中查看恢复的索引列表。
   ```
   GET _cat/indices?v
   ```
   
2. 对比源集群和目标集群的索引文档数量。
   ```
   # 源集群
   GET _cat/count/<索引名称>?v  
   # 目标集群
   GET _cat/count/<索引名称>?v
   ```
   
3. 抽样验证关键业务数据的查询结果是否一致。
 
#### 步骤六：清理资源（可选）
迁移完成后，请及时删除不再使用的资源，节约成本。
1. 删除OBS桶中的快照数据，释放存储资源。
2. 删除源Elasticsearch集群，释放计算与存储资源。
 
#### 相关文档
- [创建快照备份数据](https://support.huaweicloud.com/usermanual-css/css_01_0267.html)：了解CSS集群快照功能的详细使用方法。
- [OBS数据复制](https://support.huaweicloud.com/usermanual-obs/obs_10_1001.html)：了解OBS数据复制方式。
- [华为云OBS之间迁移教程](https://support.huaweicloud.com/bestpractice-oms/oms_05_0561.html)：了解通过OMS实现OBS之间跨账号、跨区域、以及同区域内的数据迁移方法。
 
