
# 从快照恢复数据
在日常运维中，当OpenSearch集群遇到数据丢失或损坏的情况时，如何快速恢复数据成为了一个亟待解决的问题。通过CSS服务的快照恢复功能，将已备份的集群数据（快照）还原到当前集群或其他符合条件的集群中。快照恢复的核心是将备份的索引数据、元信息及分片结构从OBS存储中重新构建到目标集群中，确保数据一致性。快照恢复适用于数据回滚、集群迁移、灾备恢复等场景。通过CSS服务的快照恢复功能，可以实现快速、准确的数据恢复，确保业务连续性。
#### 约束限制
- 集群快照会导致CPU、磁盘IO上升等影响，建议在业务低峰期操作。
- 当源集群处于"不可用"状态时，支持恢复快照，将源集群已备份的快照恢复到目标集群。
- 备份与恢复过程中，支持访问OpenSearch Dashboards、查看监控、删除其他快照的操作。不支持形态变更、重启此集群、删除此集群、删除正在创建或恢复的快照、再次创建或恢复快照的操作。当此集群正在创建快照或者恢复快照过程中，同时的自动创建快照任务将被取消。
- 集群第一次快照是全量备份，后面是在之前的快照基础上增量备份，增量快照逻辑会导致快照之间的文件会相互依赖，需按顺序恢复。
- 在快照恢复过程中，目标集群正在恢复的索引数据不可查询。
- 当两个集群存在同名索引且shard结构不一致时，无法恢复该索引数据。
- 用于恢复的目标集群版本必须不低于源集群版本，建议保持版本一致。OpenSearch 3.4.0版本仅支持从OpenSearch 2.x和3.4.0恢复快照；OpenSearch 2.19.0版本额外支持从Elasticsearch 7.x恢复快照；OpenSearch 1.3.6版本额外支持从Elasticsearch 6.x或7.x恢复快照。
 
#### 前提条件
集群快照任务列表中有"快照任务状态"为"可用"的快照，且目标集群的"集群状态"也为"可用"。
#### 恢复数据
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，单击目标集群名称，进入集群详情页。
4. 选择"集群快照"页签，进入集群快照页面。
5. 在集群快照任务列表中，选择需要恢复的快照，单击操作列的"恢复"，在弹窗中完成恢复配置。
   图1恢复快照   
   ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002466431457.png)
   表1恢复配置 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|
   | 索引         | 指定需要恢复的索引名称。 - 支持0～1024个字符，不支持大写字母、空格以及字符""\\\<\|\>/?"。  - 恢复以".kibana"为前缀的索引时需要指定索引名称。  - ".opendistro_security"索引不允许恢复。    - 支持使用"\*"匹配多个索引，比如"index\*"，表示恢复快照中名称前缀是index的所有索引。使用"\*"匹配索引时，默认会过滤掉".opendistro_security"或以".kibana"为前缀的系统索引。  - 支持恢复指定的索引，比如"index1,index2,index3"。   默认为空，即不指定索引名称，表示恢复所有的索引数据。 |
   | 索引名称匹配模式   | 索引名称匹配规则。在恢复时，可以根据匹配模式定义的过滤条件去恢复符合条件的索引，过滤条件请使用正则表达式。 "索引名称匹配模式"和"索引名称替换模式"需要同时设置才会生效。使用示例请参见[索引、索引名称匹配模式和索引名称替换模式的参数详解及示例]。 支持0～1024个字符，不支持大写字母、空格以及字符""\\\<\|\>/?,"。 例如"index_(.+)"表示所有index_开头的索引在恢复时会被重命名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 索引名称替换模式   | 索引重命名的规则。在恢复时，对满足索引名称匹配模式的索引按定义的规则重命名。 "索引名称匹配模式"和"索引名称替换模式"需要同时设置才会生效。使用示例请参见[索引、索引名称匹配模式和索引名称替换模式的参数详解及示例]。 支持0～1024个字符，不支持大写字母、空格以及字符""\\\<\|\>/?,"。 例如"restored_index_$1"表示在所有恢复的满足匹配模式的索引名称前面加上"restored_"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 集群         | 选择需要恢复的集群名称，可选择当前集群或者其他集群。 - 只能选择处于"可用"状态的集群，如果快照所属的集群处于"不可用"状态，那么也无法将快照恢复到本集群。  - 恢复到其他集群时，目标集群的版本不能低于本集群的版本，而且目标集群必须和本集群在相同区域。当本集群存在冻结状态的索引快照时，在恢复数据后，该索引会被存储在节点本地，且默认只读，如果需要支持写入，需要执行如下命令配置索引。 ``` PUT index_name/_settings { "index.blocks.write": null } ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 覆盖目标集群同名索引 | 选择是否覆盖目标集群同名索引。默认不覆盖，即不勾选。 快照恢复将覆盖目标集群数据，如果目标集群存在同名索引需勾选覆盖以恢复相同分片结构的索引，不同分片结构的索引不可恢复，请谨慎操作。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
      
   
6. 配置完成后，单击"确定"开始恢复。 恢复成功后，快照列表中"快照恢复状态"将变更为"恢复成功"，索引数据将根据快照信息重新生成。
   图2恢复成功   
   ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002507090265.png "点击放大") 
 
#### 验证恢复结果
快照恢复成功后，可以前往目标集群，查看恢复的索引信息，确认恢复情况。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，登录OpenSearch Dashboards。
4. 在OpenSearch Dashboards左侧导航栏选择"Dev Tools"，进入操作页面。 控制台左侧是命令输入框，其右侧的三角形图标为执行按钮，右侧区域则显示执行结果。
   
5. 执行如下命令查看索引信息。
   ```
   GET _cat/indices
   ```
   
 
 #### 索引、索引名称匹配模式和索引名称替换模式的参数详解及示例
当您对恢复配置中的"索引"、"索引名称匹配模式"和"索引名称替换模式"参数存在疑惑时，可以参考本文的解释和示例。
- **保持原索引名恢复**
  在恢复快照时，如果恢复后的索引名称需要和源快照索引的名称保持一致，则只需要配置"索引"，指定需要恢复的索引名称即可。
  
- **重命名索引恢复**
  在恢复快照时，如果需要重命名恢复后的索引名称，则需要同时配置"索引""索引名称匹配模式"和"索引名称替换模式"。配置说明如下：
  - "索引"：指定要恢复的源索引的名称或模式（支持通配符），且必须包含需要重命名的索引。该参数定义了快照恢复操作的索引范围，即您希望恢复哪些索引到目标集群。
  
  - "索引名称匹配模式"：通过正则表达式，从上述"索引"参数指定的待恢复索引集合中，筛选出需要重命名的源索引。只有名称完全匹配该正则表达式的索引才会触发重命名操作。该参数定义了哪些索引在恢复后要重命名。
  
  - "索引名称替换模式"：定义匹配成功的源索引在恢复后的新名称生成规则。该规则是一个字符串，使用捕获组引用（如$1）来复用"索引名称匹配模式"中捕获的部分。该参数定义了满足匹配模式的索引在重命名恢复后使用的索引名。
    
**示例：**
- "索引"配置为"index_\*, old_index"，其中index_\*匹配所有以index_开头的索引，old_index为单独指定的索引。
- "索引名称匹配模式"配置为"index_(.+)"，匹配以index_开头的索引，该部分索引在恢复时会重命名。
- "索引名称替换模式"配置为"restored_index_$1"，将匹配的索引名称替换为restored_index_加上捕获组内容。
 
对应的API请求：
```
POST /_snapshot/{repo_name}/{snapshot_name}/_restore
{
  "indices": "index_*, old_index",
  "ignore_unavailable": true,
  "include_global_state": true,
  "rename_pattern": "index_(.+)",   // 对应配置项：索引名称匹配模式
  "rename_replacement": "restored_index_$1",   // 对应配置项：索引名称替换模式
}
```
源索引index_logs、index_users和old_index的快照恢复效果：
- 源索引index_logs恢复后会被重命名为restored_index_logs。
- 源索引index_users恢复后会被重命名为restored_index_users。
- 源索引old_index不符合索引匹配模式（rename_pattern），因此不会被重命名，恢复后保持原名old_index。
 
