📢📢📢📣📣📣
作者:IT邦德
中國DBA聯盟(ACDU)成員,10余年DBA工作經驗
Oracle、PostgreSQL ACE
CSDN博客專家及B站知名UP主,全網粉絲10萬+
擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,
安裝遷移,性能優化、故障應急處理
文章目錄
- 1.部署概述
- 2.安裝包
- 3.節點配置
- 3.1 SSH 免密登錄
- 3.2 時鐘同步
- 4.裸機部署
- 5.初始化并啟動集群
- 6.配置集群
- 7.集群的日常運維
- 7.1 創建用戶
- 7.2 集群啟動
- 7.3 分片
KWDB作為一款分布式數據庫,其集群管理涉及架構設計、部署、監控、調優和故障處理等多個方面。以下從關鍵管理維度進行詳細說明,幫助您高效運維 KaiwuDB 集群
1.部署概述
KWDB 支持使用容器或二進制安裝包部署以下集群:
2.安裝包
獲取系統環境對應的 DEB 或 RPM 安裝包,將安裝包復制到待安裝 KWDB 的目標機器上,然后解壓縮安裝包:
1.所需資源包下載地址:
https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0
tar -xzvf KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz
root@jeames-virtual-machine:/opt# cd kwdb_install/
root@jeames-virtual-machine:/opt/kwdb_install# ll
total 52
drwxr-xr-x 4 root root 4096 3月 31 15:22 ./
drwxr-xr-x 3 root root 4096 4月 11 23:11 …/
-rwxr-xr-x 1 root root 2024 3月 31 15:11 add_user.sh*
-rw-r–r-- 1 root root 3605 3月 31 15:12 .construction_var
-rw-r–r-- 1 root root 465 3月 31 15:11 deploy.cfg
-rwxr-xr-x 1 root root 24410 3月 31 15:11 deploy.sh*
drwxr-xr-x 2 root root 4096 3月 31 15:22 packages/
drwxr-xr-x 2 root root 4096 3月 31 15:11 utils/
2.相關依賴安裝
sudo apt update
sudo apt install cmake
sudo snap install go --classic
sudo apt install libprotobuf-dev
3.節點配置
3.1 SSH 免密登錄
登錄當前節點,生成公私密鑰對,每個節點均操作
ssh-keygen -f ~/.ssh/id_rsa -N “”
參數說明:
-f:指定生成的密鑰對文件名。
-N:指定使用密鑰時的密碼。為了實現非交互式登錄,建議將密碼設置為空。
將密鑰分發至集群其它節點。
sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2
sudo hostnamectl set-hostname node3
vi /etc/hosts
192.168.3.10 node1
192.168.3.11 node2
192.168.3.12 node3
root@jeames-virtual-machine:~# hostnamectl
Static hostname: node1
Icon name: computer-vm
Chassis: vm
Machine ID: ba13b266fdb04c3c9fc7d06c4e7fa8ea
Boot ID: 793ca8918e984d9f84cf718ca4ce03c8
Virtualization: vmware
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 6.8.0-57-generic
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node1
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node2
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node3
確認是否可以使用非交互式的方法登錄集群其它節點
ssh node1
ssh node2
ssh node3
3.2 時鐘同步
KWDB 采用中等強度的時鐘同步機制來維持數據的一致性。當節點檢測到自身的機器時間與集群中至少 50% 的節點的機器時間的誤差值超過集群最大允許時間誤差值(默認為 500 ms)的 80% 時,該節點會自動停止,從而避免違反數據一致性,帶來讀寫舊數據的風險。每個節點都必須運行 NTP(Network Time Protocol,網絡時間協議)或其他時鐘同步軟件,防止時鐘漂移得太遠。
啟用 NTP 服務
sudo timedatectl set-ntp on
sudo apt update && sudo apt install ntp
timedatectl status
2.重啟服務
sudo systemctl restart ntp
sudo ntpq -p
4.裸機部署
登錄待部署節點,編輯安裝包目錄下的 deploy.cfg 配置文件,設置安全模式、管理用戶、服務端口等信息,并添加其他節點信息。
cd /opt/kwdb_install
vi deploy.cfg[global]
# Whether to turn on secure mode
secure_mode=tls
# Management KaiwuDB user
management_user=kaiwudb
# KaiwuDB cluster http port
rest_port=8080
# KaiwuDB service port
kaiwudb_port=26257
# KaiwuDB data directory
data_root=/var/lib/kaiwudb
# CPU usage[0-1]
# cpu=1
[local]
# local node configuration
node_addr=192.168.3.10
# section cluster is optional
[cluster]
# remote node addr,split by ','
node_addr=192.168.3.10,192.168.3.11,192.168.3.12
# ssh info
ssh_port=22
ssh_user=root配置參數說明:
global:全局配置
secure_mode:是否開啟安全模式,支持以下兩種設置:
insecure:使用非安全模式。
tls:(默認選項)開啟 TLS 安全模式。開啟安全模式后,KWDB 生成 TLS 證書,作為客戶端或應用程序連接數據庫的憑證。生成的客戶端相關證書存放在 /etc/kaiwudb/certs 目錄。
management_user:KWDB 的管理用戶,默認為 kaiwudb。安裝部署后,KWDB 創建相應的管理用戶以及和管理用戶同名的用戶組。
rest_port:KWDB Web 服務端口,默認為 8080。
kaiwudb_port:KWDB 服務端口,默認為 26257。
data_root:數據目錄,默認為 /var/lib/kaiwudb。
cpu: 可選參數,用于指定 KWDB 服務占用當前節點服務器 CPU 資源的比例,默認無限制。取值范圍為 [0,1],最大精度為小數點后兩位。KWDB 支持調整 CPU 資源占用率。更多信息,參見配置集群。注意:如果部署環境為 Ubuntu 18.04 版本,部署集群后,需要將 kaiwudb.service 文件中的 CPUQuota 修改為整型值,例如,將 180.0% 修改為 180%,以確保設置生效。具體操作步驟,參見配置 CPU 資源占用率。
local:本地節點配置
local_node_ip:本地節點對外提供服務的 IP 地址,監聽地址為 0.0.0.0,端口為 KWDB 服務端口。
cluster:集群內其他節點的配置
cluster_node_ips:遠程節點對外提供服務的 IP 地址。各節點的 IP 地址使用逗號(,)分割,遠程節點數應不少于 2 個。
ssh_port:遠程節點的 SSH 服務端口。各節點的 SSH 服務端口必須相同。
ssh_user:遠程節點的 SSH 登錄用戶。各節點的 SSH 登錄用戶必須相同為 deploy.sh 腳本增加運行權限
chmod +x ./deploy.sh執行安裝命令多副本集群
./deploy.sh install --multi-replica
多副本架構:每個數據分片配置 3 副本(1 Leader + 2 Followers),通過 Raft/Paxos 協議保證數據一致性單副本集群
./deploy.sh install --single-replica輸入密碼:beijing
root@node1:/opt/kwdb_install# ./deploy.sh install --multi-replica[WARN] 2025-04-12 00:07:55 The number of CPU cores does not meet the requirement. KaiwuDB may running failed.
The authenticity of host '192.168.3.12 (192.168.3.12)' can't be established. ] 20%
ED25519 key fingerprint is SHA256:edOHleuRe8EgN1wyHQFPQxs5T1Uj9trdIGQgBGsGcTs.
This host key is known by the following other names/addresses:~/.ssh/known_hosts:1: [hashed name]~/.ssh/known_hosts:4: [hashed name]~/.ssh/known_hosts:5: [hashed name]~/.ssh/known_hosts:6: [hashed name]~/.ssh/known_hosts:7: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Please input kaiwudb's password: [INSTALL COMPLETED]:KaiwuDB has been installed successfully! To start KaiwuDB, please execute the command 'systemctl daemon-reload'.
、根據系統提示重新加載 systemd 守護進程的配置文件
systemctl daemon-reload
5.初始化并啟動集群
集群初始化和啟動大約需要 10 秒左右時間。在此期間,如果有節點死亡,可能會導致集群無法觸發高可用機制。
./deploy.sh cluster -i
root@node1:/opt/kwdb_install# ./deploy.sh cluster -i
[INIT COMPLETED]:Cluster init successfully.
查看集群節點狀態
./deploy.sh cluster -s
./deploy.sh cluster --status
配置 KWDB 開機自啟動
配置 KWDB 開機自啟動后,如果系統重啟,則自動啟動 KWDB。
systemctl enable kaiwudb
systemctl status kaiwudb
6.配置集群
部署完 KWDB 集群以后,用戶可以按需配置 KWDB 集群。本文介紹如何配置通過二進制安裝包部署的 KWDB 集群。
部署完成后,系統會將 KWDB 封裝成系統服務,并生成 kaiwudb.service 和 kaiwudb_env 兩個文件。用戶可以按需配置 KWDB 集群。
kaiwudb_env:配置 KWDB 啟動參數
kaiwudb.service:配置 KWDB 的 CPU 資源占用率
啟動參數是節點級配置。如需修改整個集群的配置,用戶需要登錄集群中的每個節點并完成相應的配置。
1.停止 KWDB 服務
systemctl stop kaiwudb
2.進入 /etc/kaiwudb/script 目錄,打開 kaiwudb_env 文件。
3.根據需要,配置 KWDB 啟動參數。
以下示例將 --cache 啟動參數設置為 10000
KAIWUDB_START_ARG=“–cache=10000”
4.保存 kaiwudb_env 文件并重新加載文件。
systemctl daemon-reload
5.重新啟動 KWDB 服務
systemctl restart kaiwudb
CPU 資源占用率是節點級配置。如需修改整個集群的配置,用戶需要登錄集群中的每個節點并完成相應的配置。
1.進入 /etc/systemd/system 目錄,打開 kaiwudb.service 文件。
2.根據需要,修改 KWDB 的 CPU 資源占用率。
以下示例將 CPU 資源占用率(CPUQuota)設置為 180%。
CPUQuota=180%
CPUQuota 的計算公式為:CPU 占用率 x 服務器CPU核數 x 100%。例如,假設節點所在服務器的 CPU 核數為 6,計劃將 CPU 占用率調整為 0.3, 則對應的 CPUQuota 的值應為 0.3 x 6 x 100% = 180%。
保存 kaiwudb.service 文件并重新加載文件。
systemctl daemon-reload
確認新的 CPU 資源占用率是否生效。
7.集群的日常運維
7.1 創建用戶
KWDB 在安裝包中提供了 add_user.sh 腳本。在安裝并運行 KWDB 后,用戶可以運行此腳本為數據庫創建用戶和密碼,并使用創建的用戶名和密碼來連接、登錄數據庫。
1.在目標機器上,進入 KWDB 安裝包目錄。
2.執行 add_user.sh 腳本,根據系統提示創建用戶名和密碼。
./add_user.sh
Please enter the username:test
Please enter the password:beijing
– 創建角色并限制訪問
CREATE ROLE analyst WITH LOGIN PASSWORD ‘secure123’;
GRANT SELECT ON TABLE sales TO analyst;
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM PUBLIC;
7.2 集群啟動
systemctl status kaiwudb # 查看服務狀態
systemctl restart kaiwudb # 滾動重啟單個節點(需逐個操作)
systemctl enable kaiwudb # 設置開機自啟sudo apt-get install postgresql-client
root@node1:/opt/kwdb_install# psql -U test -h 127.0.0.1 -p 26257
Password for user test:
psql (14.17 (Ubuntu 14.17-0ubuntu0.22.04.1), server 9.5.0)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.test=> use defaultdb;
SET
test=> SHOW DATABASES WITH COMMENT;database_name | engine_type | comment
---------------+-------------+---------defaultdb | RELATIONAL | postgres | RELATIONAL | system | RELATIONAL | test=> show users;username | options | member_of
----------+------------+-----------admin | CREATEROLE | {}root | CREATEROLE | {admin}test | | {admin}test=> show SERVER_VERSION;server_version
----------------9.5.0
7.3 分片
KWDB 多副本集群默認采用 3 副本機制。為了確保系統在節點發生故障后仍能夠提供服務,集群通過多數投票機制保證數據一致性和可用性,因此至少需要 2 個副本保持可用狀態。
正常運行:KWDB 集群啟動后,副本和 leaseholder 均勻分布在所有節點上,確保數據的高可用性和平衡性。
單節點異常:如果單個節點因網絡斷開、延遲、操作系統故障、磁盤故障等原因導致節點狀態變為異常(is_available 和 is_live 均為 false),系統會開始遷移該節點的 leaseholder,遷移期間數據查詢和 DML 操作可能受影響,DDL 操作可能會報錯,生命周期會順延至下一執行周期執行。待節點恢復為可用狀態后恢復正常。
單節點故障:節點離線時間達到設定值后,系統會將該節點標記為不可用。如果剩余節點數量仍大于副本數,系統自動補足缺失的副本,確保數據的高可用性、副本補足期間,數據查詢不受影響,DML 操作不受影響,DDL 操作可能會報錯,副本補足后,DDL 操作恢復正常。
節點恢復:不可用節點恢復后,系統會將副本和 leaseholder 回遷到該節點,遷移期間數據查詢和 DML 操作可能受影響,DDL 操作可能會報錯,生命周期會順延至下一執行周期執行。待節點恢復為可用狀態后恢復正常。
多節點故障:如果兩個或更多節點出現故障,由于剩余節點數小于或等于副本數,系統無法補足缺失的副本,可能導致部分數據無法訪問,甚至出現集群無法使用的情況。
節點故障影響:
集群節點多次發生故障后重新加入,可能會導致數據寫入緩慢。
集群節點故障或故障節點恢復后的 leaseholder 遷移可能導致讀寫短暫不可用或卡頓。
可通過重試機制解決因 update tag 失敗導致不同節點查詢普通標簽時的不一致問題。