跳到主要内容

附录G 集群管理命令参考

本附录列出业务连续性(Halo Shield)集群管理相关工具的全部命令与选项,包括 clumgrctl(Halo Shield 集群管理工具,基于 Patroni 封装)与 etcdctl(etcd 分布式协调服务管理工具)。

  • G.1 clumgrctl:业务连续性集群的成员管理、主备切换、配置维护等操作。
  • G.2 etcdctl:etcd 集群的成员、端点状态与健康检查。

本附录基于 Halo 1.0.16 所附带的 clumgrctl 4.0.6 与 etcd 3.5.10 版本编写。不同版本间命令行参数与输出格式可能略有差异,可用 clumgrctl version、etcdctl version 查看实际版本。

clumgrctl(业务连续性集群管理)​

clumgrctl 是业务连续性集群的管理命令行工具,用于查看集群状态、执行主备切换、管理成员与配置等。使用格式:

clumgrctl [OPTIONS] COMMAND [ARGS]...

通用选项(所有子命令均可使用):

选项说明
-c, --config-file TEXT指定配置文件
-d, --dcs-url, --dcs TEXTDCS(分布式配置存储)连接地址
-k, --insecure允许连接无证书的 SSL 站点
--help显示帮助信息

命令总览​

命令说明
list列出集群所有成员的角色、状态、复制延迟
show-config查看集群当前生效的动态配置
edit-config编辑集群动态配置
reload重载成员配置
switchover计划内主备切换
failover故障转移
reinit重新初始化集群成员
restart重启集群成员
pause暂停自动故障转移
resume恢复自动故障转移
history查看切换/故障转移历史
topology以树状结构查看集群拓扑
dsn生成成员或 Leader 的连接串
version查看 clumgrctl 或运行中实例的版本
flush丢弃已调度的 restart/switchover 事件
query对集群数据库成员执行 SQL 查询
remove从 DCS 移除集群(危险操作,下线集群时使用)

命令详解​

list — 列出集群成员

列出指定集群的所有成员及其角色、状态、复制延迟等信息。

clumgrctl list [CLUSTER_NAMES]...
选项说明
--group INTEGERCitus group
-e, --extended显示额外信息
-t, --timestamp打印时间戳
-f, --format [pretty|tsv|json|yaml|yml]输出格式
-W每 2 秒自动刷新一次
-w, --watch FLOAT每 X 秒自动刷新一次

执行示例:

clumgrctl list

输出示例:

+ Cluster: halo-cluster (7658605376259660485) -------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------+---------------------+---------+-----------+----+-----------+
| node1 | 192.168.10.146:1921 | Leader | running | 9 | |
| node2 | 192.168.10.147:1921 | Replica | streaming | 9 | 0 |
| node3 | 192.168.10.148:1921 | Replica | streaming | 9 | 0 |
+--------+---------------------+---------+-----------+----+-----------+

show-config — 查看集群动态配置

查看当前生效的 DCS 动态配置。

clumgrctl show-config [CLUSTER_NAME]
选项说明
--group INTEGERCitus group

执行示例:

clumgrctl show-config

输出示例:

loop_wait: 10
master_start_timeout: 300
maximum_lag_on_failover: 1048576
postgresql:
parameters:
hot_standby: 'on'
max_replication_slots: 10
max_wal_senders: 10
wal_level: replica
wal_log_hints: 'on'
use_pg_rewind: true
use_slots: true
retry_timeout: 10
synchronous_mode: false
ttl: 30

edit-config — 编辑集群动态配置

编辑集群的动态配置。修改前建议先用 show-config 查看当前配置。

clumgrctl edit-config [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
-q, --quiet不显示变更内容
-s, --set TEXT设置指定的配置值,可多次指定
-p, --pg TEXT设置数据库参数值(-s postgresql.parameters 的简写),可多次指定
--apply TEXT从文件应用配置(- 表示从标准输入)
--replace TEXT从文件应用配置并替换现有配置(- 表示从标准输入)
--force全程不询问确认

执行示例:

clumgrctl edit-config

该命令会打开编辑器修改动态配置,保存后立即生效并持久化到 etcd。修改前建议先用 show-config 查看当前配置。

reload — 重载成员配置

重载指定成员的配置。

clumgrctl reload CLUSTER_NAME [MEMBER_NAMES]...
选项说明
--group INTEGERCitus group
-r, --role [leader|primary|standby-leader|replica|standby|any]仅重载具有该角色的成员
--force全程不询问确认

执行示例:

clumgrctl reload halo-cluster node1

输出示例:

Success: reload on member node1

switchover — 计划内主备切换

将主库切换到指定的副本,适用于计划内维护。切换期间业务会有短暂中断。

clumgrctl switchover [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
--leader, --primary TEXT当前主库的名称
--candidate TEXT候选主库的名称
--scheduled TEXT调度切换的时间戳(明确的格式,如 ISO 8601)
--force全程不询问确认

执行示例:

clumgrctl switchover

交互式输入:

Master [node1]:
Candidate ['node2', 'node3']: node2
When should the switchover take place (e.g. 2026-05-10T13:57) [now]:
Are you sure you want to switchover cluster halo-cluster, demoting current master node1? [y/N]: y

输出示例:

2026-05-10 12:57:57.44645 Successfully switched over to "node2"

failover — 故障转移

将主库角色转移到副本,通常在主库异常时使用。

clumgrctl failover [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
--candidate TEXT候选主库的名称
--force全程不询问确认

执行示例:

clumgrctl failover

交互式输入:

Candidate ['node2', 'node3']: node2
Are you sure you want to failover cluster halo-cluster, demoting current master node1? [y/N]: y

reinit — 重新初始化成员

重新初始化指定的集群成员(基于主库重建副本数据)。

clumgrctl reinit CLUSTER_NAME [MEMBER_NAMES]...
选项说明
--group INTEGERCitus group
--force全程不询问确认
--wait等待重新初始化完成

执行示例:

clumgrctl reinit halo-cluster node3

输出示例:

Are you sure you want to reinitialize members node3? [y/N]: y
Success: reinitialize for member node3

restart — 重启成员

重启指定的集群成员。

clumgrctl restart CLUSTER_NAME [MEMBER_NAMES]...
选项说明
--group INTEGERCitus group
-r, --role [leader|primary|standby-leader|replica|standby|any]仅重启具有该角色的成员
--any仅重启单个成员
--scheduled TEXT调度重启的时间戳(明确的格式,如 ISO 8601)
--db-version TEXT当数据库版本低于指定值时重启(如 13.5)
--pending当处于 pending 状态时重启
--timeout TEXT重启超过该时长则报错并在必要时切换
--force全程不询问确认

执行示例:

clumgrctl restart halo-cluster node3

输出示例:

Are you sure you want to restart members node3? [y/N]: y
Restart if the Halo version is less than provided (e.g. 1.0.16) []:
Success: restart on member node3

pause — 暂停自动故障转移

暂停集群的自动故障转移(进入维护模式)。维护操作前常先 pause,避免误触发切换。

clumgrctl pause [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
--wait等待暂停在所有节点生效

执行示例:

clumgrctl pause

输出示例:

Success: cluster management is paused

再次执行 clumgrctl list 时会在表尾显示 Maintenance mode: on。

resume — 恢复自动故障转移

恢复集群的自动故障转移(退出维护模式)。

clumgrctl resume [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
--wait等待暂停在所有节点清除

history — 查看切换历史

查看集群的故障转移/主备切换历史。

clumgrctl history [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
-f, --format [pretty|tsv|json|yaml|yml]输出格式

执行示例:

clumgrctl history

输出示例:

+----+-----------+------------------------------+----------------------------------+------------+
| TL | LSN | Reason | Timestamp | New Leader |
+----+-----------+------------------------------+----------------------------------+------------+
| 1 | 167772320 | no recovery target specified | 2026-07-08T11:35:15.555857+08:00 | node1 |
| 2 | 184549536 | no recovery target specified | 2026-07-10T08:38:09.891873+08:00 | node1 |
| 3 | 201326752 | no recovery target specified | 2026-07-15T11:56:27.136833+08:00 | node1 |
+----+-----------+------------------------------+----------------------------------+------------+

topology — 查看集群拓扑

以树状结构(ASCII)显示集群拓扑,可直观看出副本挂在哪个主库下。

clumgrctl topology [CLUSTER_NAMES]...
选项说明
--group INTEGERCitus group
-W每 2 秒自动刷新一次
-w, --watch FLOAT每 X 秒自动刷新一次

执行示例:

clumgrctl topology halo-cluster

输出示例:

+ Cluster: halo-cluster (7658605376259660485) --------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+---------+---------------------+---------+-----------+----+-----------+
| node1 | 192.168.10.146:1921 | Leader | running | 9 | |
| + node2 | 192.168.10.147:1921 | Replica | streaming | 9 | 0 |
| + node3 | 192.168.10.148:1921 | Replica | streaming | 9 | 0 |
+---------+---------------------+---------+-----------+----+-----------+

成员名前的 + 表示该节点为从库,缩进挂载在其主库之下。

dsn — 生成连接串

生成指定成员或当前 Leader 的数据库连接信息。不指定 -m 时默认返回 Leader 的连接串。

clumgrctl dsn [CLUSTER_NAME]
选项说明
-r, --role [leader|primary|standby-leader|replica|standby|any]返回具有该角色的任意成员的连接串
-m, --member TEXT生成该成员的连接串
--group INTEGERCitus group

执行示例:

clumgrctl dsn -m node1 halo-cluster

输出示例:

host=192.168.10.146 port=1921

不指定 -m 时默认返回 Leader 的连接串。

version — 查看版本

查看 clumgrctl 命令自身的版本,或运行中的 Clustermgr 实例的版本。

clumgrctl version [CLUSTER_NAME] [MEMBER_NAMES]...
选项说明
--group INTEGERCitus group

执行示例:

clumgrctl version

输出示例:

clumgrctl version 4.0.6

flush — 丢弃已调度的事件

丢弃已调度的 restart 或 switchover 事件(例如此前通过 --scheduled 排程但尚未执行的切换/重启)。

clumgrctl flush CLUSTER_NAME [MEMBER_NAMES]... {restart|switchover}
选项说明
--group INTEGERCitus group
-r, --role [leader|primary|standby-leader|replica|standby|any]仅丢弃具有该角色成员的事件
--force全程不询问确认

query — 查询集群数据库成员

对集群中的数据库成员执行 SQL 查询。

说明:执行 query 前需确保 clustermgr 配置文件中 postgresql.pgpass 指定的 .pgpass 文件已正确创建(权限 600),或已通过其他方式配置免密连接,否则会因无法提供密码而连接失败。

clumgrctl query [CLUSTER_NAME]
选项说明
--group INTEGERCitus group
--format TEXT输出格式(pretty / tsv / json / yaml)
-f, --file FILENAME从该文件执行 SQL 命令
--password强制提示输入口令
-U, --username TEXT数据库用户名
-W每 2 秒自动刷新一次
-w, --watch FLOAT每 X 秒自动刷新一次
-r, --role [leader|primary|standby-leader|replica|standby|any]查询具有该角色的成员
-m, --member TEXT查询指定成员
--delimiter TEXT列分隔符
-c, --command TEXT要执行的 SQL 命令
-d, --dbname TEXT要连接的数据库名

remove — 从 DCS 移除集群

将集群从 DCS(分布式配置存储)中移除。此操作危险,会清空集群的协调信息,仅在彻底下线集群时使用。

clumgrctl remove CLUSTER_NAME
选项说明
--group INTEGERCitus group
-f, --format [pretty|tsv|json|yaml|yml]输出格式

etcdctl(etcd 集群管理)​

etcdctl 是 etcd 分布式协调服务的命令行管理工具。业务连续性方案使用 etcd 作为 DCS,常用操作为查看端点状态、成员列表与健康检查。使用格式:

etcdctl [OPTIONS] COMMAND [ARGS]...

说明:本节仅列出业务连续性运维中常用的几条 etcdctl 命令。etcdctl 完整命令集请参考 etcd 官方文档或 etcdctl --help。

endpoint status — 查看 etcd 集群状态​

查看各 etcd 节点的版本、DB 大小、是否 Leader、Raft 索引等信息。

etcdctl endpoint status --cluster=true -w table

输出示例:

+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://192.168.10.147:2379 | 1caa36c5119bc134 | 3.5.10 | 49 kB | true | false | 6 | 144 | 144 | |
| http://192.168.10.148:2379 | 865099e2e3dbfe8e | 3.5.10 | 49 kB | false | false | 6 | 144 | 144 | |
| http://192.168.10.146:2379 | f5e1b2ef0f9c8a0b | 3.5.10 | 49 kB | false | false | 6 | 144 | 144 | |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

member list — 查看 etcd 成员​

列出 etcd 集群所有成员及其 peer/client 地址。

etcdctl member list -w table

输出示例:

+------------------+---------+------------+----------------------------+----------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+------------+----------------------------+----------------------------+------------+
| 1caa36c5119bc134 | started | etcd_node2 | http://192.168.10.147:2380 | http://192.168.10.147:2379 | false |
| 865099e2e3dbfe8e | started | etcd_node3 | http://192.168.10.148:2380 | http://192.168.10.148:2379 | false |
| f5e1b2ef0f9c8a0b | started | etcd_node1 | http://192.168.10.146:2380 | http://192.168.10.146:2379 | false |
+------------------+---------+------------+----------------------------+----------------------------+------------+

endpoint health — 检查 etcd 健康​

检查所有 etcd 端点是否可正常提交提案。

etcdctl endpoint health --cluster=true

输出示例:

http://192.168.10.146:2379 is healthy: successfully committed proposal: took = 12.339568ms
http://192.168.10.147:2379 is healthy: successfully committed proposal: took = 12.354846ms
http://192.168.10.148:2379 is healthy: successfully committed proposal: took = 12.788127ms