单AZ拉起
在部署两地三中心集群时,如果生产中心AZ1和同城的灾备中心AZ2同时发生故障(例如地震灾害等情况),异地灾备中心AZ3仅作为一个备份,集群不会自动切换到AZ3运行,此时需要手动拉起AZ3来提供服务。
单AZ拉起可能丢失部分数据,请谨慎使用此操作。
- 指定单AZ拉起的操作,只适用于两地三中心3个AZ,且AZ1、AZ2同时故障的场景。在其他场景下,此操作可能会导致数据库服务异常。
- 拉起后的单AZ,数据库只能进行DML操作,不能进行DDL操作。【仅适用于使用Zenith_HA内核的单AZ拉起】
- 拉起后的单AZ,数据库可对外提供正常服务。【仅适用于使用Zenith_Zpaxos内核的单AZ拉起】
- 拉起指定单AZ之后,禁止使用单AZ拉起功能再拉起其他AZ。如果继续拉起其他AZ,可能会导致集群脑裂。
- 拉起AZ3之后,集群拓扑结构中只包含AZ3的CN和主DN实例信息,其他CN,DN信息被移除。【仅适用于使用Zenith_Zpaxos内核的单AZ拉起】
- 拉起AZ3之后,集群拓扑结构中仍包含AZ1,AZ2中的CM SERVER信息,使用启停集群命令时,会作用于整个集群(AZ1,AZ2,AZ3),拉起非AZ3中的实例,会显示超时失败。【仅适用于使用Zenith_Zpaxos内核的单AZ拉起】
- 拉起AZ3之后,集群拓扑结构中仍包含AZ1和AZ2的实例信息,此时被拉起的AZ3实例状态显示为ONLINE,其他AZ实例状态显示为OFFLINE。使用启停集群命令时会作用于整个集群(包含AZ1,AZ2,AZ3)。【仅适用于使用Zenith_HA内核的单AZ拉起】
- 拉起AZ3时,AZ3中备DN实例会被强起为主DN,在业务量大的场景下,备机日志落后较多持续重演,可能会导致首次拉起超时失败,这种情况下,需等待备机补齐日志正常。用户登录启动的主DN,使用命令“select DBMS_RAFT.raft_query_info();”查询视图,成功返回查询结果,则备机补齐日志,可重新拉起AZ3。【仅适用于使用Zenith_Zpaxos内核的单AZ拉起】
- 拉起AZ3时,AZ3中备DN实例在集群启动后会升为主DN,在业务量大的场景下,备机日志落后较多持续重演,可能会导致首次拉起超时失败,这种情况下,等待集群状态为非Unavailable时,备机补齐日志正常后,可重新拉起AZ3。【仅适用于使用Zenith_HA内核的单AZ拉起】
- 进行过主备切换后,如果当前集群状态中balanced字段为false,再继续执行单AZ拉起,集群状态中balanced字段会显示为true,但实际集群DN主备状态并未改变。
前提条件
指定拉起的AZ中部署2个或2个以上的ETCD实例,且同时部署CM SERVER、CN实例,每个DN组至少部署一个DN实例。
注意事项
单AZ拉起暂不支持安装有GTS的集群。
操作步骤
- 以omm用户身份登录GaussDB 100所在的任意服务器。
- 使用如下命令指定单AZ拉起。AZ3为指定要拉起的AZ。
gs_om -t start --az=AZ3
- 清理每个DN残留两阶段事务。
用户可根据自己的情况进行提交或回滚两阶段事务,下面以回滚所有DN上残留的两阶段事务为例。- 连接DN。
zsql omm@127.0.0.1:40000 Please enter password: ***********
40000为DN的端口号,可以通过查看安装配置文件clusterconfig.xml中dataPortBase对应的值确认自定义的DN端口号。
127.0.0.1为本节点IP,如果要连接其他节点上的DN,此处应为其他节点的IP。
- 回退两阶段事务。
SELECT GLOBAL_TRAN_ID FROM SYS.SYS_PENDING_TRANS;
如果上述SELECT查询有结果,说明有残留的两阶段事务,那么需要通过rollback来回滚残留事务。
执行命令ROLLBACK PREPARED 'XXX',其中XXX为上一步SELECT返回的GLOBAL_TRAN_ID,完成对XXX事务的回滚,如下:
ROLLBACK PREPARED 'XXX';
- 对单AZ内的每一个DN执行3的操作。
说明:回滚操作可能导致数据不一致,请谨慎操作。
- 退出连接。
- 使用如下命令恢复data_nodes$系统表的定时检查和更新操作。
omm@plat1:~> cm ctl updateCNSwitchCmd updateNodeRoute=ON -e $ETCD_ADDRESS
示例
示例1:拉起指定的AZ,以拉起AZ3为例。
- 使用Zenith_HA内核的单AZ拉起:
omm@plat1:~> gs_om -t start --az=AZ3 Starting az ========================================= Starting specified az in the cluster. Clean old cm and etcd for specified AZ. Successfully clean old cm and etcd for specified AZ. Restarting etcd for specified AZ. Successfully restarted etcd for specified AZ. Checking the etcd status. Successfully checked the etcd status. Restarting cmAgent for specified AZ. Successfully restarted cmAgent for specified AZ. start the specified az in the cluster. .............................. .............................. .................... ====================================================================== Finish to start the specified az in the cluster.
- 使用Zenith_Zpaxos内核的单AZ拉起:
omm@plat1:~> gs_om -t start --az=AZ3 Starting az ========================================= Starting specified az in the cluster. Clean old cm and etcd for specified AZ. Successfully clean old cm and etcd for specified AZ. Restarting etcd for specified AZ. Successfully restarted etcd for specified AZ. Checking the etcd status. Successfully checked the etcd status. Generating new json for specified az. Successfully generate new json for specified az. Changing the instances config for specified az. Successfully changed the instances config for specified az. Restarting cmAgent for specified AZ. Successfully restarted cmAgent for specified AZ. Stop the specified az in the cluster. Successfully stop the specified az in the cluster. start the specified az in the cluster. .............................. .............................. .................... ====================================================================== Finish to start the specified az in the cluster. Updating cn dn data_node$ for specified. Successfully updating cn dn data_node$ for specified. Deleting the tmp files for specified az. Successfully deleting the tmp files for specified az. Successfully starting specified az in the cluster.
示例2:连接DN,并查询是否有残留的两阶段事务,如果有回退残留事务。omm@plat1:~>zsql omm@127.0.0.1:8000 Please enter password: *********** connected. SQL> SELECT GLOBAL_TRAN_ID FROM SYS.PENDING_TRANS$; GLOBAL_TRAN_ID ---------------- T82333_cn5001 (1 rows) SQL> ROLLBACK PREPARED 'T82333_cn5001';
示例3:恢复data_nodes系统表的定时检查和更新。omm@plat1:~> cm ctl updateCNSwitchCmd updateNodeRoute=ON -e $ETCD_ADDRESS Set output to terminal.
错误排查
如果集群单AZ拉起失败,请根据日志文件中的日志信息排查错误,参见管理日志。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 回退两阶段事务。
- 清理每个DN残留两阶段事务。