GaussDB 集中式架构无需数据分片,由单一数据节点组承担全部的事务与存储。为满足不同业务场景的容灾与成本要求,集中式集群演化出了多种部署形态,并通过 gs_om、cm_ctl 和 gs_ctl 管理工具实现高可用与系统运维。
1. 集中式集群部署形态
集中式集群通常采用 一主多备 的架构保证高可用与数据零丢失。集中式集群可安装的组件主要是:DN、CM 和 ETCD(可选),相比于分布式集群不需要部署 GTM 和 CN 组件。
-
单机形态(1 DN + CMS)
-
单
DN,无备机,仅CMS+DN。 -
无高可用能力,只用于测试/开发,生产禁用。
-
-
1 主 1 备(2 节点)
-
一主一备,主备之间基于 流复制 同步 WAL 日志。
-
每个 DN 本地存储一份完整数据,互为独立副本。
-
可在第 3 个节点部署轻量级的
CMS+ETCD(可选)实现仲裁。
-
-
1 主 1 备 1 日志(3 节点)
-
主 DN + 备 DN + 独立日志节点(Logger,只存 WAL 不存数据文件)。
-
比 1 主 2 备 省一份数据盘成本,可靠性略低但够用,满足基本的 Quorum 多数派仲裁。
-
集群角色有:
Primary/Standby/Secondary(日志节点)。
-
-
1 主 1 备 1 日志(共享存储 loggerdorado)
-
存算分离架构。主备 DN 挂载同一集中式共享存储(如
OceanStor Dorado),数据文件仅一份。 -
主 DN:对外提供服务,处理
SQL,生成WAL日志,写入共享存储的日志区。 -
备 DN:不独立存储数据,实时读取共享存储中的
WAL日志进行回放,保持内存状态接近主库。 -
数据文件、WAL 日志均只有一份,存放在共享存储,主备都挂载同一个卷。
-
-
1 主 2 备(3 节点)
-
经典生产部署模式。满足
Quorum多数派强一致。 -
支持单节点故障无缝切换、同城跨 AZ 容灾,保障 RPO=0 与秒级自动切主。
-
-
1 主 3 备(4 节点)
-
金融级/同城异地多中心场景,支持多节点同时故障下的业务连续性与异地灾备。
-
具体的集中式集群部署方案,需结合副本数要求、同城/异地容灾中心布局、可用区(AZ)数量等因素综合设计,以确保业务在故障场景下满足 RPO/RTO 指标要求。
2. 三个层级的管理工具
GaussDB 提供了 gs_om、cm_ctl 和 gs_ctl 三个不同层级的集群管理工具,分别服务于集群整体维护、节点服务控制和 集群实例控制。
2.1 gs_om 集群级管理
gs_om 是集群级部署与运维的工具,涵盖安装、扩容、配置修改、整体启停。
-
定位:集群整体维护工具,提供全面的集群管理功能。
-
功能:包括启动/停止/重启集群、查询集群状态、生成配置文件、SSL 证书替换、负载检查等,覆盖集群生命周期管理。
-
特点:功能最全面,是集群运维的入口工具,通常由操作系统用户
omm执行。
2.1.1 查看集群状态
-
查看集群是否正常
# 1. 查看集群整体状态
[omm@gauss1 ~]$ gs_om -t status
-----------------------------------------------------------------------
cluster_state : Normal
redistributing : No
balanced : Yes
-----------------------------------------------------------------------
-
查看集群中各个节点实例的运行状态、主备角色及健康详情
[omm@gauss1 ~]$ gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
-------------------------------------------------------------------------------
1 192.168.182.138 192.168.182.138 1 /data/cluster/data/cm/cm_server Primary
2 192.168.182.139 192.168.182.139 2 /data/cluster/data/cm/cm_server Standby
3 192.168.182.140 192.168.182.140 3 /data/cluster/data/cm/cm_server Standby
[ ETCD State ]
node node_ip instance state
-----------------------------------------------------------------------------
1 192.168.182.138 192.168.182.138 7001 /data/cluster/data/etcd StateLeader
2 192.168.182.139 192.168.182.139 7002 /data/cluster/data/etcd StateFollower
3 192.168.182.140 192.168.182.140 7003 /data/cluster/data/etcd StateFollower
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state | node node_ip instance state | node node_ip instance state
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 192.168.182.138 192.168.182.138 6001 /data/cluster/data/dn/dn_6001 P Primary Normal | 2 192.168.182.139 192.168.182.139 6002 /data/cluster/data/dn/dn_6002 S Standby Normal | 3 192.168.182.140 192.168.182.140 6003 /data/cluster/data/dn/dn_6003 R Secondary Normal
# Secondary 表示 Logger 节点
[omm@gauss3 ~]$ gs_ctl query -D /data/cluster/data/dn/dn_6003/
[2026-09-08 18:23:29.000][221141][][gs_ctl]: gs_ctl query ,datadir is /data/cluster/data/dn/dn_6003
HA state:
local_role : Secondary
static_connections : 2
db_state : Normal
detail_information : Normal
Paxos replication info:
paxos_write_location : 0/BF08070
paxos_commit_location : 0/BF07F30
local_write_location : 0/BF08070
local_flush_location : 0/BF08070
local_replay_location : 0/0
dcf_replication_info : {"stream_id":1,"local_node_id":3,"role":"LOGGER","term":911,"run_mode":1,"work_mode":0,"stg_mode":1,"is_fixed_leader":0,"hb_interval":1000,"elc_timeout":3000,"auto_elc_pri_en":1,"elc_switch_thd":0,"group":2,"priority":0,"leader_group":0,"is_in_major":1,"applied_index":5860,"commit_index":5860,"first_index":1,"last_index":200310896,"last_term":911,"dcf_last_index":5861,"dcf_last_disk":5860,"is_arbitrating":0,"cluster_mode":"primary_cluster","leader_id":1,"leader_ip":"192.168.182.138","leader_port":30106,"nodes":[{"node_id":1,"ip":"192.168.182.138","port":30106,"role":"LEADER"},{"node_id":2,"ip":"192.168.182.139","port":30106,"role":"FOLLOWER"},{"node_id":3,"ip":"192.168.182.140","port":30106,"role":"LOGGER"}]}
2.1.2 管理集群
-
关闭集群
[omm@gauss1 ~]$ gs_om -t stop
Stopping cluster.
=========================================
the Stop cmd is source /home/omm/gauss_env_file ; cm_ctl stop -m fast.
Successfully stopped cluster.
=========================================
End stop cluster.
-
启动集群
[omm@gauss1 ~]$ gs_om -t start
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state : Normal
redistributing : No
node_count : 3
Coordinator State
normal : 0
abnormal : 0
GTM State
primary : 0
standby : 0
abnormal : 0
down : 0
Datanode State
primary : 1
standby : 1
secondary : 1
building : 0
abnormal : 0
down : 0
Successfully started cluster.
启动了三个节点,分别是 Primary、Standby 和 Secondary 。
-
生成静态配置
[omm@gauss1 pylib]$ gs_om -t generateconf -X /data/cluster/tools/clusterConfig.xml --distribute
Generating static configuration files for all nodes.
Creating temp directory to store static configuration files.
Successfully created the temp directory.
Generating static configuration files.
Successfully generated static configuration files.
Static configuration files for all nodes are saved in /data/cluster/tools/script/static_config_files.
Distributing static configuration files to all nodes.
Successfully distributed static configuration files.
[root@gauss1 static_config_files]# ll
total 276
-rw------- 1 omm omm 106496 Sep 8 18:43 cluster_static_config_192.168.182.138
-rw------- 1 omm omm 106496 Sep 8 18:43 cluster_static_config_192.168.182.139
-rw------- 1 omm omm 106496 Sep 8 18:43 cluster_static_config_192.168.182.140
静态配置文件已成功生成并分发至所有节点,但是配置文件不能直接手动修改。如需修改静态配置需编辑原始配置文件 /data/cluster/tools/clusterConfig.xml ,再次执行生成和分发命令,重启集群使配置生效。如果修改的是 postgresql.conf 参数,可借助 gs_guc 命令。
2.2 cm_ctl 高可用管理
cm_ctl:集群高可用专用工具,负责故障切换、集群状态监控、主备管理。专门管理底层高可用组件(CM),处理脑裂、仲裁等核心故障。
-
定位:集群实例级控制工具,主要用于集群服务自恢复及 OM(运维管理模块)调用。
-
功能:通过启停文件实现集群的启动、停止,支持磁盘 I/O 检测等高可用功能(如仲裁主备切换),并可动态修改检测规则。
-
特点:直接操作集群实例服务,是集群自愈能力的核心组件。
查看服务状态
# 看集群+实例+主备关系
[omm@gauss1 ~]$ cm_ctl query -Cv
[ CMServer State ]
node instance state
-----------------------------------
1 192.168.182.138 1 Primary
2 192.168.182.139 2 Standby
3 192.168.182.140 3 Standby
[ ETCD State ]
node instance state
-----------------------------------------
1 192.168.182.138 7001 StateFollower
2 192.168.182.139 7002 StateLeader
3 192.168.182.140 7003 StateFollower
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node instance state | node instance state | node instance state
---------------------------------------------------------------------------------------------------------------------------------------------
1 192.168.182.138 6001 P Primary Normal | 2 192.168.182.139 6002 S Standby Normal | 3 192.168.182.140 6003 R Secondary Normal
查看详细信息(等同于 gs_om -t status --detail)
[omm@gauss1 ~]$ cm_ctl query -Cvdipz ALL
[ CMServer State ]
node node_ip instance state
-----------------------------------------------------------------------------------
AZ1 1 192.168.182.138 192.168.182.138 1 /data/cluster/data/cm/cm_server Primary
AZ2 2 192.168.182.139 192.168.182.139 2 /data/cluster/data/cm/cm_server Standby
AZ3 3 192.168.182.140 192.168.182.140 3 /data/cluster/data/cm/cm_server Standby
[ ETCD State ]
node node_ip instance state
---------------------------------------------------------------------------------
AZ1 1 192.168.182.138 192.168.182.138 7001 /data/cluster/data/etcd StateFollower
AZ2 2 192.168.182.139 192.168.182.139 7002 /data/cluster/data/etcd StateLeader
AZ3 3 192.168.182.140 192.168.182.140 7003 /data/cluster/data/etcd StateFollower
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state | node node_ip instance state | node node_ip instance state
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AZ1 1 192.168.182.138 192.168.182.138 6001 30100 /data/cluster/data/dn/dn_6001 P Primary Normal | AZ2 2 192.168.182.139 192.168.182.139 6002 30100 /data/cluster/data/dn/dn_6002 S Standby Normal | AZ3 3 192.168.182.140 192.168.182.140 6003 30100 /data/cluster/data/dn/dn_6003 R Secondary Normal
查看是否有不均衡/切换中
[omm@gauss1 ~]$ cm_ctl query -Cvs
[ Datanode State ]
node instance state | node instance state | node instance state
---------------------------------------------------------------------------------------------------------------------------------------------
(no need to switchover datanodes)
管理集群
# 启动 CM 集群
cm_ctl start
cm_ctl start -n 3
# 停止集群
cm_ctl stop
# -n 参数指定启动 Gaussdb 的主机 NODEID)
cm_ctl stop -n 3
均衡整个集群
[omm@gauss1 ~]$ cm_ctl switchover -a
.
cm_ctl: switchover successfully.
执行切换
cm_ctl switchover -n nodeid -D datadir_path
[omm@gauss1 ~]$ cm_ctl switchover -n 2 -D /data/cluster/data/dn/dn_6002
..........
cm_ctl: switchover successfully.
# 查看集群章台,node2 现在是 Primary
[ Datanode State ]
node instance state | node instance state | node instance state
---------------------------------------------------------------------------------------------------------------------------------------------
1 192.168.182.138 6001 P Standby Normal | 2 192.168.182.139 6002 S Primary Normal | 3 192.168.182.140 6003 R Secondary Normal
主备延时查询
[omm@gauss1 ~]$ cm_ctl query -rv |grep delay
delay(est.) : 0 s
delay(est.) : unknown
主备延时也可以通过 pg_stat_replication 在 gsql 中查询,后面在《常用 SQL 语句》中再介绍。
2.3 gs_ctl 节点级管理
gs_ctl:管理单个节点的启停、状态查询等,不涉及集群级协调;
-
定位:节点级服务控制工具,专注于单个数据库节点的启停及状态查询。
-
功能:由数据库管理模块调用,支持启动、停止、重启 GaussDB 节点,且可在不中断数据库的情况下执行操作。
-
特点:轻量级,适用于节点级维护,不涉及集群整体状态管理。
查看单实例状态
[omm@gauss1 ~]$ gs_ctl status -D /data/cluster/data/dn/dn_6001/
[2026-09-08 20:12:05.462][348210][][gs_ctl]: gs_ctl status,datadir is /data/cluster/data/dn/dn_6001
gs_ctl: server is running (PID: 343182)
/data/cluster/core/app/bin/gaussdb "-D" "/data/cluster/data/dn/dn_6001" "-M" "standby"
单实例启动/停止/重启(仅在 OM 管不到或排障时用)
[omm@gauss1 ~]$ gs_ctl stop -D /data/cluster/data/dn/dn_6001 -m fast
[2026-09-08 20:14:00.227][349760][][gs_ctl]: gs_ctl stopped ,datadir is /data/cluster/data/dn/dn_6001
waiting for server to shut down....................... done
server stopped
gs_ctl start -D /data/cluster/data/dn/dn_6001
gs_ctl restart -D /data/cluster/data/dn/dn_6001
重载参数(不重启服务)
gs_ctl reload -D /data/cluster/data/dn/dn_6001
备机重建(备 DN 数据损坏/落后太多)
[omm@gauss1 ~]$ gs_ctl build -D /data/cluster/data/dn/dn_6001 -b full
[2026-09-08 20:16:32.559][352939][][gs_ctl]: gs_ctl full build ,datadir is /data/cluster/data/dn/dn_6001
[2026-09-08 20:16:32.559][352939][][gs_ctl]: fopen build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
[2026-09-08 20:16:32.559][352939][][gs_ctl]: fprintf build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
[2026-09-08 20:16:32.560][352939][][gs_ctl]: fsync build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
Current instance: dn_6001 and pgxc node name: dn_6001_6002_6003
waiting for server to shut down.... done
server stopped
[2026-09-08 20:16:33.598][352939][dn_6001_6002_6003][gs_ctl]: current workdir is (/home/omm).
[2026-09-08 20:16:33.598][352939][dn_6001_6002_6003][gs_ctl]: set gaussdb state file when full build build:db state(BUILDING_STATE), server mode(STANDBY_MODE), build mode(FULL_BUILD).
[2026-09-08 20:16:33.599][352939][dn_6001_6002_6003][gs_ctl]: Get repl_auth_mode is and repl_uuid is
[2026-09-08 20:16:33.627][352939][dn_6001_6002_6003][gs_ctl]: build try host(192.168.182.139) port(30101) success
[2026-09-08 20:16:33.627][352939][dn_6001_6002_6003][gs_ctl]: connected to server success, build started.
[2026-09-08 20:16:33.640][352939][dn_6001_6002_6003][gs_ctl]: DCF path is '/data/cluster/data/dn/dn_6001/dcf_data'
[2026-09-08 20:16:33.640][352939][dn_6001_6002_6003][gs_ctl]: Final DCF path is /data/cluster/data/dn/dn_6001/dcf_data
[2026-09-08 20:16:33.640][352939][dn_6001_6002_6003][gs_ctl]: Remove dcf data dir /data/cluster/data/dn/dn_6001/dcf_data.
[2026-09-08 20:16:33.641][352939][dn_6001_6002_6003][gs_ctl]: DCF path is '/data/cluster/logs/gaussdb/omm/dcf_log/dn_6001'
[2026-09-08 20:16:33.641][352939][dn_6001_6002_6003][gs_ctl]: Final DCF path is /data/cluster/logs/gaussdb/omm/dcf_log/dn_6001
...
[2026-09-08 20:17:00.687][352939][dn_6001_6002_6003][gs_ctl]: done
[2026-09-08 20:17:00.687][352939][dn_6001_6002_6003][gs_ctl]: server started (/data/cluster/data/dn/dn_6001)
[2026-09-08 20:17:00.687][352939][dn_6001_6002_6003][gs_ctl]: fopen build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
[2026-09-08 20:17:00.688][352939][dn_6001_6002_6003][gs_ctl]: fprintf build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
[2026-09-08 20:17:00.693][352939][dn_6001_6002_6003][gs_ctl]: fsync build pid file "/data/cluster/data/dn/dn_6001/gs_build.pid" success
# 看 build 进度
[2026-09-08 20:17:04.840][354020][][gs_ctl]: gs_ctl build query ,datadir is /data/cluster/data/dn/dn_6001
HA state:
local_role : Standby
static_connections : 2
db_state : Build completed
sync_mode : Async
主备切换(单实例层面)
[omm@gauss1 ~]$ gs_ctl switchover -D /data/cluster/data/dn/dn_6001
[2026-09-08 20:17:54.854][355126][][gs_ctl]: gs_ctl switchover ,datadir is /data/cluster/data/dn/dn_6001
[2026-09-08 20:17:54.854][355126][][gs_ctl]: switchover term (1)
[2026-09-08 20:17:54.881][355126][][gs_ctl]: waiting for server to switchover...............................................................
[2026-09-08 20:18:56.383][355126][][gs_ctl]:
switchover timeout after 60 seconds. please manually check the cluster status.
# 原主不可用才用
gs_ctl failover -D /data/cluster/data/dn/dn_6002
查询当前数据库实例信息及基于 DCF 的 Paxos 复制详情
[omm@gauss1 dn_6001]$ gs_ctl query -D /data/cluster/data/dn/dn_6001
[2026-09-08 20:18:41.889][355974][][gs_ctl]: gs_ctl query ,datadir is /data/cluster/data/dn/dn_6001
HA state:
local_role : Standby
static_connections : 2
db_state : Normal
detail_information : Normal
Paxos replication info:
paxos_write_location : 0/E0396B8
paxos_commit_location : 0/E0396B8
local_write_location : 0/E0396B8
local_flush_location : 0/E0396B8
local_replay_location : 0/E0396B8
dcf_replication_info : {"stream_id":1,"local_node_id":1,"role":"FOLLOWER","term":1215,"run_mode":1,"work_mode":0,"stg_mode":1,"is_fixed_leader":0,"hb_interval":1000,"elc_timeout":3000,"auto_elc_pri_en":1,"elc_switch_thd":0,"group":0,"priority":235116216,"leader_group":1,"is_in_major":1,"applied_index":6819,"commit_index":6819,"first_index":1,"last_index":235116216,"last_term":1215,"dcf_last_index":6819,"dcf_last_disk":6819,"is_arbitrating":0,"cluster_mode":"primary_cluster","leader_id":2,"leader_ip":"192.168.182.139","leader_port":30106,"nodes":[{"node_id":1,"ip":"192.168.182.138","port":30106,"role":"FOLLOWER"},{"node_id":2,"ip":"192.168.182.139","port":30106,"role":"LEADER"},{"node_id":3,"ip":"192.168.182.140","port":30106,"role":"LOGGER"}]}
-
本地角色与状态
-
local_role: Standby:当前节点是一个备机。 -
db_state: Normal:数据库实例本身的运行状态正常。
-
-
DCF / Paxos 集群信息
-
role: FOLLOWER:当前节点在Paxos组中处于Follower角色。 -
leader_id: 2/leader_ip: 192.168.182.139:当前集群的 Leader(主节点)在节点 2 上。
-
-
集群节点拓扑:
-
节点 1 (
192.168.182.138):角色为FOLLOWER(即当前查询的本地节点) -
节点 2 (
192.168.182.139):角色为LEADER(主节点)。 -
节点 3 (
192.168.182.140):角色为LOGGER(日志投票节点,不参与计算但参与共识投票)。
-
转载:公众号实战派K8S&DB

237

被折叠的 条评论
为什么被折叠?



