案例說明:
對於kingbaseES V8R3集群修改system密碼相比單機環境有一定的復雜性,需要修改的位置如下:
1)數據庫中system用戶密碼,可以用alter user命令修改
2)在recovery.conf和recovery.done文件中,備庫連接主庫時,需要使用system用戶認證
3)集群認證文件cluster_passwd中需要使用system用戶認證
適用版本:
KingbaseES V8R3
案例操作步驟:
1、修改數據庫system用戶密碼,可以分兩種情況:
1)在集群正常運行時,直接在主庫修改,自動同步到備庫,然后再在主備庫用system新密碼登錄測試。
2)正常關閉集群后,只啟動主備庫數據庫服務,確認流復制狀態正常后,在主庫修改system密碼,然后在主備庫登錄測試。
2、正常關閉集群,修改主備庫中recovery.conf和recovery.done中的system密碼,(注意data和etc目錄下都要修改)。
3、修改主備庫中kingbasecluster連接中的SYSTEM密碼,此密碼采用md5加密。
4、重新啟動集群測試。
5、查看集群中節點的狀態,流復制狀態,system用戶訪問數據庫的狀態。
6、確認修改成功。
集群架構:

一、修改數據庫用戶system密碼(在主庫完成)
1) 通過kingbase_monitor.sh關閉集群
通過手工方式啟動主備庫的數據庫服務(sys_ctl),保證主備庫的流復制狀態正常(sys_stat_replication),登錄主庫修改system用戶訪問數據庫的口令,備庫自動通過主備復制同步修改。
2)登錄數據庫修改system用戶密碼
[kingbase@node1 bin]$ /home/kingbase/cluster/kha/db/bin/ksql -U system -W 123456 -d TEST
ksql (V008R003C002B0180)
Type "help" for help.
TEST=# alter user system with password 'beijing';
ALTER ROLE
TEST=# \q
3)用新密碼登錄測試
[kingbase@node1 bin]$ /home/kingbase/cluster/kha/db/bin/ksql -U system -W 123456 -d TEST
ksql: FATAL: password authentication failed for user "system"
[kingbase@node1 bin]$ /home/kingbase/cluster/kha/db/bin/ksql -U system -W beijing -d TEST
ksql (V008R003C002B0180)
Type "help" for help.
TEST=# \c prod;
You are now connected to database "prod" as user "system".
二、在主備庫修改recovery.conf 和recovery.done文件密碼
注意:
1)除了修改主備庫data目錄下的recovery.done和recovery.conf文件。
2)還要修改主備庫etc下的recovery.done文件,這個文件在備庫用network_rewind.sh做recovery時會覆蓋備庫data下的recovery.conf文件。
1、修改備庫recovery.conf:
1) 查看system原密碼
Tips:
在recovery.conf文件中,對system密碼做了加密處理。
[kingbase@node2 data]$ cat recovery.conf
standby_mode='on'
primary_conninfo='port=54321 host=192.168.7.248 user=SYSTEM password=MTIzNDU2 application_name=node02'
recovery_target_timeline='latest'
primary_slot_name ='slot_node02'
2)加密system用戶新密碼
將加密后的新密碼的字符串,替換原文件中的密碼字符串,加密前的密碼和數據庫system登錄密碼要匹配。(加密和解密方式參考官方資料)
3)修改recovery.conf和recovery.done文件
[kingbase@node2 data]$ cat recovery.conf
standby_mode='on'
primary_conninfo='port=54321 host=192.168.7.248 user=SYSTEM password=YmVpamluZwo= application_name=node02'
recovery_target_timeline='latest'
primary_slot_name ='slot_node02'
[kingbase@node2 data]$ cat ../etc/recovery.done
standby_mode='on'
primary_conninfo='port=54321 host=192.168.7.248 user=SYSTEM password=YmVpamluZwo= application_name=node02'
recovery_target_timeline='latest'
primary_slot_name ='slot_node02'
2、修改etc/recovery.done文件

三、修改cluster_passwd文件(注意SYSTEM用戶名要用大寫)
1、修改主庫cluster_passwd
1)備份原cluster_passwd文件
[kingbase@node1 etc]$ cp cluster_passwd cluster_passwd.old
2)通過sys_md5工具生成新的密碼
[kingbase@node1 etc]$ cd ../bin
[kingbase@node1 bin]$ ./sys_md5 -m -f ../etc/kingbasecluster.conf -u SYSTEM beijing
3)對比新舊密碼
[kingbase@node1 bin]$ cat ../etc/cluster_passwd
SUPERMANAGER_V8ADMIN:md5f7902af5f3f7cdcad02b5ca09320d102
SYSTEM:md53b8241a37e0492c38a986844abb8d06b
[kingbase@node1 bin]$ cat ../etc/cluster_passwd.old
SUPERMANAGER_V8ADMIN:md5f7902af5f3f7cdcad02b5ca09320d102
SYSTEM:md53afebd0fba6df9fc2cf82c0b09926bcc
2、修改備庫cluster_passwd
[kingbase@node2 data]$ cd ../..
[kingbase@node2 kha]$ cd kingbasecluster/bin
[kingbase@node2 bin]$ cat ../etc/cluster_passwd
SUPERMANAGER_V8ADMIN:md5f7902af5f3f7cdcad02b5ca09320d102
SYSTEM:md53afebd0fba6df9fc2cf82c0b09926bcc
#執行sys_md5工具生成新的密碼
[kingbase@node2 bin]$ ./sys_md5 -m -f ../etc/kingbasecluster.conf -u SYSTEM beijing
[kingbase@node2 bin]$ cat ../etc/cluster_passwd
SUPERMANAGER_V8ADMIN:md5f7902af5f3f7cdcad02b5ca09320d102
SYSTEM:md53b8241a37e0492c38a986844abb8d06b
四、重啟集群驗證
1) 重啟集群服務
[kingbase@node2 bin]$ ./kingbase_monitor.sh restart
-----------------------------------------------------------------------
2021-03-22 11:07:20 KingbaseES automation beging...
2021-03-22 11:07:20 stop kingbasecluster [192.168.7.248] ...
.......
Authorized users only. All activities may be monitored and reported.
=======================================================================
| ip | program| [status]
[ 192.168.7.248]| [kingbasecluster]| [active]
[ 192.168.7.249]| [kingbasecluster]| [active]
[ 192.168.7.248]| [kingbase]| [active]
[ 192.168.7.249]| [kingbase]| [active]
=======================================================================
2)查看集群服務進程
[kingbase@node2 bin]$ ps -ef |grep kingbase
kingbase 380605 1 0 Mar21 ? 00:00:04 /home/kingbase/cluster/kha6/kha6/kingbase/bin/kbha -A daemon -f /home/kingbase/cluster/kha6/kha6/kingbase/bin/../etc/repmgr.conf
kingbase 717813 1 0 11:07 ? 00:00:00 /home/kingbase/cluster/kha/db/bin/kingbase -D /home/kingbase/cluster/kha/db/data
kingbase 717814 717813 0 11:07 ? 00:00:00 kingbase: logger process
kingbase 717815 717813 0 11:07 ? 00:00:00 kingbase: startup process recovering 000000010000000000000006
kingbase 717819 717813 0 11:07 ? 00:00:00 kingbase: checkpointer process
kingbase 717820 717813 0 11:07 ? 00:00:00 kingbase: writer process
kingbase 717821 717813 0 11:07 ? 00:00:00 kingbase: stats collector process
kingbase 717822 717813 0 11:07 ? 00:00:00 kingbase: wal receiver process streaming 0/60000D0
root 718723 1 0 11:08 ? 00:00:00 ./kingbasecluster -n
root 718766 718723 0 11:08 ? 00:00:00 kingbasecluster: watchdog
root 718767 718723 0 11:08 ? 00:00:00 kingbasecluster: lifecheck
root 718768 718767 0 11:08 ? 00:00:00 kingbasecluster: heartbeat receiver
root 718769 718767 0 11:08 ? 00:00:00 kingbasecluster: heartbeat sender
root 718770 718723 0 11:08 ? 00:00:00 kingbasecluster: wait for connection request
.........
root 718786 718723 0 11:08 ? 00:00:00 kingbasecluster: PCP: wait for connection request
root 718787 718723 0 11:08 ? 00:00:00 kingbasecluster: worker process
五、在主庫上驗證集群狀態
[kingbase@node1 bin]$ ./ksql -U SYSTEM -W beijing -p 9999 TEST
ksql (V008R003C002B0180)
Type "help" for help.
TEST=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+---------------+-------+--------+-----------+---------+------------+----------
0 | 192.168.7.248 | 54321 | up | 0.500000 | primary | 0 | true | 0
1 | 192.168.7.249 | 54321 | up | 0.500000 | standby | 0 | false | 0
(2 rows)
TEST=# select * from sys_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state
--------+----------+---------+------------------+---------------+-----------------+-----
744439 | 10 | SYSTEM | node02 | 192.168.7.249 | | 18376 | 2021-03-22 11:07:44.130199+08 | | streaming | 0/60000D0 | 0/60000D0 | 0/60000D0 | 0/60000D0 | 2 | sync
(1 row)
六、總結
本案例是在通用機版本下完成,不同的版本修改,system用戶是數據庫管理中的管理員,對於密碼的修改,盡量能在測試環境下先測試成功后,再在生產環境實施。
