openGauss一主两备集群异常断电后不能正常启动的解决过程简记
背景
因异常断电后opengauss 5.0.0版本,一主两备集群启动失败。
报错不是主机,由于当时没有截图,查看日志后发现报错是:
定位过程
Day1
1. 尝试用另外两台机器启动每台机器
发现都报错自己不是主机,像极了唐僧被妖怪抓走后互相帅锅的猴子哥仨。
2.手动启动
于是向openGauss交流群里的大佬求助,@半夏提供了一个手动启动的命令。
gs_ctl start -D /opt/huawei/install/data/dn -M primary
执行的时候提示已经有服务在,建议用restart,于是改为用restart执行。
gs_ctl restart -D /opt/huawei/install/data/dn -M primary
同时在两台备机上面执行手动启动,模式为standby。
gs_ctl restart -D /opt/huawei/install/data/dn -M standby
继续:
执行完后查看集群状态,仍然是不可用。
3.连接上了
尝试本地连接数据库,是可以连接上了。
4. 导出数据
于是第一时间用gs_dump命令把数据先导出来了一份,这样最差的情况也可以卸载重装来恢复。
5. 改成单机版
但是虽然本地能连上,却不能创建表,是个只读事务(read-only transaction),业务还是不可用,期间还想着把业务代码改成单机版的数据库连接先应付应用,因为只读作罢。
6. 业务代码及datastudio工具也都连接不上。
起初我还以为是配置文件的问题,检查和确认了postgres.conf及pg_hba.conf的配置。期间还执行过gs_install,以及gs_preinstall,但是install过程提示集群已安装(因未截图所以无法得到确切的提示,大意是已安装)。
Day2
周一和大佬@半夏连线
1. 检查磁盘空间
首先检查了磁盘空间,也检查了互信,互信正常,篇幅起见截图就只截一个服务器的。
2. 修改为自动切换失败
cm_ctl switchover -a
3. 强制升主
因为不可读,于是把123服务器的数据库又执行了一次强制升主。
cm_ctl set --cmsPromoteMode=PRIMARY_F -I 1
执行后确实改为了Primary,但仍然是不可读,远程也无法连接。
4. 断电后操作
后来求助cm的大佬恩哥,恩哥提供了如下断电后需要执行的操作
4.1 kill掉cm和om的相关进程:
gs_ssh -c "pkill -9 om_monitor -U omm; pkill -9 cm_agent -U omm; pkill -9 cm_server -U omm; touch $GAUSSHOME/bin/cluster_manual_start"
4.2. rm掉cmserver下的gstor, dcf_data和bin下面的配置文件
cd $GAUSSLOG
cd /opt/huawei/data/cmserver/cm_server
gs_ssh -c "rm /opt/huawei/data/cmserver/gstor /opt/huawei/data/cmserver/dcf_data $GAUSSHOME/bin/cluster_dynamic_config -rf"
4.3 rm掉bin下的集群手动启动
3. gs_ssh -c "rm $GAUSSHOME/bin/cluster_manual_start"
Day3
1. 执行切换启动模式为AUTO
cm_ctl set --cmsPromoteMode=AUTO -I 1
2. 于是直接拉恩哥上线
2.1 查看dcc日志:
cd $GAUSSLOG/cm/dcc
vim debug/dcc.dlog
命令截图:
日志截图:
2.2 看到这个日志后,我提出怀疑是防火墙导致的连接建立失败。
于是在三台服务器上都执行了关防火墙的操作(生产环境不建议这样操作,因是测试环境验证问题,所以关掉防火墙,生产环境开放端口白名单)。
systemctl stop firewalld
systemctl disable firewalld
2.查询防火墙状态
systemctl status firewalld
3. 再查询集群状态,状态即为正常:
cm_ctl query -Cvidp
四、成功解决!
紧张焦虑的两天半,问题终于在两位大佬的帮助下得到了解决,趁热打铁流水账先记录下过程,供各位专家同仁指导参考,再次感谢@半夏和恩哥(音)。
五、总 结
影响集群启动的主要因素:
1. 防火墙是否关闭(或者是否打开端口白名单);
2. 删除进程和文件的3步命令,至于手动启动,并不是必须的步骤;
3. 断电前预先stop集群。
附:一些Linux命令总结:
gs_ssh -c "ps x"
echo $GAUSSHOME
cm_ctl start
cm_ctl stop
cm_ctl query -Cvidp
cd $GAUSSLOG
source .bashrc –加载用户的bash配置文件
ps ux
欢迎小伙伴们交流~
本文作者:赵锋

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
openGauss 内存问题常用定位方法
openGauss内存相关功能 内存上下文 openGauss通过内存上下文功能,来进行内存的管理,控制着内存的申请、释放、作用范围、生命周期等。 主要的思想是为不同的逻辑单元预申请专属的内存池,实现内存与逻辑单元的生命周期互相绑定,逻辑结束,内存释放的功能。在此之上又可以开发出更多的内存使用监控等功能。 内存上下文的主要概念有:chunk、block、freelist等。 block:直接在操作系统申请而来的内存大块,多个块之间串联成双链表。 chunk:在block中划分出来的内存小块,其大小共11个固定档次。结构可分为四部分,头、体、尾、无用空间。其中头内存放了所处的内存上下文、chunk大小等信息;体则是供我们使用的空间;尾部存储了一些校验单元,release下没有这部分;无用空间则是我们申请之外的空间,由于chunk大小时11档固定的,例如我们申请42字节时,会返回一个64字节档位的chunk,因此后面会有一部分无用空间。 freelist:共11个队列,每个队列都是chunk组成的双链表,一个队列中的chunk大小都是一样的。palloc、pfree都在这里取或还内存。 可...
-
下一篇
🎉 DDD as a Service | Wow 3.11.4 发布
领域驱动|事件驱动|测试驱动|声明式设计|响应式编程|命令查询职责分离|事件溯源 官方文档:https://wow.ahoo.me/ 更新内容 特性(core): 添加CommandBuilderRewriter支持 重写命令消息体。 特性(core): 当本地消息总线出现背压时,临时降级LocalFirst模式。 特性(core): 添加检查点(checkpoint)以提高调试能力。 特性(core): 为MessageFunction添加qualifiedName。 特性(api): 添加FunctionInfoAPI。 特性(core): 添加CommandNameMessagePropagator以支持命令名称向 事件流 传播。 特性(opentelemetry): 使用事件函数的完全限定名称作为SpanName。 特性(core): 为WaitSignal添加FunctionInfo支持。 特性(openapi): 支持定义命令的路由顺序。 特性(core):sortedByOrder扩展函数支持对JavaClass和KClass排序。 特性(api): 支持Mount命令到...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池