暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss 配置服务端远程连接及连接故障介绍

MTL 2022-11-19
5556

一、配置服务端远程连接

进行远程连接前,需要在部署了数据库主节点的机器上设置允许客户端访问数据库,并配置远程连接。

操作步骤

以下步骤需要在openGauss所在主机上执行。

  1. 以操作系统用户omm登录数据库主节点。

  2. 配置客户端认证方式,请参考配置客户端接入认证。

  3. 配置listen_addresses,listen_addresses即远程客户端连接使用的数据库主节点ip或者主机名。

    使用如下命令查看数据库主节点目前的listen_addresses配置。

    gs_guc check -I all -c "listen_addresses"
    

    查询到的信息类似如下:

    expected guc information: plat1: listen_addresses=NULL: [/gaussdb/data/data_cn/postgresql.conf]
    gs_guc check: plat1: listen_addresses='localhost, 192.168.0.100': [/gaussdb/data/data_cn/postgresql.conf]
    
    Total GUC values: 1. Failed GUC values: 0.
    The value of parameter listen_addresses is same on all instances.
        listen_addresses='localhost, 192.168.0.100'
    

    使用如下命令把要添加的ip追加到listen_addresses后面,多个配置项之间用英文逗号分隔。例如,追加ip地址10.11.12.13。

    gs_guc set -I all -c "listen_addresses='localhost,192.168.0.100,10.11.12.13'"
    
  4. 配置pg_hba.conf,添加数据库主节点ip和客户端ip。pg_hba.conf的参数说明和配置方法详见配置客户端接入认证

    a.使用如下命令添加数据库主节点ip到pg_hba.conf,其中initial_user为数据库初始用户名称,10.11.12.13同上述数据库主机ip。

    gs_guc reload [-Z datanode] -N all -I all -h "host all initial_user 10.11.12.13/32 trust"
    

    b.使用如下命令添加客户端ip到pg_hba.conf,假设客户端ip为10.11.12.34,认证方式为sha256。

    gs_guc reload [-Z datanode] -N all -I all -h "host all all 10.11.12.34/32 sha256"
    
  5. 执行如下命令重启openGauss。

    gs_om -t stop && gs_om -t start


二、连接故障说明

1)gsql: could not connect to server: No route to host

此问题一般是指定了不可达的地址或者端口导致的。请检查-h参数与-p参数是否添加正确。

 

2)gsql: FATAL: Invalid username/password,login denied.

此问题一般是输入了错误的用户名和密码导致的,请联系数据库管理员,确认用户名和密码的正确性。

 

3)gsql: FATAL: Forbid remote connection with trust method!

数据库由于安全问题,禁止远程登录时使用trust模式。这时需要修改pg_hba.conf里的连接认证信息。具体的设置信息请参见:官方《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节。

 

说明:请不要修改pg_hba.conf中openGauss主机的相关设置,否则可能导致数据库功能故障。建议业务应用部署在openGauss之外,而非openGauss内部。

 

4)The “libpq.so” loaded mismatch the version of gsql, please check it.

此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的,请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

 

5)gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqVersionString

此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的(也有可能是环境中存在PostgreSQL的libpq.so),请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

 

6)gsql: connect to server failed: Connection timed out

Is the server running on host “xx.xxx.xxx.xxx” and accepting TCP/IP connections on port xxxx?

此问题是由于网络连接故障造成。请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法PING到数据库服务器端,则说明网络连接出现故障。

 

7)gsql: FATAL: permission denied for database “postgres”  DETAIL: User does not have CONNECT privilege.

 

此问题是由于用户不具备访问该数据库的权限,可以使用如下方法解决。

a.使用管理员用户dbadmin连接数据库。

gsql -d postgres -U dbadmin -p 5432

 

b.赋予该用户访问数据库的权限。

GRANT CONNECT ON DATABASE postgres TO user1;

 

8)gsql: FATAL: sorry, too many clients already,active/non-active: 197⁄3.

此问题是由于系统连接数量超过了最大连接数量。请进行会话连接数管理,释放无用会话。

会话状态可以在视图PG_STAT_ACTIVITY中查看。无用会话可以使用函数pg_terminate_backend进行释放。

select datid,pid,state from pg_stat_activity;

datid | pid | state

-------+-----------------+--------

13205 | 139834762094352 | active

13205 | 139834759993104 | idle (2 rows)

 

其中pid的值即为该会话的线程ID。根据线程ID结束会话。

SELECT PG_TERMINATE_BACKEND(139834759993104);

 

显示类似如下信息,表示结束会话成功。

PG_TERMINATE_BACKEND ---------------------- t (1 row)

 

9)gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired

gsql在向数据库发起连接的时候,会有5分钟超时机制,如果在这个超时时间内,数据库未能正常的对客户端请求进行校验和身份认证,那么gsql会退出当前会话的连接过程,并报出如上错误。

一般来说,此问题是由于连接时使用的-h参数及-p参数指定的连接主机及端口有误(即错误信息中的xxx部分),导致通信故障;极少数情况是网络故障导致。要排除此问题,请检查数据库的主机名及端口是否正确。

 

10)gsql: could not receive data from server: Connection reset by peer.

同时,检查数据库主节点日志中出现类似如下日志“ FATAL: cipher file “/data/dbnode/server.key.cipher” has group or world access”,一般是由于数据目录或部分关键文件的权限被误操作篡改导致。请参照其他正常实例下的相关文件权限,修改回来便可。

 

11)gsql: FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.

目标数据库主节点的pg_hba.conf里配置了当前客户端IP使用”gss”方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到”sha256”后再试。配置方法见官网《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节 。

 

说明:

- 请不要修改pg_hba.conf中openGauss主机的相关设置,否则可能导致数据库功能故障。
- 建议业务应用部署在openGauss之外,而非openGauss内部。



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论