# 运维工具
## 概述
为了用户更方便的维护OpenMLDB,我们提供了OpenMLDB运维工具,主要包括以下功能:
- 一键数据恢复:`recoverdata`
- 自动分片均衡: `scaleout`
- 将缩容节点的分片迁移到其他机器上: `scalein`
- 升级tablet前处理和后处理:`pre-upgrade`和`post-upgrade`
- 查询操作状态:`showopstatus`
- 查询表状态:`showtablestatus`
## 使用
### 通用参数说明
- --openmldb_bin_path 指定openmldb二进制文件路径
- --zk_cluster 指定openmldb zookeeper地址
- --zk_root_path 指定openmldb zookeeper路径
- --cmd 指定执行的操作。比如`recoverdata`
### 操作说明
| 操作 | 功能 | 额外参数 |
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| `recoverdata` | 恢复所有表中数据 | - |
| `scaleout` | 自动分片均衡 | - |
| `scalein` | 将缩容节点的分片迁移到其他机器上,如果剩余tablet的个数小于表的最大副本数会执行失败 | --endpoints: 指定分片迁出的节点,如果有多个节点以逗号分隔 |
| `pre-upgrade` | 升级tablet前预处理,会把该tablet上的leader分片进行转移,降低对在线任务的影响。如果leader分片只有一个副本,会自动在其他tablet上为该分片添加副本,`post-upgrade`的时候再进行删除。转移信息会记录在`statfile`中 | --endpoints: 指定升级的节点,只允许一个节点
--statfile:保存leader分片转移信息的临时文件,默认为`.stat` |
| `post-upgrade` | 升级tablet后处理,会从`statfile`读取`pre-upgrade`转移的leader分片,并将其恢复成升级前的状态 | --endpoints: 指定升级的节点,只允许一个节点
--statfile:保存leader分片转移信息的临时文件,默认为`.stat` |
| `showopstatus` | 查询操作状态 | --filter: 过滤某种状态,只显示该状态下的操作,状态取值为 `kInited`, `kDoing`, `kDone`, `kFailed`, `kCanceled`。默认为空,所有状态都展示 |
| `showtablestatus` | 查询表的状态 | --filter: 过滤匹配的数据库,匹配规则和`LIKE`一致,默认为`'%'`,展示所有的数据库 |
**使用示例**
```
python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=0.0.0.0:2181 --zk_root_path=/openmldb --cmd=scaleout
python tools/openmldb_ops.py --openmldb_bin_path=./bin/openmldb --zk_cluster=0.0.0.0:2181 --zk_root_path=/openmldb --cmd=recoverdata
```
运行结果可以只关注是否存在ERROR级日志,如果存在,请保留完整的日志记录,便于技术人员查找问题。
### 系统要求
- 要求python2.7及以上版本
- 理论上openmldb_ops不要求与OpenMLDB集群的版本匹配,高版本openmldb_ops可以操作低版本的OpenMLDB集群。
- `showopstatus`和`showtablestatus`需要`prettytable`依赖