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