【KWDB 2025 创作者计划】_从部署开始了解KWDB
一、概述
KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品,支持同一实例同时建立时序库和关系库并融合处理多模数据,具备时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、车联网、智慧产业等领域,KaiwuDB 提供一站式数据存储、管理与分析的基座。
我们先了解下什么是时序数据库?
时序数据库(Time Series Database, TSDB)是专门针对时间序列数据(按时间顺序记录的数据点)进行存储和管理的数据库。这类数据通常包含时间戳(Timestamp)和对应的数值,例如传感器读数、服务器监控指标、金融交易记录等。时序数据库的核心特点是高效处理时间范围内的聚合查询、高频数据写入和时间窗口分析。
KWDB优势
- 数据整合与统一性:KWDB能够将来自不同来源的数据进行整合,构建一个统一的知识库,提高数据的一致性和完整性。
- 知识图谱建模:KWDB支持知识图谱的建模和查询,帮助用户深入理解知识之间的关联和联系。
- 复杂查询与推理:KWDB提供强大的查询和推理功能,用户可以通过灵活的查询语言和规则来进行复杂的数据分析和推理操作。
- 可视化展示:KWDB支持数据的可视化展示,帮助用户更直观地理解和使用知识库中的信息。
KWDB的架构
相比传统的数据库,KWDB 提供多模数据管理能力,支持不同数据模型的统一存储,助力企业跨部门、跨业务统一管理数据,实现多业务数据融合,支撑多样化的应用服务。
二、安装要求
硬件要求
项目 | 要求 |
---|---|
CPU 和内存 | 单节点配置建议不低于 4 核 8G。对于数据量大、复杂的工作负载、高并发和高性能场景,建议配置更高的 CPU 和内存资源以确保系统的高效运行。 |
磁盘 | - 推荐使用 SSD 或者 NVMe 设备,尽量避免使用 NFS、CIFS、CEPH 等共享存储。 - 磁盘必须能够实现 500 IOPS 和 30 MB/s 处理效率。 |
文件系统 | 建议使用 ext4 文件系统。 |
操作系统支持
操作系统暂时支持四大类,Anolis、KylinOS、Ubuntu和UOS,每个系统都有对应arm和x86的版本
操作系统 | 版本 | 架构 |
---|---|---|
Anolis | 8.6 | ARM_64 |
8.6 | x86_64 | |
KylinOS | V10 SP3 2403 | ARM_64open in new window |
V10 SP3 2303 | ARM_64 | |
V10 SP3 2403 | x86_64open in new window | |
V10 SP3 2303 | x86_64 | |
Ubuntu | V18.04 | x86_64 |
V20.04 | ARM_64 | |
V20.04 | x86_64open in new window | |
V22.04 | ARM_64 | |
V22.04 | x86_64open in new window | |
V24.04 | ARM_64 | |
V24.04 | x86_64 | |
UOS | 1060e | x86_64 |
1060e | ARM_64 |
其他软件依赖
OpenSSL遇到的问题比较多,可以先检查下openssl的版本并检查protobuf是否安装
[root@localhost ~]# rpm -qa openssl
openssl-1.1.1f-31.p23.ky10.x86_64[root@localhost kwdb_install]# rpm -qa protobuf
protobuf-3.14.0-7.ky10.x86_64
依赖 | 版本 | 说明 |
---|---|---|
OpenSSL | v1.1.1+ | N/A |
libprotobuf | v3.6.1+ | 注意:Ubuntu 18.04 默认的 libprotobuf 版b本不满足要求,用户需要提前安装所需版本(推荐 3.6.1 和 3.12.4)。 |
GEOS | v3.3.8+ | 可选依赖 |
xz-libs | v5.2.0+ | N/A |
squashfs-tools | any | N/A |
libgcc | v7.3.0+ | N/A |
mount | any | N/A |
squashfuse | any | 可选依赖 |
更多详细可参考官方文档:https://www.kaiwudb.com/kaiwudb_docs/#/oss_v2.2.0/quickstart/install-kaiwudb/quickstart-bare-metal.html
三、环境介绍及安装准备
安装方面可以选择以下任意一种方式部署 KWDB 数据库:
单节点裸机部署
单节点容器部署
源码编译
本次安装使用单节点裸机部署,源码编译比较耗时,单节点容器部署相对比较不安全,出问题后排查比较繁琐,后面再进行体验安装
环境信息:
操作系统 | cpu | 内存 | 存储 |
---|---|---|---|
Kylin-Server-V10 | 4C | 8G | 100G |
附上操作系统地址:https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso
端口信息
端口号 | 说明 |
---|---|
8080 | 数据库 Web 服务端口 |
26257 | 数据库服务端口、节点监听端口和对外连接端口 |
安装依赖
安装依赖包,官网没有找到需要哪些包,处理报错后再Kylin-Server-V10安装如下包即可
yum install -y gcc-c++ protobuf
安装包下载
安装包下载链接:https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-kylinV10_2403-x86_64-rpms.tar.gz
如服务器可以联网可直接下载:
wget https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-kylinV10_2403-x86_64-rpms.tar.gz
更多安装包下载
Gitee 社区下载地址:kwdb 发行版 - Gitee.com
安装包解压
tar -zxvf KWDB-2.2.0-kylinV10_2403-x86_64-rpms.tar.gz
[root@localhost ~]# cd kwdb_install/
[root@localhost kwdb_install]# tree
.
├── add_user.sh
├── deploy.cfg
├── deploy.sh
├── packages
│ ├── kwdb-libcommon-2.2.0-kylin.ky10.x86_64.rpm
│ └── kwdb-server-2.2.0-kylin.ky10.x86_64.rpm
└── utils
├── container_shell.sh
├── kaiwudb_cluster.sh
├── kaiwudb_common.sh
├── kaiwudb_hardware.sh
├── kaiwudb_install.sh
├── kaiwudb_log.sh
├── kaiwudb_operate.sh
├── kaiwudb_uninstall.sh
├── kaiwudb_upgrade.sh
├── process_bar.sh
└── utils.sh
解压后的文件介绍
文件 | 说明 |
---|---|
add_user.sh | 安装、启动 KWDB 后,为 KWDB 数据库创建用户。 |
deploy.cfg | 安装部署配置文件,用于配置部署节点的 IP 地址、端口等配置信息。 |
deploy.sh | 安装部署脚本,用于安装、卸载、启动、状态获取、关停和重启等操作。 |
packages 目录 | 存放 DEB、RPM 和镜像包。 |
utils 目录 | 存放工具类脚本 |
四、环境部署
1、编辑deploy.cfg配置文件
编辑安装包目录下的 deploy.cfg
配置文件,设置安全模式、管理用户、服务端口等信息。
先备份一份deploy.cfg文件,以备修改错误恢复
cp deploy.cfg deploy.cfg_bak
如果是测试环境,对这些信息不敏感可以只修改node_addr剩余保持默认直接安装即可,单实例需要注释掉cluster内容
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.150.135
# section cluster is optional
[cluster]
# remote node addr,split by ','
#node_addr=127.0.0.2,127.0.0.3
# ssh info
#ssh_port=22
#ssh_user=admin
参数说明:
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]
,最大精度为小数点后两位。注意:如果部署环境为 Ubuntu 18.04 版本,部署集群后,需要将kaiwudb.service
文件中的CPUQuota
修改为整型值,例如,将180.0%
修改为180%
,以确保设置生效。
local
:本地节点配置node_addr
:本地节点对外提供服务的 IP 地址,监听地址为0.0.0.0
,端口为 KWDB 服务端口。
2、授权及安装
#对deploy.sh授予可执行权限
chmod +x ./deploy.sh
#执行安装
./deploy.sh install --single
安装成功返回如下:
[root@localhost kwdb_install]# ./deploy.sh install --single
[WARN] 2025-05-20 13:49:51 The number of CPU cores does not meet the requirement. KaiwuDB may running failed.
Please input kaiwudb's password: [INSTALL COMPLETED]:KaiwuDB has been installed successfully! To start KaiwuDB, please execute the command 'systemctl daemon-reload'.
3、重新加载 systemd
守护进程的配置文件及启动数据库
#重新加载守护进程配置文件
systemctl daemon-reload
#启动数据库
./deploy.sh start
启动成功如下:
[root@localhost kwdb_install]# systemctl daemon-reload
[root@localhost kwdb_install]# ./deploy.sh start
[START COMPLETED]:KaiwuDB start successfully.
4、kwdb状态查看
安装完成后,安装脚本会把KaiwuDB封装成系统服务kaiwudb,可以是用系统命令进行启停
#可以使用
./deploy.sh status
也可以使用
systemctl status kaiwudb
[root@localhost kwdb_install]# ./deploy.sh status
[STATUS COMPLETED]:KaiwuDB is runnning now.
[root@localhost kwdb_install]# systemctl status kaiwudb
● kaiwudb.service - KaiwuDB Service
Loaded: loaded (/etc/systemd/system/kaiwudb.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2025-05-20 13:59:31 CST; 2min 34s ago
Process: 39267 ExecStartPre=/usr/bin/sudo /usr/sbin/sysctl -w vm.max_map_count=10000000 (code=exited, status=0/SUCCESS)
Main PID: 39279 (kwbase)
Tasks: 39
Memory: 452.3M
CGroup: /system.slice/kaiwudb.service
└─39279 /usr/local/kaiwudb/bin/kwbase start-single-node --certs-dir=/etc/kaiwudb/certs --listen-addr=0.0.0.0:26257 --adv>
5月 20 13:59:32 localhost.localdomain kwbase[39279]: sql: postgresql://root@192.168.150.135:26257?sslcert=%2Fetc%2F>
5月 20 13:59:32 localhost.localdomain kwbase[39279]: RPC client flags: /usr/local/kaiwudb/bin/kwbase <client cmd> --host=192.168>
5月 20 13:59:32 localhost.localdomain kwbase[39279]: logs: /var/lib/kaiwudb/logs
5月 20 13:59:32 localhost.localdomain kwbase[39279]: temp dir: /var/lib/kaiwudb/kwbase-temp052302502
5月 20 13:59:32 localhost.localdomain kwbase[39279]: external I/O path: /var/lib/kaiwudb/extern
5月 20 13:59:32 localhost.localdomain kwbase[39279]: store[0]: path=/var/lib/kaiwudb
5月 20 13:59:32 localhost.localdomain kwbase[39279]: storage engine: rocksdb
5月 20 13:59:32 localhost.localdomain kwbase[39279]: status: initialized new cluster
5月 20 13:59:32 localhost.localdomain kwbase[39279]: clusterID: 4df52272-fdea-4e45-8429-b1e704fe84fd
5月 20 13:59:32 localhost.localdomain kwbase[39279]: nodeID: 1
5、add_user.sh
脚本创建数据库用户
kwdb封装了一个创建用户的脚本,一键创建用户,初始化用户很方便,大大的赞
[root@localhost kwdb_install]# ./add_user.sh
Please enter the username:banjin
Please enter the password:
[ADD USER COMPLETED]:User creation completed.
6、配置开机启动
因为kwdb已经自动封装为操作系统服务kaiwudb,可以直接一条命令配置开机启动,测试环境也建议打开每次启动服务器数据库自动启动
systemctl enable kaiwudb
7、数据库连接
#非安全模式,参照deploy.cfg修改时设置的secure_mode参数
#使用部署时的操作系统用户登录
kwbase sql --insecure --host=<your-host-ip>
#使用自定义的用户登录,如使用add_user.sh脚本创建的用户
kwbase sql --insecure --host=<your-host-ip> -u <user-name>
#tls安全模式,参照deploy.cfg修改时设置的secure_mode参数
#使用部署时的操作系统用户登录
kwbase sql --certs-dir=etc/kwdb/certs --host=<your-host-ip>
#使用自定义的用户登录,如使用add_user.sh脚本创建的用户
kwbase sql --certs-dir=etc/kwdb/certs --host=<your-host-ip> -u <user-name>
#参数介绍
--certs-dir 数据库客户端相关证书存放目录
--host 数据库地址
-u 用户
-d 数据库,不指定默认为defaultdb
登录使用
[root@localhost kaiwudb]# kwbase sql --certs-dir=/etc/kaiwudb/certs --host=192.168.150.135
#
# Welcome to the KWDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: KaiwuDB 2.2.0 (x86_64-linux-gnu, built 2025/03/31 07:20:16, go1.16.15, gcc 7.3.0) (same version as client)
# Cluster ID: 4df52272-fdea-4e45-8429-b1e704fe84fd
#
# Enter \? for a brief introduction.
#
root@192.168.150.135:26257/defaultdb> \l
database_name | engine_type
----------------+--------------
defaultdb | RELATIONAL
postgres | RELATIONAL
system | RELATIONAL
(3 rows)
Time: 1.512288ms
root@192.168.150.135:26257/defaultdb> \du
username | options | member_of
-----------+------------+------------
admin | CREATEROLE | {}
banjin | | {admin}
root | CREATEROLE | {admin}
(3 rows)
Time: 3.842555ms
五、模板数据库sampleDB使用
SampleDB 是一个用于展示示例数据与场景的项目。其核心目标是助力用户快速掌握 KWDB 数据库的使用方法,为用户提供便捷的测试与学习环境,SampleDB数据库模型是一个智能电表项目,包含关系库rdb和时序库tsdb
下载地址:登录 - Gitee.com
下载后上传服务器解压
mkdir cd /var/lib/kaiwudb/extern
#上传rdb.tar.gz,tsdb.tar.gz到此目录
cd /var/lib/kaiwudb/extern
tar xvf rdb.tar.gz
tar xvf tsdb.tar.gz
导入关系库 rdb 数据
import database csv data ("nodelocal://1/rdb");
#登录
kwbase sql --certs-dir=/etc/kaiwudb/certs --host=192.168.150.135
#导入
import database csv data ("nodelocal://1/rdb");
root@192.168.150.135:26257/defaultdb> import database csv data ("nodelocal://1/rdb");
job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
----------------------+-----------+--------------------+------+--------------+-------------+-------
1073655494850838529 | succeeded | 1 | 305 | 0 | 0 | None
(1 row)
Time: 157.913643ms#验证 --切换rdb数据库登录
root@192.168.150.135:26257/defaultdb> use rdb;
SET
Time: 403.717µsroot@192.168.150.135:26257/rdb> show tables;
table_name | table_type
--------------+-------------
alarm_rules | BASE TABLE
area_info | BASE TABLE
meter_info | BASE TABLE
user_info | BASE TABLE
(4 rows)
导入时序库 tsdb 数据
import database csv data ("nodelocal://1/tsdb");
#导入
root@192.168.150.135:26257/rdb> import database csv data ("nodelocal://1/tsdb");
job_id | status | fraction_completed | rows | abandon_rows | reject_rows | note
---------+-----------+--------------------+-------+--------------+-------------+-------
- | succeeded | 1 | 10100 | 0 | 0 | None
(1 row)
Time: 526.048817msroot@192.168.150.135:26257/rdb> \q
#切换tsdb数据库
root@192.168.150.135:26257/defaultdb> use rdb;
SET
Time: 403.717µsroot@192.168.150.135:26257/tsdb> show tables;
table_name | table_type
-------------+--------------------
meter_data | TIME SERIES TABLE
(1 row)
Time: 1.576363ms
场景实例
故障电表信息
SELECT mi.meter_id,u.user_name,u.contact,a.area_name FROM rdb.meter_info mi JOIN rdb.user_info u ON mi.user_id = u.user_id JOIN rdb.area_info a ON mi.area_id = a.area_id WHERE mi.status = 'Fault';
root@192.168.150.135:26257/tsdb> SELECT
-> mi.meter_id,
-> u.user_name,
-> u.contact,
-> a.area_name
-> FROM rdb.meter_info mi
-> JOIN rdb.user_info u ON mi.user_id = u.user_id
-> JOIN rdb.area_info a ON mi.area_id = a.area_id
-> WHERE mi.status = 'Fault';
meter_id | user_name | contact | area_name
-----------+-----------+-------------+------------
M100 | User 1 | 13800138001 | Area 1
M20 | User 21 | 13800138021 | Area 21
M40 | User 41 | 13800138041 | Area 41
M60 | User 61 | 13800138061 | Area 61
M80 | User 81 | 13800138081 | Area 81
(5 rows)
Time: 2.224859ms
区域用电量top10
SELECT a.area_name,SUM(md.energy) AS total_energy FROM tsdb.meter_data md JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id JOIN rdb.area_info a ON mi.area_id = a.area_id GROUP BY a.area_name ORDER BY total_energy DESC LIMIT 10;
root@192.168.150.135:26257/tsdb> SELECT
-> a.area_name,
-> SUM(md.energy) AS total_energy
-> FROM tsdb.meter_data md
-> JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id
-> JOIN rdb.area_info a ON mi.area_id = a.area_id
-> GROUP BY a.area_name
-> ORDER BY total_energy DESC
-> LIMIT 10;
area_name | total_energy
------------+---------------
Area 2 | 5.556e+06
Area 1 | 5.55499e+06
Area 100 | 5.55398e+06
Area 99 | 5.55297e+06
Area 98 | 5.55196e+06
Area 97 | 5.55095e+06
Area 96 | 5.54994e+06
Area 95 | 5.54893e+06
Area 94 | 5.54792e+06
Area 93 | 5.54691e+06
(10 rows)
Time: 21.137013ms
至此kwdb的部署及关系库和时序库安装体验完成,安装相对比较简单,整个体验对用户比较友好,特别是贴心的准备了add_user.sh用户创建脚本,简化了用户创建操作,特地准备了模板数据库sampledb,列举了很多实例场景,可以更好的体验kwdb