KingbaseES V8R6集群运维案例之---PGPASSWORD变量导致esrep用户连接主库失败

案例说明:
KingbaseES V8R6集群,在备库执行clone时,esrep用户认证失败,导致clone失败。
适用版本:
KingbaseES V8R6

一、问题现象

如下所示,在执行备库clone是,esrep认证失败:

备库sys_log日志:(esrep用户认证失败)

二、问题分析
对于KingbaseES V8R6集群,esrep的用户通过~/.encpwd建立认证(免密连接)

[kingbase@node202 bin]$ cat ~/.encpwd
*:*:*:system:MTIzNDU2NzhhYg==
*:*:*:esrep:S2luZ2Jhc2VoYTExMA==

1、用ksql在备库连接主库和本节点
如下所示,esrep连接本节点和远程主库都出现认证失败:

[kingbase@node202 bin]$ ./ksql -h 192.168.1.201 -U esrep  esrep
ksql: error: could not connect to server: FATAL:  password authentication failed for user "esrep"
[kingbase@node202 bin]$ ./ksql -h 192.168.1.202 -U esrep  esrep
ksql: error: could not connect to server: FATAL:  password authentication failed for user "esrep"
[kingbase@node202 bin]$ ./ksql -h 127.0.0.1 -U esrep  esrep
ksql: error: could not connect to server: FATAL:  password authentication failed for user

2、查看.encpwd文件密码信息
1)base64解密查看

[kingbase@node202 bin]$ echo 'S2luZ2Jhc2VoYTExMA=='|base64 -d
Kingbaseha110

2)通过密码访问连接

---由以上可知,.encpwd中的密码没有被修改,是esrep用户在连接数据库时没有访问.encpwd文件,导致无法获取密码信息。

3)查看.encpwd文件属性
如下所示,.encpwd文件属性正常。

[kingbase@node202 bin]$ ls -lh ~/.encpwd
-rw-------. 1 kingbase kingbase 63 Aug 25 17:01 /home/kingbase/.encpwd

4)检查kingbase用户环境变量配置
如下图所示,在.bash_profile文件发现PGPASSWORD的环境变量:

   PGPASSWORD是PostgreSQL系统环境变量,在客户端设置后再远程连接数据库时,将优先使用这个密码。

5)配置PGPASSWORD测试
如下所示,将PGPASSWORD变量值配置为和.encpwd文件中相同的密码后,esrep可以免密登录。

  由以上可知,当数据库配置PGPASSWORD变量后,优先读取此变量,如果此变量值配置和数据库用户密码不一致时,将导致用户远程连接数据库失败。

三、问题解决
将PGPASSWORD变量在.bash_profile注释后,esrep读取.encpwd文件后获取密码,可以正常免密登录,问题解决。

[kingbase@node202 bin]$ cat ~/.bash_profile |grep -i password
#export PGPASSWORD=12345678ab

[kingbase@node202 bin]$ source ~/.bash_profile
[kingbase@node202 bin]$ ./ksql -h 127.0.0.1 -U esrep  esrep
ksql (V8.0)
Type "help" for help.

esrep=#

四、问题总结
对于KingbaseES V8R6集群,用户可以通过.encpwd文件配置免密登录,不用再配置其他环境变量,以免造成许多访问连接隐形故障。
如下所示i,可以通过sys_encpwd工具生成.encpwd文件:

[kingbase@node202 bin]$ ./sys_encpwd --help
[-H, --hostname=]                  host name
[-P, --portnum=]                   port number
[-D, --database=]                  database name
[-U, --user=]                      user name
[-W, --password=]                  password

# 如下所示,tom用户可以从任何ip,远程访问端口号为54321的数据库,认证数据库为test,
  密码为‘beijing’。
[kingbase@node202 bin]$ ./sys_encpwd -H \* -P 54321 -D test -U tom -W beijing
[kingbase@node202 bin]$ cat ~/.encpwd
*:*:*:system:MTIzNDU2NzhhYg==
*:*:*:esrep:S2luZ2Jhc2VoYTExMA==
*:54321:test:tom:YmVpamluZw==

# tom用户免密连接
[kingbase@node202 bin]$ ./ksql -U tom test
ksql (V8.0)
Type "help" for help.

test=>
posted @ 2024-03-29 18:36  KINGBASE研究院  阅读(163)  评论(0编辑  收藏  举报