金倉 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




