原文链接:【KWDB创作者计划】_部署KWDB多副本集群环境踩过的坑和经验总结-CSDN博客
作者:降世神童
KWDB是由开放原子开源基金会孵化及运营的开源项目,是一款面向AIoT场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
■ 部署方式分为:
● 二进制安装包:支持单机和集群以及安全和非安全部署模式,本篇博客就使用此种方式进行集群部署。
● 容器镜像:KWDB支持容器方式集群部署。
● 源码:源码编译目前支持单节点非安全模式部署。
KWDB-v2.2.0版本官方下载地址:https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0
在部署过程中,系统将对配置文件、运行环境、硬件配置、软件依赖和免密登录进行检查。如果硬件不满足要求,系统仍会继续安装,并提示硬件规格不足。如果软件依赖未满足要求,系统将中止安装,并给出相应提示。
IP地址 |主机名|CPU|内存|硬盘|操作系统 10.1.248.95|kwdb|18核|16G|100G|Ubuntu20.04 10.1.248.74|kwdb|28核|16G|100G|Ubuntu20.04 10.1.248.75|kwdb|38核|16G|100G|Ubuntu20.04
2.1. 配置主机名
root@vm10-1-248-95:~# hostnamectl set-hostname kwdb1 root@vm10-1-248-74:~# hostnamectl set-hostname kwdb2 root@vm10-1-248-75:~# hostnamectl set-hostname kwdb3
配置三个节点的/etc/hosts文件:
10.1.248.95 kwdb1 10.1.248.74 kwdb2 10.1.248.75 kwdb3
2.2. SSH免密登录
先在kwdb1节点生成公私密钥对:
ssh-keygen -f ~/.ssh/id_rsa -N ""
将密钥分发至集群其它节点:
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no kwdb1 ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no kwdb2 ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no kwdb3
确认是否可以使用非交互式的方法登录集群其它节点:
ssh kwdb2 ssh kwdb3
上述操作也需要在kwdb2和kwdb3也执行一遍。
2.3. 时钟同步
关闭 timesyncd 服务:
timedatectl set-ntp false
使用阿里云NTP服务器配置时钟同步:
apt install -y ntp ntpdate -u time.pool.aliyun.com crontab -e 0 6 * * * /usr/sbin/ntpdate -e time.pool.aliyun.com >/dev/null 2>&1
3.1. 前提配置
mkdir -p /data/kaiwudb // 创建数据目录
tar xf KWDB-2.2.0-ubuntu20.04-x86_64-debs.tar.gz cd kwdb_install/ vim 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 data_root=/data/kaiwudb # CPU usage[0-1] # cpu=1 [local] # local node configuration node_addr=10.1.248.95 # section cluster is optional [cluster] # remote node addr,split by ',' node_addr=10.1.248.95,10.1.248.74,10.1.248.65 # ssh info ssh_port=22 ssh_user=root
secure_mode:是否开启安全模式,支持以下两种设置:
● insecure:使用非安全模式。
● tls:(默认选项)开启 TLS 安全模式。开启安全模式后,KWDB 生成 TLS 证书,作为客户端或应用程序连接数据库的凭证。
特殊说明:本人认为此处KWDB设计不太友善,如果将secure_mode配置为insecure,也就是不使用TLS安全模式,但是在最后的KWDB客户端连接中还要指定--insecure选项,表示不安全的连接,有重复性配置。
kwbase sql --host=10.1.248.95:26257 --user=wangzy --insecure
在执行安装多副本集群命令之前,先安装依赖包,否则在安装过程中会报如下错误,注意三个节点都需要安装:
[ERROR] 2025-04-13 10:53:02 Install failed: Selecting previously unselected package kwdb-server. (Reading database ... 76572 files and directories currently installed.) Preparing to unpack .../kwdb-server_2.2.0-ubuntu-20.04_amd64.deb ... Unpacking kwdb-server (2.2.0-ubuntu-20.04) ... dpkg: dependency problems prevent configuration of kwdb-server: kwdb-server depends on libprotobuf17; however: Package libprotobuf17 is not installed. kwdb-server depends on squashfs-tools; however: Package squashfs-tools is not installed. dpkg: error processing package kwdb-server (--install): dependency problems - leaving unconfigured Errors were encountered while processing: kwdb-server
apt install -y openssl libprotobuf-dev protobuf-compiler libgeos-dev liblzma-dev squashfs-tools libgcc1 mount squashfuse for pkg in openssl libprotobuf geos liblzma squashfs-tools libgcc mount squashfuse; do dpkg -l | grep $pkg;done openssl1.1.1f-1ubuntu2.24 libprotobuf-dev:amd643.6.1.3-2ubuntu5.2 libprotobuf-lite17:amd643.6.1.3-2ubuntu5.2 libprotobuf17:amd643.6.1.3-2ubuntu5.2 libgeos-3.8.0:amd643.8.0-1build1 libgeos-c1v5:amd643.8.0-1build1 libgeos-dev3.8.0-1build1 liblzma-dev:amd645.2.4-1ubuntu1.1 liblzma5:amd645.2.4-1ubuntu1.1 squashfs-tools1:4.4-1ubuntu0.3 libgcc-9-dev:amd649.3.0-10ubuntu2 libgcc-s1:amd6410.5.0-1ubuntu1~20.04 libgcc11:10.5.0-1ubuntu1~20.04 libmount1:amd642.34-0.1ubuntu9 libsquashfuse0:amd640.1.103-2 mount2.34-0.1ubuntu9.6 squashfuse0.1.103-2 libsquashfuse0:amd640.1.103-2 squashfuse0.1.103-2
3.2. 部署执行
接下来再执行安装多副本集群命令,执行成功后,控制台输出以下信息:
root@kwdb1:~/kwdb_install# ./deploy.sh install --multi-replica Please input kaiwudb's password: [INSTALL COMPLETED]:KaiwuDB has been installed successfully! To start KaiwuDB, please execute the command 'systemctl daemon-reload'.
这一点KWDB还需要再完善下,只给一次输入密码的机会,建议再加一次确认密码,如果两次不一致用户创建失败。
根据系统提示重新加载 systemd 守护进程的配置文件:
root@kwdb1:~/kwdb_install# systemctl daemon-reload
对集群进行初始化:
root@kwdb1:~/kwdb_install# ./deploy.sh cluster --init [INIT COMPLETED]:Cluster init successfully.
查看集群节点状态:
root@kwdb1:~/kwdb_install# ./deploy.sh cluster --status id | address | sql_address | build | started_at | updated_at | locality | start_mode | is_available | is_live -----+-------------------+-------------------+-------+----------------------------------+----------------------------------+--------------+------------+--------------+---------- 1 | 10.1.248.95:26257 | 10.1.248.95:26257 | 2.2.0 | 2025-04-13 08:11:44.385779+00:00 | 2025-04-13 08:11:53.422494+00:00 | region=NODE1 | start | true | true 2 | 10.1.248.74:26257 | 10.1.248.74:26257 | 2.2.0 | 2025-04-13 08:11:44.490362+00:00 | 2025-04-13 08:11:53.495896+00:00 | region=NODE2 | start | true | true 3 | 10.1.248.65:26257 | 10.1.248.65:26257 | 2.2.0 | 2025-04-13 08:11:45.367234+00:00 | 2025-04-13 08:11:54.373949+00:00 | region=NODE3 | start | true | true (3 rows)
在三个节点检查下kwdb端口和服务:
root@kwdb1:~/kwdb_install# systemctl status kaiwudb -l ● kaiwudb.service - KaiwuDB Service Loaded: loaded (/etc/systemd/system/kaiwudb.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2025-04-13 11:32:03 CST; 9min ago Process: 226456 ExecStartPre=/usr/bin/sudo /usr/sbin/sysctl -w vm.max_map_count=10000000 (code=exited, status=0/SUCCESS) Main PID: 226466 (kwbase) Tasks: 42 (limit: 19144) Memory: 405.2M CGroup: /system.slice/kaiwudb.service └─226466 /usr/local/kaiwudb/bin/kwbase start --certs-dir=/etc/kaiwudb/certs --listen-addr=0.0.0.0:26257 --advertise-addr=0.0.0.0:26257 root@kwdb1:~/kwdb_install# ss -tnlp | grep 26257 LISTEN 0 4096 *:26257 *:* users:(("kwbase",pid=226466,fd=16)) root@kwdb1:~/kwdb_install# ss -tnlp | grep 8080 LISTEN 0 4096 *:8080 *:* users:(("kwbase",pid=226466,fd=10))
root@kwdb2:~# systemctl status kaiwudb ● kaiwudb.service - KaiwuDB Service Loaded: loaded (/etc/systemd/system/kaiwudb.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2025-04-13 11:32:07 CST; 3min 56s ago Process: 224238 ExecStartPre=/usr/bin/sudo /usr/sbin/sysctl -w vm.max_map_count=10000000 (code=exited, status=0/SUCCESS) Main PID: 224245 (kwbase) Tasks: 23 (limit: 19144) Memory: 30.0M CGroup: /system.slice/kaiwudb.service └─224245 /usr/local/kaiwudb/bin/kwbase start --certs-dir=/etc/kaiwudb/certs --listen-addr=0.0.0.0:26257 --advertise-addr=10.1.248.74:26257 root@kwdb2:~# ss -tnlp | grep 26257 LISTEN 0 4096 *:26257 *:* users:(("kwbase",pid=224245,fd=16)) root@kwdb2:~# ss -tnlp | grep 8080 LISTEN 0 4096 *:8080 *:* users:(("kwbase",pid=224245,fd=10))
root@kwdb3:~# systemctl status kaiwudb ● kaiwudb.service - KaiwuDB Service Loaded: loaded (/etc/systemd/system/kaiwudb.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2025-04-13 11:32:07 CST; 4min 8s ago Process: 173040 ExecStartPre=/usr/bin/sudo /usr/sbin/sysctl -w vm.max_map_count=10000000 (code=exited, status=0/SUCCESS) Main PID: 173043 (kwbase) Tasks: 23 (limit: 19136) Memory: 30.5M CGroup: /system.slice/kaiwudb.service └─173043 /usr/local/kaiwudb/bin/kwbase start --certs-dir=/etc/kaiwudb/certs --listen-addr=0.0.0.0:26257 --advertise-addr=10.1.248.65:26257 root@kwdb3:~# ss -tnlp | grep 26257 LISTEN 0 4096 *:26257 *:* users:(("kwbase",pid=173043,fd=16)) root@kwdb3:~# ss -tnlp | grep 8080 LISTEN 0 4096 *:8080 *:* users:(("kwbase",pid=173043,fd=10))
配置KWDB开机自启动后,如果系统重启,则自动启动KWDB:
systemctl enable kaiwudb
部署完成后,系统会将KWDB封装成系统服务,并生成kaiwudb.service 和kaiwudb_env两个文件。用户可以按需配置KWDB集群。
4.1. 配置启动参数
启动参数是节点级配置。如需修改整个集群的配置,用户需要登录集群中的每个节点并完成相应的配置。
通常情况下,如果用户没有配置启动参数,系统会使用参数默认值启动 KWDB。当用户配置了启动参数,KWDB 启动时会优先使用配置的启动参数。部署完 KWDB 后,用户可以按需修改kaiwudb_env文件中的启动参数。
● 停止KWDB服务:
systemctl stop kaiwudb
● 编辑/etc/kaiwudb/script/kaiwudb_env文件,根据需要配置KWDB启动参数:
#KAIWUDB_START_ARG="" KAIWUDB_START_ARG="--cache=10000"
● 保存kaiwudb_env文件并重新加载文件,最后启动KWDB服务:
systemctl daemon-reload systemctl start kaiwudb
4.2. 配置CPU资源占用率
CPU资源占用率是节点级配置。如需修改整个集群的配置,用户需要登录集群中的每个节点并完成相应的配置。
KWDB支持在不停止KWDB服务的情况下实时修改CPU资源占用率:
● 编辑/etc/systemd/system/kaiwudb.service文件,根据需要修改KWDB的CPU资源占用率:
...... [Service] User=kaiwudb Group=kaiwudb Type=simple CPUQuota=240% # 添加CPUQuota值 LimitMEMLOCK=infinity LimitNOFILE=1048576 ......
CPUQuota的计算公式为:CPU占用率 x 服务器CPU核数 x 100%。例如,我部署环境的CPU核数为8,计划将 CPU占用率为0.3, 则对应的CPUQuota的值应为 0.3 x 8 x 100% = 240%
● 保存修改后的kaiwudb.service文件并重新加载文件:
systemctl daemon-reload
● 确认新的CPU资源占用率是否生效:
systemctl show kaiwudb | grep CPUQuota CPUQuotaPerSecUSec=2.400000s CPUQuotaPeriodUSec=infinity
KWDB在安装包中提供了add_user.sh脚本。在安装并运行KWDB后,用户可以运行此脚本为数据库创建用户和密码,并使用创建的用户名和密码来连接、登录数据库。
root@kwdb1:~/kwdb_install# ./add_user.sh Please enter the username:wangzy Please enter the password: [ADD USER COMPLETED]:User creation completed.
这一点KWDB还需要再完善下,只给一次输入密码的机会,如果自己输入错误,那么只能再去删除库删除后重新创建。建议再加一次确认密码,如果两次不一致用户创建失败。
使用新建的用户连接数据库:
root@kwdb1:~/kwdb_install# kwbase sql --host=10.1.248.95:26257 --certs-dir=/etc/kaiwudb/certs/ --user=wangzy # # Welcome to the KWDB SQL shell. # All statements must be terminated by a semicolon. # To exit, type: \q. # Enter password: # Server version: KaiwuDB 2.2.0 (x86_64-linux-gnu, built 2025/03/31 07:20:47, go1.16.15, gcc 9.4.0) (same version as client) # Cluster ID: 65071f3e-f4a4-48e4-9a4e-953f772bf661 # # Enter \? for a brief introduction. # wangzy@10.1.248.95:26257/defaultdb> show databases; database_name | engine_type ----------------+-------------- defaultdb | RELATIONAL postgres | RELATIONAL system | RELATIONAL (3 rows) Time: 5.441202ms wangzy@10.1.248.95:26257/defaultdb> show users; username | options | member_of -----------+------------+------------ admin | CREATEROLE | {} root | CREATEROLE | {admin} wangzy | | {admin} (3 rows) Time: 18.748018ms
删除用户:
drop user wangzy;
启动KWDB服务:
systemctl start kaiwudb
停止KWDB服务:
systemctl stop kaiwudb
KWDB(KaiwuDB)分企业版和开源版,企业版相比开源版的核心优势在于企业级可靠性、高性能和专属服务。KWDB可部署中心分布式架构,支持水平扩展,性能线性提升,并且支持多副本集群部署,保障集群整体的高可用性。提供低成本的数据存储,数据降采样存储;按“时间热度” 进行数据生命周期管理。提供可插拔式 AI分析预测能力,支持对模型的导、练、预、评、换。KWDB提供标准ODBC、JDBC、RESTful API 接口,提供多种编程语言接口, 兼容 MQTT (EMQX)、Kafka、Telegraf 等;兼容主流芯片和操作系统。支持身份鉴权、权限管理、数据库审计、支持通信加密。提供上百种监控接口,完善迁移方案支持。