在南大通用GBase 8c数据库实际使用场景中,可能由于网络故障、操作不当出现一些问题。本文主要解析gs_ctl工具重建备实例过程被中断的问题,剖析其根因并给出解决方法。

1、gs_ctl重建备实例过程被中断导致秘钥文件不完整恢复方法

1.1 问题现象

用户在重建备实例的过程中被中断,再次重建备实例失败,出现以下报错信息。

CRC checksum does not match value stored in file, maybe the cipher file is corrupt
non obs cipher file or random parameter file is invalid.
read cipher file or random parameter file failed.
2020-06-18 20:58:12.080 5eeb64e3.1 [unknown] 140697304617088 [unknown] 0 dn_6001_6002 F0000 0 [BACKEND] FATAL:  could not load server certificate file "server.crt": no start line
[2020-06-18 20:58:12.086][24066][dn_6001_6002][gs_ctl]:  waitpid 24446 failed, exitstatus is 256, ret is 2

1.2 原因分析

重建中断时证书文件不完整,再次重建会由于证书文件不完整而失败。

1.3 操作步骤

(1)在数据目录下查看证书文件大小。

ll

查看秘钥文件大小:

-rw------- 1 omm omm       0 Jun 18 20:58 server.crt
-rw------- 1 omm omm       0 Jun 18 20:58 server.key
-rw------- 1 omm omm       0 Jun 18 20:58 server.key.cipher
-rw------- 1 omm omm       0 Jun 18 20:58 server.key.rand

(2)若证书文件大小为0,删除证书文件。

rm -rf server.crt server.key server.key.cipher server.key.rand

(3)重建备实例。

gs_ctl build -D data_dir

 说明: 若备机数据库已停止,需要重新生成证书文件或者复制证书文件($GAUSSHOME/share下的证书文件)到数据目录,启动备机并重建备实例。生成证书文件的相关操作请参见《GBase 8c V5数据库管理指南》。

2、使用gs_om -t status –all查询集群状态,长时间没有响应

2.1 问题现象

使用gs_om -t status –all命令后长时间无响应。

2.2 原因分析

 可能是数据库主进程hang住,查询动作会调用gsql或者gs_ctl工具查询数据库状态,进程hang住后不会给响应,直到超时后退出。

2.3 操作步骤

(1)查看gsql能否访问数据库,出现下面提示说明gaussdb进程hang住,数据库异常。

gsql -d postgres -p 29776        
gsql: wait (null):29776 timeout expired, errno: Success

(2)查看postgresql-*.log是否有错误提示,根据提示解决问题。

cd $GAUSSLOG/pg_log/dn_6001;grep "ERROR\|FATAL" postgresql-*.log

(3)数据库已经hang住,gs_om命令不起作用,可以直接到每个节点上查找进程pid后kill。

ps -ef|grep $GAUSSHOME/bin/gaussdb|grep -v grep      
kill -9 $pid

(4)所有节点进程kill完毕后在某一节点执行启动命令。测试环境下可以直接重启数据库,生产商用环境请联系技术支持工程师。

gs_om -t start

3、 gs_sshexkey 相同用户不同密码报错

3.1 问题现象

openEuler环境下,gs_sshexkey支持相同用户不同密码做互信,但是输入了正确的密码还是报鉴权失败。

3.2 原因分析

打开系统日志/var/log/secure,查看到有**pam_faillock(sshd:auth): Consecutive login failures for user**日志,说明当前用户密码试错次数太多被暂时锁定。

3.3 操作步骤

在/etc/pam.d目录下修改相关配置文件system-auth、password-auth、password-auth-crond,将文件中deny=3的地方适当放大,待互信全部建立完成后再恢复。

给出以上三个典型问题解决示例。如有其他问题,可在评论区留言交流~