当前位置: 首页 > news >正文

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 失败导致不同节点查询普通标签时的不一致问题。

相关文章:

  • QT 老版本下载地址被禁 如何下载
  • YOLO检测目标后实现距离测量
  • 清华大学:VR交通场景下行人避让车辆行为研究
  • 2019年计算机真题
  • 数据集 | 沥青路面缺陷目标检测
  • C++语言程序设计——02 变量与数据类型
  • 构建灵活的接口抽象层:支持多种后端数据存取的实战指南
  • [250412] OpenSSH 10.0 发布,移除DSA算法,sshd默认禁用有限域DH,并分离认证代码
  • Koordinator-nodeMetricController
  • 消息中间件篇——RabbitMQ,Kafka
  • ubuntu 安装pyllama教程
  • vue项目调用netcore webapi接口提示:400 Bad Request的解决
  • 英伟达Llama-3.1-Nemotron-Ultra-253B-v1语言模型论文快读:FFN Fusion
  • DAY07:【pytorch】模型构建
  • 07-并发线程 面试题-mk
  • LeetCode 每日一题 2025/4/7-2025/4/13
  • 算法题(123):回文日期
  • Seleuinm之javascript语句执行
  • React Hooks: useRef,useCallback,useMemo用法详解
  • Python中内置的数据结构类型详析(内置数据容器)
  • 网络推广网站/百度400电话
  • 常宁网站建设/搜索引擎优化排名技巧
  • 重庆网站建设工作室/百度渠道开户哪里找
  • 做流媒体视频播放网站求助/杭州市优化服务
  • 如何查询在建项目/镇江搜索优化技巧
  • 家居网站建设的需求分析/东莞网站推广企业