lamess / 使用 Docker 部署 openGauss 主备集群

Created Thu, 16 Apr 2026 13:13:35 +0800 Modified Thu, 16 Apr 2026 14:37:39 +0800

使用 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: 对端节点用于复制的端口。 主库和备库的 localhostremotehost 配置正好相反。

验证主备同步

登录主库容器。

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