使用 Docker 部署 openGauss 主备集群
概述
使用 enmotech 提供的 openGauss Docker 镜像 快速搭建一个完整的主备(Primary-Standby)数据库集群。相比于传统的二进制安装,使用 Docker 容器进行部署具有以下优势:
- 环境隔离:每个数据库实例运行在独立的容器中,互不干扰。
- 快速部署:免去了繁琐的环境配置和依赖安装过程。
- 一致性:确保在不同环境中拥有一致的运行环境。
- 易于迁移和扩展:方便在不同宿主机之间迁移和管理。
环境信息
基础信息
| 角色 | 物理机IP | 容器名称 | 数据库服务端口 | 宿主机端口 | 挂载目录 |
|---|---|---|---|---|---|
| 主库 | 172.11.0.101 | opengauss_primary | 5432 | 5432 | /opt/data/openguass/ |
| 从库 | 172.11.0.102 | opengauss_standby | 5432 | 5432 | /opt/data/openguass/ |
软件信息
- 镜像版本:
enmotech/opengauss:latest
环境检查
(可选)使用enmotech提供的cli工具进行环境信息检查。
curl --proto '=https' --tlsv1.2 -sSf https://cdn-mogdb.enmotech.com/ptk/install.sh | sh
$HOME/.ptk/bin/ptk checkos
搭建主备库
启动主库容器
在主库节点(172.11.0.101)上执行以下命令,启动 opengauss_primary 容器:
docker run --restart=always --name opengauss_primary -h opengauss_primary \
--privileged=true \
--network=host \
-v /opt/data/opengauss:/var/lib/opengauss \
-u root \
-e GS_PORT=5432 \
-e OG_SUBNET="172.11.0.0/24" \
-e GS_USERNAME=dbuser \
-e GS_PASSWORD=Secretpassword@123 \
-e NODE_NAME=opengauss_primary \
-e REPL_CONN_INFO="replconninfo1 = 'localhost=172.11.0.101 localport=5434 localservice=5432 remotehost=172.11.0.102 remoteport=5434 remoteservice=5432'\n" \
-d enmotech/opengauss:latest -M primary
启动备库容器
在备库节点(172.11.0.102)上执行以下命令,启动 opengauss_standby 容器:
docker run --restart=always --name opengauss_standby -h opengauss_standby \
--privileged=true \
--network=host \
-v /opt/data/opengauss:/var/lib/opengauss \
-u root \
-e GS_PORT=5432 \
-e OG_SUBNET="172.11.0.0/24" \
-e GS_USERNAME=dbuser \
-e GS_PASSWORD=Secretpassword@123 \
-e NODE_NAME=opengauss_standby \
-e REPL_CONN_INFO="replconninfo1 = 'localhost=172.11.0.102 localport=5434 localservice=5432 remotehost=172.11.0.101 remoteport=5434 remoteservice=5432'\n" \
-d enmotech/opengauss:latest -M standby
参数说明:
REPL_CONN_INFO环境变量用于定义主备节点之间的复制连接信息。
localhost: 当前节点用于复制的 IP 地址。localport: 当前节点用于复制的端口。remotehost: 对端节点用于复制的 IP 地址。remoteport: 对端节点用于复制的端口。 主库和备库的localhost和remotehost配置正好相反。
验证主备同步
登录主库容器。
docker exec -it opengauss_primary /bin/bash
su - omm
使用 gsql 登录数据库。您可以选择以下任意一种方式:
- 快捷方式(推荐,自动读取环境变量):
gsql -r - 完整参数方式:
gsql -U gaussdb -W 'Secretpassword@123' -h 172.11.0.101 -p 5432 postgres
登录成功后,使用 gs_ctl 命令确认主备同步状态。
# docker exec -it opengauss_primary /bin/bash
# su - omm
Last login: Thu Oct 1 23:19:49 UTC 2020 on pts/0
$ gs_ctl query -D /var/lib/opengauss/data/
[2020-10-01 23:21:27.685][316][][gs_ctl]: gs_ctl query ,datadir is -D "/var/lib/opengauss/data"
HA state:
local_role : Primary
static_connections : 1
db_state : Normal
detail_information : Normal
Senders info:
sender_pid : 258
local_role : Primary
peer_role : Standby
peer_state : Normal
state : Streaming
sender_sent_location : 0/3000550
sender_write_location : 0/3000550
sender_flush_location : 0/3000550
sender_replay_location : 0/3000550
receiver_received_location : 0/3000550
receiver_write_location : 0/3000550
receiver_flush_location : 0/3000550
receiver_replay_location : 0/3000550
sync_percent : 100%
sync_state : Sync
sync_priority : 1
sync_most_available : On
channel : 172.11.0.101:5434-->172.11.0.102:53786
Receiver info:
No information