【KWDB创作者计划】_部署KWDB多副本集群环境踩过的坑和经验总结

发布于:2025-04-15 ⋅ 阅读:(32) ⋅ 点赞:(0)

1. 概述

   KWDB是由开放原子开源基金会孵化及运营的开源项目,是一款面向AIoT场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。

   ■ 部署方式分为:
   ● 二进制安装包:支持单机和集群以及安全和非安全部署模式,本篇博客就使用此种方式进行集群部署
   ● 容器镜像:KWDB支持容器方式集群部署。
   ● 源码:源码编译目前支持单节点非安全模式部署。

2. 部署准备

   KWDB-v2.2.0版本官方下载地址:https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0
   在部署过程中,系统将对配置文件、运行环境、硬件配置、软件依赖和免密登录进行检查。如果硬件不满足要求,系统仍会继续安装,并提示硬件规格不足。如果软件依赖未满足要求,系统将中止安装,并给出相应提示。

IP地址 主机名 CPU 内存 硬盘 操作系统
10.1.248.95 kwdb1 8核 16G 100G Ubuntu20.04
10.1.248.74 kwdb2 8核 16G 100G Ubuntu20.04
10.1.248.75 kwdb3 8核 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. 裸机集群部署

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

   在执行安装多副本集群命令之前,先安装依赖包,否则在安装过程中会报如下错误,注意三个节点都需要安装:

 [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

openssl						1.1.1f-1ubuntu2.24
libprotobuf-dev:amd64		3.6.1.3-2ubuntu5.2
libprotobuf-lite17:amd64	3.6.1.3-2ubuntu5.2
libprotobuf17:amd64			3.6.1.3-2ubuntu5.2
libgeos-3.8.0:amd64			3.8.0-1build1
libgeos-c1v5:amd64			3.8.0-1build1
libgeos-dev					3.8.0-1build1
liblzma-dev:amd64			5.2.4-1ubuntu1.1
liblzma5:amd64				5.2.4-1ubuntu1.1
squashfs-tools				1:4.4-1ubuntu0.3
libgcc-9-dev:amd64			9.3.0-10ubuntu2
libgcc-s1:amd64				10.5.0-1ubuntu1~20.04
libgcc1						1:10.5.0-1ubuntu1~20.04
libmount1:amd64				2.34-0.1ubuntu9
libsquashfuse0:amd64		0.1.103-2
mount						2.34-0.1ubuntu9.6
squashfuse					0.1.103-2
libsquashfuse0:amd64		0.1.103-2
squashfuse					0.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'.

   根据系统提示重新加载 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

4. 集群优化配置

   部署完成后,系统会将KWDB封装成系统服务,并生成kaiwudb.servicekaiwudb_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

5. 创建/删除用户

   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.

   使用新建的用户连接数据库:

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;

6. 启动与停止KWDB服务

   启动KWDB服务:

systemctl start kaiwudb

   停止KWDB服务:

systemctl stop kaiwudb

7. 总结

   KWDB(KaiwuDB)分企业版和开源版,企业版相比开源版的核心优势在于企业级可靠性、高性能和专属服务。KWDB可部署中心分布式架构,支持水平扩展,性能线性提升,并且支持多副本集群部署,保障集群整体的高可用性。提供低成本的数据存储,数据降采样存储;按“时间热度” 进行数据生命周期管理。提供可插拔式 AI分析预测能力,支持对模型的导、练、预、评、换。KWDB提供标准ODBC、JDBC、RESTful API 接口,提供多种编程语言接口, 兼容 MQTT (EMQX)、Kafka、Telegraf 等;兼容主流芯片和操作系统。支持身份鉴权、权限管理、数据库审计、支持通信加密。提供上百种监控接口,完善迁移方案支持。


网站公告

今日签到

点亮在社区的每一天
去签到