📢📢📢📣📣📣
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
文章目录
- 前言
- 1.故障现象
- 2.故障处理
- 2.1 单节点启动
- 2.2 全库备份
- 3.备机重建
- 4.cm_ctl集群工具
- 5.总结
前言
某制造业大厂,企业核心的生产系统使用openGauss国产数据库集群,集群无法启动,修复过程分享给大家。
1.故障现象
通过现场沟通了解到,客户机房由于异常掉电,造成一套openGauss集群的备库节点操作系统主异常无法启动,还好主节点正常,启动集群失败,此时只能通过启动单节点方式进行恢复
2.故障处理
2.1 单节点启动
由于备机已经无法访问了,导致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
2.2 全库备份
--全库数据量查询
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
3.备机重建
如果新的备机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 数据库目录即可恢复集群
4.cm_ctl集群工具
cm_ctl是openGauss提供的用来控制数据库实例服务的工具。该工具主要供OM调用,及数据库实例服务自恢复时使用。cm_ctl的主要功能有:
● 启动数据库实例服务、AZ的所有实例、单个主机上的所有实例或单独启动某个实例进程。
● 停止数据库实例服务、AZ的所有实例、单个主机上的所有实例或单独停止某个节点实例进程。
● 重启逻辑数据库实例服务。
● 查询数据库实例状态或者单个主机的状态。
● 切换主备实例或重置实例状态。
● 重建备机。
● 查看数据库实例配置文件。
● 设置日志级别,一主多备数据库实例部署下cm_server的仲裁模式、AZ之间的切换模式。
● 获取日志级别,一主多备数据库实例部署下cm_server的仲裁模式、AZ之间的切换模式。
● 检测实例进程状态。
5.总结
本次故障我们发现,其实国产数据库openGauss的集群故障的处理机制还是蛮完善的,尤其备库的重构很不错的