1 业务背景
-
switchover为维护操作,确保集群状态正常,所有业务结束,并使用pgxc_get_senders_catchup_time()视图查询无主备追赶后,再进行switchover操作。
[Ruby@hcd1 ~]$ gsql -d postgres -p 8000 -ar
gsql ((GaussDB Kernel 505.2.1 build 159cea95) compiled at 2024-12-27 09:22:44 commit 10161 last mr 21504 release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
gaussdb=# select pgxc_get_senders_catchup_time();
pgxc_get_senders_catchup_time
-------------------------------
(0 rows)
gaussdb=#
-
switchover前主动执行一次CHECKPOINT,保证脏页刷盘完成,避免switchover执行超时。
2 命令格式
cm_ctl switchover{ -z <AZ_NAME> | -n <NODE_ID> -D <DATA_DIR> [-q] [-f] | -a [-q] | -A} [-t <SECS>]
3 参数说明
-
-z <AZ_NAME>:将所有GTM、DN主实例切换到指定AZ,AZ_NAME为AZ名称,可通过cm_ctl query -Cvz ALL命令查询。
-
-n <NODE_ID>:将指定的实例切换为主实例,NODE_ID为节点名称,可通过cm_ctl query -Cv命令查询。-n参数需要和-D参数一起使用。
-
-D <DATA_DIR>:将指定的实例切换为主实例,DATA_DIR为指定实例数据目录,可通过cm_ctl query -Cvd命令查询。-D参数需要和-n参数一起使用。
-
-f:指定进行-f类型switchover。-f参数需要和-n以及-D参数一起使用。
-
-a:重置集群主备关系为初始配置状态。
-
-A:将所有GTM、DN实例统一从主切换到备,并选择相应分片的其它实例升主。
-
-t <SECS>:指定超时时间。超时后,会退出并报错。不设置该参数时,cm_ctl switchover命令默认超时时间为120s。
4 示例
1)指定AZ的数据库主备倒换:
cm_ctl switchover -z AZ1
2)指定实例的数据库主备倒换:
cm_ctl switchover -n 1 -D /data1/omm/cluster/data/datanode1p
3)将所有GTM、DN实例统一从主切换到备,并选择相应分片的其它实例升主:
cm_ctl switchover -A
4)重置集群主备关系为初始配置状态:
cm_ctl switchover -a
5) DCC模式下指定cm_server主备切换:
cm_ctl switchover -n 1 -D /data1/omm/cluster/cm/cm_server
5 批注
在有些场景需要做主备切换,如灰度升级,临时解决内存过载等问题。