在数据库使用过程中,若操作或维护不当,会出现实例或集群异常运行。南大通用GBase 8c多模多态数据库也是如此。本文主要针对GBase 8c V5 S3.0.0版本,对数据库实例和用户方面常见的相关问题和解决方法进行描述。

1、数据库实例问题

本节内容主要介绍GBase 8c V5 S3.0.0集群常见的问题处理。实例异常原因有多种,且判断问题原因需要依赖数据库运行日志。 

1.1数据库节点处于unstable或者stop状态

问题现象:

使用gha_ctl monitor查看集群的备节点处于unstable或者stop状态。如图:

南大通用GBase 8c分布式场景常见问题处理(一)_客户端

问题原因:因网络故障,磁盘满,数据库遗存等原因造成的数据自动拉起发生异常,需要进行问题排查。
问题处理:

(1)使用gha_monitor查看状态异常的节点。

[gbase@gbase8c ~]$ gha_ctl monitor all -l http://XXXX:2379 -c gbase -HI

(2)启动异常节点,示例是启动dn1_2,等待返回结果

[gbase@gbase8c ~]$ gha_ctl start datanode dn1 dn1_2 -l http://XXXX:2379 -c gbase

(3)重新检查节点状态

[gbase@gbase8c ~]$ gha_ctl monitor all -l http://XXXX:2379 -c gbase -HI

1.2备节点处于need repair状态

问题现象:使用gha_ctl monitor查看集群的备节点处于Stand by Need repair状态,该问题只会出现在备库节点。

state
Stand by Need repair

问题原因:

因网络故障,磁盘满等原因造成的主备实例断开连接,主备日志不同步,导致备库在启动时发生异常。

问题处理:

(1)使用gha_ctl monitor找到节点的数据目录(work_dir):

[gbase@gbase8c ~]$ gha_ctl start all -l http://XXXX:2379 -c gbase

(2)登录到处于need repair节点的服务器,进行数据库build操作

[gbase@gbase8c ~]$ gs_ctl build -D work_dir(上一步查询出来的数据目录)

2、用户相关问题

本节主要是介绍用户相关问题的排查和处理。

2.1登录用户名密码错误

问题现象:用户登录时报错,报错内容如:

FATAL:  Invalid username/password,login denied.

问题原因:登录时使用了错误的用户名密码。

问题处理:检查并使用正确的用户名密码即可。

2.2客户端没有登录权限

问题现象

用户登录时报错,显示没有权限登录数据库,报错内容如:

gsql: FATAL:  no pg_hba.conf entry for host "XXX.XXX.XXX.XXX".
FATAL:  no pg_hba.conf entry for host "XXX.XXX.XXX.XXX".

问题原因

数据库没有授权该客户端登录,GBase 8c为了保证数据库安全,每次登录都会对接受到的连接进行校验,验证是否是受信赖的客户端。

问题处理:

方法一:通过gs_guc管理工具在线向数据库添加受信赖的客户端IP地址,如:

[gbase@gbase01 ~]$gs_guc reload -N all -I all -h "host all all 0.0.0.0/0 sha256"

双引号中参数共五段组成:

  • host:表示登录类型,一般来说是host,初host外还有local(本地登录),replication(复制槽)等;
  • all: 数据库名称;
  • all: 用户名称;
  • 0.0.0.0/0 : 表示客户端的IP地址,也可以指定某个网段或指定IP地址;
  • sha256:表示加密算法,通常指定sha256,其他还有md5和trust,远程用户切记不能使用trust,否则客户端可以不使用正确密码即可登录数据库集群;

NOTE:如果是主备集群,只需要在主节点执行一次即可。

方法二:修改配置文件pg_hba.conf

将客户端IP地址添加到配置文件后,重启集群,配置文件参数说明参见方法一。

查找配置文件pg_hba.conf方法

[gbase@gbase01 dn1_1]$ gha_ctl  monitor   all -c cluster_name -l http://XXXX:2379  -HI
  • work_dir的目录就是配置文件pg_hba.conf所在的目录

NOTE:如果是主备集群,每个节点的配置文件都需要修改后才重启集群。

2.3用户锁定后解锁

问题现象:用户登录时报错,报错内容如:

FATAL:  The account has been locked.

问题原因:为了保证帐户安全,如果用户输入密码次数超过一定次数(failed_login_attempts),系统将自动锁定该帐户,默认值为10。

问题处理:

(1)使用超级管理员用户登录数据库环境,

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

(2)解锁用户

postgres=# alter user user_name account unlock;
ALTER ROLE

2.4用户权限问题

问题现象

登录数据库后使用DML、DDL等SQL语句报错:

ERROR:  permission denied for relation

问题原因:使用的用户没有权限,需要授予想要权限。

问题处理:

根据用户锁需要的权限,进行授权,遵循最小权限管理,数据库授权可参考https://docs.opengauss.org/zh/docs/3.0.0/docs/Developerguide/GRANT.html

2.5数据库只读

问题现象

数据库可以进行读操作,但是对表执行非读SQL(insert,update, delete ,create, drop 等)时数据库报错,报错内容如 :

FATAL:  Invalid username/password,login denied.

问题原因

(1)如果是主备模式,所有更改操作都需要在主库上进行;

(2)如果确定在主库上执行,这时数据库已经处于只读集群;

问题处理:

(1)检查数据库磁盘使用率是否达到了85%,如果达到85%(该值可以调整)需要删除服务器上的不要的文件,如:过期的备份文件,日志文件,或其他文件不需要的文件至小于85%(具体以设定为准);

(2)修改集群的只读模式为读写模式

[gbase@gbase01 dn1_1]$ gs_guc reload -N all -I all -c "default_transaction_read_only=off"

NOTE:在主库上执行一次即可

2.6高并发情况下连接数不足

问题现象

用户登录时报错,报错内容如:

Too many clients already, current/active XXX/X

问题原因

数据库登录用户达到了最大限制(max_connections),在服务器内存允许下,调大数据库连接数的限制。

问题处理:

(1)登录数据库查看当前的最大连接数和当前已经使用的连接数

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

查看当前数据库最大连接数限制

postgres=# show max_connections ;
max_connections 
-----------------
5000
(1 row)

查看当前使用的连接数

postgres=# select count(*) from pg_stat_activity;
count 
-------
    548
(1 row)

(3)如果发现确实最大连接数限制和当前连接数已经很接近,需要调整数据库的最大连接数限制,或者检查业务是否开启连接后没有正常关闭。

(4)调整数据库最大连接数:

max_prepared_transaction和max_connection的值需要相同,且根据连接数需求调整。

[gbase@gbase01 dn1_1]$ gs_guc reload -N all -I all -c "max_connections=xxx"
[gbase@gbase01 dn1_1]$ gs_guc reload -N all -I all -c "max_prepared_transactions=xxx"

(5)重启数据库

[gbase@gbase01 dn1_1]$ gha_ctl stop all -c gbase -l http://XXXX:2379
[gbase@gbase01 dn1_1]$ gha_ctl start all -c gbase -l http://XXXX:2379

NOTE: 如果发现数据库当前连接数据和最大连接数差异很大,没有达到数据库的最大连接数限制也出现该搞错,需要检查操作系统的文件句柄数限制,具体检查和处理请参考:
https://docs.opengauss.org/zh/docs/3.0.0/docs/Developerguide/%E9%AB%98%E5%B9%B6%E5%8F%91%E6%8A%A5%E9%94%99-too-many-clients-already-%E6%88%96%E6%97%A0%E6%B3%95%E5%88%9B%E5%BB%BA%E7%BA%BF%E7%A8%8B.html