KWDB創作者計劃—KWDB多副本集群保姆級部署

📢📢📢📣📣📣
作者: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 支持使用容器或二進制安裝包部署以下集群:

image.png

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:指定使用密鑰時的密碼。為了實現非交互式登錄,建議將密碼設置為空。

image.png

將密鑰分發至集群其它節點。

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

image.png

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

image.png
image.png
image.png

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 均勻分布在所有節點上,確保數據的高可用性和平衡性。

image.png

單節點異常:如果單個節點因網絡斷開、延遲、操作系統故障、磁盤故障等原因導致節點狀態變為異常(is_available 和 is_live 均為 false),系統會開始遷移該節點的 leaseholder,遷移期間數據查詢和 DML 操作可能受影響,DDL 操作可能會報錯,生命周期會順延至下一執行周期執行。待節點恢復為可用狀態后恢復正常。

image.png

單節點故障:節點離線時間達到設定值后,系統會將該節點標記為不可用。如果剩余節點數量仍大于副本數,系統自動補足缺失的副本,確保數據的高可用性、副本補足期間,數據查詢不受影響,DML 操作不受影響,DDL 操作可能會報錯,副本補足后,DDL 操作恢復正常。

image.png

節點恢復:不可用節點恢復后,系統會將副本和 leaseholder 回遷到該節點,遷移期間數據查詢和 DML 操作可能受影響,DDL 操作可能會報錯,生命周期會順延至下一執行周期執行。待節點恢復為可用狀態后恢復正常。

image.png

多節點故障:如果兩個或更多節點出現故障,由于剩余節點數小于或等于副本數,系統無法補足缺失的副本,可能導致部分數據無法訪問,甚至出現集群無法使用的情況。

image.png

節點故障影響:
集群節點多次發生故障后重新加入,可能會導致數據寫入緩慢。
集群節點故障或故障節點恢復后的 leaseholder 遷移可能導致讀寫短暫不可用或卡頓。
可通過重試機制解決因 update tag 失敗導致不同節點查詢普通標簽時的不一致問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75555.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

micro ubuntu 安裝教程

micro ubuntu 安裝教程 官網地址 : https://micro-editor.github.io 以下是在 Ubuntu 系統中安裝 micro 編輯器 的詳細教程: 方法 1:通過 ?apt?? 直接安裝(推薦) 適用于 Ubuntu 20.04 及以上版本(官方倉庫已收錄…

Docker 鏡像 的常用命令介紹

拉取鏡像 $ docker pull imageName[:tag][:tag] tag 不寫時,拉取的 是 latest 的鏡像查看鏡像 查看所有本地鏡像 docker images or docker images -a查看完整的鏡像的數字簽名 docker images --digests查看完整的鏡像ID docker images --no-trunc只查看所有的…

從零搭建微服務項目Pro(第0章——微服務項目腳手架搭建)

前言: 在本專欄Base第0章曾介紹一種入門級的微服務項目搭建,盡管后續基于此框架上實現了Nacos、Eureka服務注冊發現、配置管理、Feign調用、網關模塊、OSS文件存儲、JSR參數校驗、LogBack日志配置,鑒權模塊、定時任務模塊等,但由于…

VS Code下開發FPGA——FPGA開發體驗提升__下

上一篇:IntelliJ IDEA下開發FPGA-CSDN博客 Type:Quartus 一、安裝插件 在應用商店先安裝Digtal IDE插件 安裝后,把其他相關的Verilog插件禁用,避免可能的沖突。重啟后,可能會彈出下面提示 這是插件默認要求的工具鏈&a…

使用Python從零開始構建端到端文本到圖像 Transformer大模型

簡介:通過特征向量從文本生成圖像 回顧:多模態 Transformer 在使用Python從零實現一個端到端多模態 Transformer大模型中,我們調整了字符級 Transformer 以處理圖像(通過 ResNet 特征)和文本提示,用于視覺…

Webpack中的文件指紋:給資源戴上個“名牌”

你是否想過,當你修改代碼后,瀏覽器為什么仍然拿著舊版資源不放?秘密就在于——文件指紋!簡單來說,文件指紋就像給每個構建出來的文件貼上獨一無二的“姓名牌”,告訴瀏覽器:“嘿,我更…

python可變對象與不可變對象

文章目錄 Python 中的可變對象與不可變對象不可變對象(Immutable Objects)可變對象(Mutable Objects)重要區別 Python 中的可變對象與不可變對象 在 Python 中,對象可以分為可變對象(mutable)和不可變對象(immutable),這是 Python 中非常重要的概念&…

DeepSeek私有化部署性能怎么樣?企業級AI落地實戰解析!

1. 私有化部署是什么?為什么企業需要它? 很多公司在考慮用AI時都會問:“DeepSeek私有化部署性能怎么樣?能不能在我們自己的服務器上跑?” 私有化部署的意思就是把AI模型裝在你自己的機房或者云服務器上,而…

SQL學習--基礎語法學習

SQL和excle對比 學習目標 單表查詢 項目背景 SQL 練習環境 SQL Online Compiler - Next gen SQL Editor 商品信息表:https://study-zhibo.oss-cn-shanghai.aliyuncs.com/test/%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E8%A1%A8.csv 訂單明細表:https://…

【Docker基礎-網絡】--查閱筆記4

目錄 Docker 網絡網絡類型none 網絡host 網絡bridge 網絡自定義網絡 容器間通信IP 通信Docker DNS Serverjoined 容器 容器與外部通信容器訪問外部外部訪問容器 Docker 網絡 學習Docker提供的幾種原生網絡如何創建自定義網絡容器間通信,容器于外界交互 Docker 安裝…

GPT模型架構與文本生成技術深度解析

核心發現概述 本文通過系統分析OpenAI的GPT系列模型架構,揭示其基于Transformer解碼器的核心設計原理與文本生成機制。研究顯示,GPT模型通過自回歸機制實現上下文感知的序列生成,其堆疊式解碼器結構配合創新的位置編碼方案,可有效…

AWTK-MVVM 如何讓多個View復用一個Model記錄+關于app_conf的踩坑

前言 有這么一個業務,主界面點擊應用窗口進入聲納顯示界面,聲納顯示界面再通過按鈕進入菜單界面,菜單界面有很多關于該聲納顯示界面的設置項,比如量程,增益,時間顯示,亮度,對比度等…

CrystalDiskInfo電腦硬盤監控工具 v9.6.0中文綠色便攜版

前言 CrystalDiskInfo是一個不用花錢的硬盤小幫手軟件,它可以幫你看看你的電腦硬盤工作得怎么樣,健不健康。這個軟件能顯示硬盤的溫度高不高、還有多少地方沒用、傳輸東西快不快等等好多信息。用了它,你就能很容易地知道硬盤現在是什么情況&…

數據分析-數據預處理

數據分析-數據預處理 處理重復值 duplicated( )查找重復值 import pandas as pd apd.DataFrame(data[[A,19],[B,19],[C,20],[A,19],[C,20]],columns[name,age]) print(a) print(--------------------------) aa.duplicated() print(a)只判斷全局不判斷每個 any() import p…

如何用海倫公式快速判斷點在直線的哪一側

一、海倫公式的定義與推導 1. 海倫公式的定義 海倫公式(Heron’s Formula)是用于計算三角形面積的一種方法,適用于已知三角形三邊長度的情況。公式如下: S s ( s ? a ) ( s ? b ) ( s ? c ) S \sqrt{s(s - a)(s - b)(s - c…

python推箱子游戲

,--^----------,--------,-----,-------^--,-------- 作者 yty---------------------------^----------_,-------, _________________________XXXXXX XXXXXX XXXXXX ______(XXXXXXXXXXXX(________(------ 0 [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,…

使用Python建模量子隧穿

引言 量子隧穿是量子力學中的一個非常有趣且令人神往的現象。在經典物理學中,我們通常認為粒子必須克服一個勢壘才能通過它。但是,在量子力學中,粒子有時可以“穿越”一個勢壘,即使它的能量不足以克服這個勢壘。這種現象被稱為“量子隧穿”。今天,我們將通過 Python 來建…

Vuex Actions 多參數傳遞的解決方案及介紹

Vuex Actions 多參數傳遞的解決方案及介紹 引言 在Vuex狀態管理模式中,Actions 扮演著至關重要的角色。它主要用于處理異步操作,并且可以提交 Mutations 來修改全局狀態。然而,在實際開發中,我們常常會遇到需要向 Actions 傳遞多…

設計模式 --- 策略模式

?策略模式(Strategy Pattern)是一種 ??行為型設計模式??,用于動態切換算法或策略??,使得算法可以獨立于客戶端變化。它通過封裝算法策略并使其可互換,提升了系統的靈活性和擴展性,尤其適用于需要多種…

【論文閱讀】RMA: Rapid Motor Adaptation for Legged Robots

Paper: https://arxiv.org/abs/2107.04034Project: https://ashish-kmr.github.io/rma-legged-robots/Code: https://github.com/antonilo/rl_locomotion訓練環境:Raisim 1.方法 RMA(Rapid Motor Adaptation)算法通過兩階段訓練實現四足機器…