集群CN由于故障被隔离时,可以根据本节内容恢复故障CN。该操作仅支持在分布式部署模式下执行。
背景信息
部署集群时,建议用户将CN实例分散部署在其他多个服务器上,以避免主机故障造成的集群不可用。如表1所示。
前提条件
- 不支持恢复由于物理损坏而被隔离并替换的故障CN。
- 在故障CN恢复期间,不允许进行DDL操作。
- 如果集群中有负载均衡组件,需要从负载均衡组件中剔除对故障CN的业务分发。在故障恢复后,再在负载均衡组件中恢复CN。
- 如果集群中某个CN节点一直处于route_conflict,同时在故障CN以外的某个CN或主DN上,SYS_DATA_NODES系统表中没有配置故障的CN节点, 也适用手动恢复操作。
操作步骤-使用工具自动恢复
- 以omm用户身份登录GaussDB 100任一服务器。
- 使用以下命令查看集群状态。
gs_om -t status
状态显示为DELETED的CN,为被隔离的CN。集群状态详解,请参见集群状态查询。
- 执行如下命令恢复状态显示为DELETED的CN。
gs_om -t recoverycn
执行命令时所在目录不能是待恢复CN的数据目录。
操作步骤-手动恢复
- 以omm用户身份登录GaussDB 100被隔离CN所在服务器。
- 使用以下命令查看集群状态。
gs_om -t status
状态显示为DELETED的CN,为被隔离的CN。集群状态详解,请参见集群状态查询。
- (可选)故障CN被隔离期间,如果在其它正常CN上进行过DDL操作,需要将元数据同步到故障CN上。
- 使用以下命令,关闭CM自动更新CN和DN的路由信息表功能。
cm ctl updateCNSwitchCmd updateNodeRoute=OFF
- 关闭CM检测CN自动隔离开关。
cm ctl set -p CoordinatorHeartbeatTimeout -v
- 恢复集群中故障CN的状态。
cm ctl restoreCn -H host_name -I instance_name
- 在正常CN上进行过DDL操作上执行EXP逻辑导出,生成元数据,具体操作参见《GaussDB 100 1.0.1开发者指南(分布式)》中的 章节。
{EXP | EXPORT}[ keyword =param [ , ... ] ] [ ... ];
- 在故障CN上以本地登录方式使用zsql连接数据库。
zsql / as clsmgr
- (可选)如果使用zsql连接失败,需要使用如下命令手工启动CN进程后再使用命令“zsql / as clsmgr”本地登录故障CN。
zengine open --coordinator -D cn_data_dir
- 将元数据同步到故障CN上。
@业务DDL脚本.sql
- 退出当前链接。
exit
- 使用以下命令,关闭CM自动更新CN和DN的路由信息表功能。
- 使用以下命令,关闭CM自动更新CN和DN的路由信息表功能。
cm ctl updateCNSwitchCmd updateNodeRoute=OFF
- 关闭CM检测CN自动隔离开关。
cm ctl set -p CoordinatorHeartbeatTimeout -v
- 在除故障CN以外的集群所有CN、主DN上,以本地登录方式执行以下命令,加回故障节点。
本地登录CN的命令为“zsql / as clsmgr”,本地登录DN的命令为“zsql / as sysdba -D dn_data_dir”。
CREATE NODE cn_name WITH (
TYPE = 'coordinator',
NODEID =401,
HOST = '192.168.0.3 ',
PORT = 8000,
USERNAME = omm,
PASSWORD = 'gaussdb_123'
); - 恢复集群中故障CN的状态。
cm ctl restoreCn -H host_name -I instance_name
重启故障CN。
gs_om -t start -h host_name -I cn_name
- 打开CM检测CN自动隔离开关。
cm ctl set -p CoordinatorHeartbeatTimeout -v 300
系统默认CN故障5分钟(即300秒)后进行故障隔离。
- 启动CM的自动更新CN和DN的路由信息表功能。
cm ctl updateCNSwitchCmd updateNodeRoute=ON