首页 > 数据库 > 国内数据库 > 突发!凌晨4点某制造业大厂国产数据库集群故障...
作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万+ 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障应急处理
某制造业大厂,企业核心的生产系统使用openGauss国产数据库集群,突发备库节点服务器操作系统无法启用,集群修复过程分享给大家。
通过现场沟通了解到,客户机房由于异常掉电,造成一套openGauss集群的备库节点操作系统主异常无法启动,还好主节点正常,启动集群失败,此时只能通过启动单节点方式进行恢复

由于备机已经无法访问了,导致om启动不了 通过以下命令启动即可 [omm@node1 ~]$ gs_ctl start -D /u01/opengauss/data/db -M primary

--通过此命令我们查询,集群备节点异常 [omm@node1 ~]$ gs_om -t status --detail

--登陆数据库,业务恢复正常 [omm@node1 ~]$ gsql -d postgres

--全库数据量查询 SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", d.datacl AS "Access privileges", --pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges", CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname)) ELSE 'No Access' END as "Size", t.spcname as "Tablespace", pg_catalog.shobj_description(d.oid, 'pg_database') as "Description" FROM pg_catalog.pg_database d JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid -- where d.datname = 'database_name' ORDER BY 1; --全库备份 gs_dumpall -f /home/omm/bkpall_20240607.sql -p 5432

如果新的备机Ip改了,需要主备库参数修改后重建整个集群
主机: gs_guc set -D /u01/opengauss/data/db -c "replconninfo1='localhost=主机ip localport=port+1 localheartbeatport=port+4 localservice=port+5 remotehost=备机IP remoteport=port+1 remoteheartbeatport=port+4 remoteservice=port+5'" gs_guc set -D /u01/opengauss/data/db -c 'remote_read_mode=off'; gs_guc set -D /u01/opengauss/data/db -c 'replication_type=1'; gs_guc set -D /u01/opengauss/data/db -h "host all omm 主机ip/32 trust" gs_guc set -D /u01/opengauss/data/db -h "host all omm 备机IP/32 trust" gs_guc set -D /u01/opengauss/data/db -c "port=主机端口" gs_guc set -D /u01/opengauss/data/db -c "listen_addresses='主机ip'" 备机: gs_guc set -D /u01/opengauss/data/db -c "replconninfo1='localhost=备机ip localport=port+1 localheartbeatport=port+4 localservice=port+5 remotehost=主机IP remoteport=port+1 remoteheartbeatport=port+4 remoteservice=port+5'" gs_guc set -D /u01/opengauss/data/db -c 'remote_read_mode=off'; gs_guc set -D /u01/opengauss/data/db -c 'replication_type=1'; gs_guc set -D /u01/opengauss/data/db -h "host all omm 主机ip/32 trust" gs_guc set -D /u01/opengauss/data/db -h "host all omm 备机IP/32 trust" gs_guc set -D /u01/opengauss/data/db -c "port=备机端口" gs_guc set -D /u01/opengauss/data/db -c "listen_addresses='备机IP'" 主机启动: gs_ctl start -D /u01/opengauss/data/db -M primary 备机启动 gs_ctl start -D /u01/opengauss/data/db -M standby gs_ctl build -D /u01/opengauss/data/db -M standby -b full
如果备机修复好,还可以用,直接建逻辑复制通道后,gs_ctl build -D 数据库目录即可恢复集群
cm_ctl是openGauss提供的用来控制数据库实例服务的工具。该工具主要供OM调用,及数据库实例服务自恢复时使用。cm_ctl的主要功能有: ● 启动数据库实例服务、AZ的所有实例、单个主机上的所有实例或单独启动某个实例进程。 ● 停止数据库实例服务、AZ的所有实例、单个主机上的所有实例或单独停止某个节点实例进程。 ● 重启逻辑数据库实例服务。 ● 查询数据库实例状态或者单个主机的状态。 ● 切换主备实例或重置实例状态。 ● 重建备机。 ● 查看数据库实例配置文件。 ● 设置日志级别,一主多备数据库实例部署下cm_server的仲裁模式、AZ之间的切换模式。 ● 获取日志级别,一主多备数据库实例部署下cm_server的仲裁模式、AZ之间的切换模式。 ● 检测实例进程状态。

本次故障我们发现,其实国产数据库openGauss的集群故障的处理机制还是蛮完善的,尤其备库的重构很不错的
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69947868/viewspace-3018184/ ,如需转载,请注明出处,否则将追究法律责任。