KaiwuDBKaiwuDB

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

2025-05-18

原文链接:【KWDB创作者计划】_部署KWDB多副本集群环境踩过的坑和经验总结-CSDN博客

作者:降世神童


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|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. 裸机集群部署


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


4. 集群优化配置

   部署完成后,系统会将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


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.


这一点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;


6. 启动与停止KWDB服务

   启动KWDB服务:

systemctl start kaiwudb


   停止KWDB服务:


systemctl stop kaiwudb


7. 总结

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



体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn