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 firewalldsystemctl 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

欢迎小伙伴们交流~

本文作者:赵锋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707112.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络-路由策略与路由控制一

到目前为止我们学习了路由与交换基础,路由协议有静态、RIP、OSPF、IS-IS等,但是根据实际组网需求,往往需要实施一些路由策略对路由信息进行过滤、属性设置等操作,通过对路由的控制,可以影响数据流量转发。 因此我们开始…

webpack优化构建速度示例-IgnorePlugin:

IgnorePlugin是webpack的一个内置插件,允许你忽略某些特定的模块或文件 webpack.config.jsconst config {entry: ./src/index.js,output: {filename: main.js},mode: development, }module.exports config;src/index.js import moment from moment console.log(mo…

高中数学:平面向量-数乘运算

一、定义 顾名思义 向量的数乘运算,就是数量与向量相乘的运算 λ a → \mathop{a}\limits ^{\rightarrow} a→,λ∈R 二、λ a → \mathop{a}\limits ^{\rightarrow} a→的性质 1、长度 |λ|*| a → \mathop{a}\limits ^{\rightarrow} a→| |λ a …

如何管理研发人员

在日益激烈的市场竞争中,企业的核心竞争力往往取决于其技术创新能力和研发实力。然而,随着企业研发的深入和技术的积累,研发人员泄密的风险也愈发严重。如何防止研发人员泄密,已经成为企业面临的重要问题。本文将从加强员工保密意…

你好 GPT-4o!

你好 GPT-4o! OpenAI公司宣布推出 GPT-4o,这是OpenAI的新旗舰模型,可以实时对音频、视觉和文本进行推理。 GPT-4o(“o”代表“o​​mni”)是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意组合作…

2020 年第一届辽宁省大学生程序设计竞赛

比赛经历:摸鱼划水了一个多小时又是只会签到,看来还得提升自己的解题能力写了六题 补题:E线段树维和区间平方和,比较经典好久没写过线段树了傻了,注意维护lazy J计算几何,看来得提上日程了,用叉…

Ipython 解释器之魔法命令

文章目录 1. 性能分析 %timeit 和 %prun2. 交互式绘图 %matplotlib inline3. 查看和修改环境变量 %env4. 读取并执行外部脚本 %run5. 调试 %debug6. 代码 profiling with %lprun7. 记忆函数结果 %memit 和 %mprun8. 交互式Shell与系统命令 %shell9. 自动补全与文档查看 %autoin…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 💖The Begin💖点点关注,收藏不迷路💖 1、实现思想 创建一个新的数组,然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本,不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件(找自己对应的版本):reids.conf 或者将如下配置文件命名为redis.conf,上…

副业新选择:10大程序员热门接单平台,兼职赚钱两不误!

很多程序员都想过通过副业赚取收入,但往往会停在接单的第一步:要么是因为懒拖延迟迟没有行动,要么因为没有选对适合自己的平台迟迟没有开张。程序员想要通过副业赚取收入,一定要看好这10个程序员接单平台,保你主业副业…

nestJs链接redis

给大家推荐一个库,地址:Yarn service import { Injectable } from nestjs/common; import { RedisService as RedisServices, DEFAULT_REDIS_NAMESPACE } from liaoliaots/nestjs-redis; import Redis from ioredis;Injectable() export class RedisService {priva…