---
url: /v6.2/metadb-slave-config.md
---
# Metadb master-slave 主从配置

* [单机/集群部署](#单机集群部署)
* [容器部署](#容器部署)
* [k8s 部署](#k8s-部署)

## 配置说明

1. Metadb 主从配置，适用于 Metadb 数据库版本高于13.5的环境,低于此版本的 Metadb 服务 先参考 [数据库服务升级](metadb-upgrade.md)

## 单机/集群部署

### 准备工作

1. 配置/opt/hengshi/conf/hengshi-sense-env.sh 文件中的 export PG_METASLAVE_HOST=(10.10.10.xx 10.10.10.xx)参数， 10.10.10.xx 表示从节点 ip 地址
   支持多从库配置，可以选择一台从库或者多从库，支持水平扩展从库数量。
2. 请确保从库服务器，与主库服务器之间可以免密码登录
3. 执行初始化从库操作前，请确保主库 metadb 服务在启动状态
   **注意** 从库端口不可配置，使用主库配置的 HS_PG_PORT 值，请保证从库此端口可用

### 初始化操作

**注意**

1. 初始化 metaslave 前，请保证 metadb 服务处于启动状态。
2. 初始化的从库为只读权限没有写入权限，不可直接连接作为数据库使用

```shell
cd /opt/hengshi
bin/hengshi-sense-bin init metaslave
```

![](/images/metaslave/metaslave_init_sucess.png)

### 启动操作

```shell
cd /opt/hengshi
bin/hengshi-sense-bin start metaslave
```

![](/images/metaslave/metaslave_start_sucess.png)

### 停止操作

```shell
cd /opt/hengshi
bin/hengshi-sense-bin stop metaslave
```

### 切换从库操作

1. 提升从库写权限，此次操作需要在 HS_PG_HOST 配置的原从库地址服务器上执行

```shell
cd /opt/hengshi
bin/hengshi-sense-bin promote metadb
```

2. 出现下述述提示请输入 Y 确认此次操作,操作成功界面如下
   ![](/images/metaslave/metaslave_promote.png)
3. 请修改/opt/hengshi/conf/hengshi-sense-env.sh 文件中的 HS_PG_HOST 参数为想要切换为主库的从库地址。
   **注意**
   1. HS_ENGINE_HOST 参数如果未配置请配置，使用默认参数会引用 HS_PG_HOST 参数信息，导致引擎地址错误。
   2. 切换到从库后 PG_METASLAVE_HOST 参数请重新配置，之前配置的主从关系将失效，需要重新进行[初始化操作](#初始化操作)
4. 重启衡石服务完成主从切换操作

```shell
cd /opt/hengshi
bin/hengshi-sense-bin restart hengshi
```

## 集群部署注意事项

1. 将集群操作节点上的（默认 Node-A）的 `/opt/hengshi/ansible/hosts` 以下内容取消注释

```shell
[metaslave] #metadb 数据库从库（选填）可用于主库down机 备用库使用
Node-B
```

2. 将 metadb slave 所在机器节点（默认 Node-B） /opt/hengshi/conf/hengshi-sense-env.sh 中的 export PG_METASLAVE_HOST=(Node-B) 参数指定为 Node-B ，多个 host 用空格分割。

也可以直接更改 Node-A 的 `/opt/hengshi/conf/hengshi-sense-env.sh`，然后使用以下命令进行同步配置文件到其他节点

```shell
./hs_install -m config  -c ../cluster-conf/
```

3. 在集群操作节点上（默认Node-A）上执行初始化和启动操作

```shell
/opt/hengshi/bin/hengshi-sense-bin init metaslave
/opt/hengshi/bin/hengshi-sense-bin start metaslave
```

看到 "streaming" 字样表示主从配置成功
![](/images/metaslave/metadb-slave-streaming.png)

## 容器部署

### 准备工作

1. 使用特定的 docker-compose.yaml 文件部署 Metadb 主从，请联系售后人员
2. 配置 hsenv 文件
   * HS_MASTER_PG_HOST 部署服务节点，服务器 ip 信息（不是 docker 容器内部 ip 信息）
   * HS_SLAVE_PG_HOST 部署从库节点，服务器 ip 信息（不是 docker 容器内部 ip 信息）
3. 请保持 HS_MASTER_PG_HOST 和 HS_SLAVE_PG_HOST 服务器可以正常连通 并且 HS_PG_EXPOSE_PORT 端口互为开放

### 初始化操作

**注意**

1. 初始化 metaslave 前，请保证 metadb 服务处于启动状态。
2. 初始化的从库为只读权限没有写入权限，不可直接连接作为数据库使用

```shell
cd single
docker-compose run --rm metadb init metaslave
```

![](/images/metaslave/metaslave_init_sucess.png)

### 启动操作

```shell
cd single
docker-compose up -d
```

![](/images/metaslave/metaslave_start_sucess.png)

### 停止操作

```shell
cd single
docker-compose down
```

### 切换从库操作

1. 提升从库读写权限，此次操作需要在 HS_SLAVE_PG_HOST 配置的原从库地址服务器上执行

```shell
cd single
docker-compose run --rm metadb promote metadb
```

2. 出现下述述提示请输入 Y 确认此次操作,操作成功界面如下
   ![](/images/metaslave/metaslave_promote.png)
3. 修改hengshi docker-compose/.env 配置文件，`HS_PG_HOST:xxx` 修改为部署从库服务器 ip
4. 重启衡石服务完成主从切换操作

```shell
cd single
docker-compose down
docker-compose up
```

## k8s 部署

### 准备工作

1. 请联系售后人员，获取 metaslave.yaml 配置文件。

### 启动操作

**注意**

1. 执行操作 metaslave 前，请保证 metadb 服务处于启动状态。
2. 初始化的从库为只读权限没有写入权限，不可直接连接作为数据库使用
3. 请确认 configmap.yaml 文件中存在 LOCAL_HOST_NAME 参数配置

```shell
kubectl -n hengshi apply -f configmap.yaml
kubectl -n hengshi apply -f metaslave.yaml
```

### 切换从库操作

1. 提升从库读写权限

```shell
kubectl -n hengshi exec -it metaslave-0 -- /docker-entrypoint.sh promote metadb single
```

2. 出现下述述提示请输入 Y 确认此次操作,操作成功界面如下
   ![](/images/metaslave/metaslave_promote.png)
3. 修改 configmap.yaml 文件，HS_PG_HOST: **metadb-0.hengshi-hs** 参数为 metaslave-0.hengshi-hs
4. 重启衡石服务完成主从切换操作

```shell
kubectl -n hengshi apply -f hengshi.yaml
```
