金仓 kingbaseES 集群 esrep 用户认证失败:KINGBASE_PASSWORD 环境变量配置问题排查与修复
一、问题现象
执行repmgr 命令提示esrep认证失败。
查看sys_log日志提示esrep用户认证失败。
二、问题分析
1、查看备机状态
集群状态正常。
2、对于KES 集群,esrep的用户通过~/.encpwd建立认证(免密连接),继续查看并验证密码有效性
$ cat ~/.encpwd
$ ksql esrep esrep
确认为节点node1 ~/.encpwd密码设置无问题。
3、检查用户环境变量
$ cat ~/.bashrc
$ cat ~/.bash_profile
发现 KINGBASE用户配置了KINGBASE_PASSWORD 环境变量,且密码不一致。
4、注释掉KINGBASE_PASSWORD 环境变量,并重新验证。
确认正常,由以上可知,当用户配置KINGBASE_PASSWORD变量后,优先读取此变量,如果此变量值配置和数据库用户密码不一致时,将导致用户远程连接数据库失败。
三、总结
对于KES集群环境,esrep的用户通过~/.encpwd建立认证(免密连接)。如果KINGBASE用户配置KINGBASE_PASSWORD变量,将优先使用此变量,会导致集群esrep用户连库认证失败,并且KINGBASE_PASSWORD变量明文显示密码,因此有免密登录需求的话可以考虑如下方式,以免造成许多访问连接隐形故障。
在集群节点上,使用用户kingbase可以通过sys_encpwd工具生成.encpwd文件。
sys_encpwd 是 KingbaseES 用户密码配置工具。
使用方法:
sys_encpwd [OPTION]... [PASSWORD]
通用选项:
[-H, --hostname=] 主机名
[-P, --portnum=] 端口号
[-D, --database=] 数据库名称
[-U, --user=] 用户名
[-W, --password=] 口令
[-?, --help] 显示帮助信息,然后退出
如图所示设置本地连接密码。
此外还有个口令文件。KINGBASE用户主目录中的.kbpass文件能够包含在连接需要时使用的口令。
这个文件应该包含下列格式的行:
hostname:port:database:username:password
注意:口令文件上的权限必须不允许所有人或组内访问,可以用chmod 0600 ~/.kbpass这样的命令。
举例如下:
# cat>>/home/kingbase/.kbpass<<EOF
localhost:54321:*:system:xxxxx
EOF
# chown kingbase:kingbase /home/kingbase/.kbpass
# chmod 600 /home/kingbase/.kbpass




