# 数据备份

UES的数据备份功能，使用Elasticsearch（以下简称ES）的 snapshot API，通过[elasticsearch-repository-ufile](https://github.com/ufilesdk-dev/elasticsearch-repository-ufile)插件（以下简称US3插件）的支持，按照预先设定的备份计划，定时自动生成快照，保存在对象存储 US3当中，从而实现对UES索引数据的有效备份。

## 名词释义

**快照（snapshot）**：一个快照是对于运行中的ES集群在快照生成时间点的一个备份，可以针对单个索引或者所有索引生成快照。快照采用增量机制生成，这意味着后续快照中仅包含之前快照中不存在的那部分数据。

**仓库（repository）**：仓库是用于存放快照文件的存储空间，必须先创建一个仓库才能进行快照的备份操作。通过安装插件，ES可以支持使用不同类型的存储系统作为快照仓库。

**对象存储 US3**：对象存储 US3是DezaiCloud提供的非结构化文件云存储的服务，通过安装US3插件，UES使用US3作为存放快照的仓库。

## 准备工作

### 1.创建US3存储空间

登录US3控制台，创建用于保存UES快照数据的存储空间。要求：
（1）存储空间所在地域必须与您需要快照备份的UES集群所在地域保持一致。
（2）空间类型请选择**”私有空间“**，以确保存储空间内的数据需要得到密钥授权才能访问。

<!-- image-todo -->

### 2.创建US3令牌

在US3令牌管理页面，创建用于授权访问上述存储空间的令牌，合理设置有效时长，授权访问上述存储空间，并赋予对**所有文件**的**上传、下载、删除、文件列表权限**。

<!-- image-todo -->

### 3.为需要备份的UES集群安装US3插件

登录UES控制台，在目标UES集群的插件管理页面进行US3插件的安装，具体操作方法可以参考文档插件管理章节。

<!-- image-todo -->

## 操作步骤

数据备份功能入口：登录UES控制台，点击集群列表中目标集群的“详情”按钮，进入集群详情页面，切换至“数据备份”标签页。

### 1.注册仓库

在**“仓库管理”**子页面中，点击**“注册仓库”**按钮，在弹出的对话框中，按照页面提示完成相关信息的填写，点击确认，系统将为该集群创建一个存放快照的仓库。

<!-- image-todo -->

| 参数 | 说明 |
| ----- | ----- |
| US3存储空间 | 用于存放UES集群的快照。<font color=red>注意：建立仓库之后不可以删除该仓库绑定的US3存储空间，否则已经生成的快照文件将会丢失，新的快照也将无法生成。</font> |
| US3令牌 | 用于授权访问上述存储空间，必须具有该存储空间的上传、下载、删除、文件列表权限，缺一不可。<font color=red>注意：建立仓库之后不可以删除该仓库绑定的US3令牌，也不可以取消任何一项必备权限，同时还必须确保该US3令牌未过有效期，否则快照生成、快照恢复等操作将会失败。</font> |
| 仓库名称 | 用于标识一个仓库，在一个UES集群内部不允许出现多个同名仓库。 |
| 基础路径 | 快照文件在存储空间中的路径，默认为ues\_backup，生成的快照文件会存放在US3存储空间中的该目录下。 |
| 只读 | 控制UES集群对于该仓库的读写权限。<font color=red>注意：在多个UES集群中注册指向同一个路径（US3存储空间 + 基础路径）的仓库时，只应该设置一个集群对其具有写入权限，其他集群应该设置为只读权限，以确保快照文件的完整性和一致性。</font> |
| 快照压缩 | 启用压缩后，将对快照中的索引映射和设置文件进行压缩，但数据文件不会被压缩。 |
| 分块大小 | 用于限制快照过程中单个文件分块的大小。 |
| 快照生成最大速度 | 用于限制每个节点生成快照的最大速度。 |
| 快照恢复最大速度 | 用于限制每个节点恢复快照的最大速度。 |
| 快照自动清理 | 如果开启快照自动清理，系统将会按照设定的时间长度，定期删除该仓库中过期的快照文件。 |

### 2.设定备份规则

在**“备份策略”**子页面中，点击**“新建规则”**按钮，在弹出的对话框中，按照页面提示完成相关信息的填写，点击确认，系统将为该集群创建一条自动生成快照的规则。

<!-- image-todo -->

| 参数 | 说明 |
| ----- | ----- |
| 规则名称 | 用于标识一条备份规则。 |
| 快照名称 | 指定该备份规则所生成快照的名称，系统将在快照名称后添加唯一标识符以区分不同时间生成的快照。 |
| 所在仓库 | 选择用于存放快照的仓库，只能选择注册仓库时设置为具有写入权限的仓库。 |
| 执行计划 | 设定进行自动备份的频率和时间点，目前支持在每天的指定时间进行一次自动备份。 |
| 备份索引 | 默认备份全部索引，也可以关闭此开关，手动输入索引名称以备份指定的索引，多个索引名称之间使用英文逗号分隔，支持索引表达式。 |
| 忽略不可用索引 | 用于控制对快照备份期间不可用索引的处理方式。此选项开启时，如果遇到不可用索引，将会继续生成不包含这些索引的快照。此选项关闭时，如果遇到不可用索引，快照备份将会失败。 |
| 允许不完全索引 | 用于控制对快照备份期间主分片不可用的索引的处理方式。此选项开启时，如果遇到此类情况，将会允许使用主分片不可用的索引生成快照。此选项关闭时，如果遇到此类情况，快照备份将会失败。 |
| 包含全局状态 | 用于控制是否将集群的全局状态保存在快照中。 |

### 3.执行备份规则

备份规则的执行有两种方式：自动定时执行和手动执行。

（1）自动定时执行

设置好备份规则后，系统会在规则设定的时间，按照规则中配置的参数，定时自动执行快照备份操作。

（2）手动执行

在**“备份策略”**子页面中，点击一条规则右侧的**“立即执行”**按钮，可以按照规则中配置的参数，立即执行一次快照备份操作。

### 4.管理生成的快照

在**“快照管理”**子页面中，可以查看或删除已经生成的快照。

（1）查看快照详情

点击一个快照右侧的**“详情”**按钮，可以查看这个快照的详细信息，包括快照的版本、备份状态、包含的索引等。

<!-- image-todo -->

（2）删除快照

点击一个快照右侧的**“删除”**按钮，可以从仓库中删除这个快照。如果在注册仓库时，开启了快照自动清理功能，系统将会按照设定的时间长度，定期删除该仓库中过期的快照文件。

### 索引表达式

索引表达式用于指定多个索引，常用的表达式类型包括：

（1）英文逗号分隔的多个索引名称

例如：index\_1,index\_2,index\_3  指定了3个索引。

（2）带通配符 **\*** 的索引名称

例如：index\_\* 可以表示所有以 index\_ 开头的索引，如 index\_1,index\_2020.02.02 等。

（3）使用通配符 **\*** 时，利用 **-** 排除不需要的索引。

例如：index\_\*,-index\_1 表示所有以 index\_ 开头，但不包含 index\_1 在内的索引。

（4）基于日期数学表达式的索引名称

    <static_name{date_math_expr{date_format|time_zone}}>

上述表达式中，各个字段的含义如下：

static\_name：索引名称中的静态部分

date\_math\_expr：动态的日期表达式

date_format：日期格式（可选），默认是YYYY.MM.dd

time_zone：时区（可选），默认是UTC

样例（**表达式两端的尖括号 \<\> 必不可少**）：

假设当前时间是2020年2月20日中午12点（UTC）。

| 表达式 | 表达式的值 |
| ----- | ----- |
| <index\_{now/d}> | index\_2020.02.20 |
| <index\_{now-1d}> | index\_2020.02.19 |
| <index\_{now/M}> | index\_2020.02.01 |
| <index\_{now/M{YYYY.MM}}> | index\_2020.02 |

## 参考信息

关于创建快照、从快照恢复数据、查询快照信息等操作的更多信息，请参考Elasticsearch官方文档：

[Snapshot And Restore](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html)