文章链接:【KWDB 创作者计划】香橙派Ai Pro安装部署KWDB数据库踩坑经验-CSDN博客
作者:圆游会永不打烊.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
KWDB 是由开放原子开源基金会孵化及运营的开源项目,是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
KWDB 基于浪潮 KaiwuDB 分布式多模数据库研发开源,典型应用场景包括但不限于物联网、能源电力、交通车联网、智慧政务、IT 运维、金融证券等,旨在为各行业领域提供一站式数据存储、管理与分析的基座,助力企业数智化建设,以更低的成本挖掘更大的数据价值。
KWDB 为不同角色开发者提供以下支持(包括但不限于):
为开发者提供通用连接接口,具备高速写入、极速查询、SQL 支持、随需压缩、数据生命周期管理、集群部署等特性,与第三方工具无缝集成,降低开发及学习难度,提升开发使用效率。
为运维管理人员提供快速安装部署、升级、迁移、监控等能力,降低数据库运维管理成本。
关键词:物联网(IoT)、多模数据库、分布式、时序数据处理、云边端协同
KWDB部署支持三种方式:
单节点裸机部署(不支持aarch64位)
单节点容器部署(支持aarch64位)
开源版本源码编译(博主编译失败)
下图是KWDB开源版本,点我访问
本次我们将kaiwuDB部署到Orange pi AI Pro 开发板上,使用系统为Ubuntu22.04(aarch64)根据上图,可知不适合裸机部署,所以只剩下源码编译和容器部署,经过测试博主通过源码编译的方式
并未成功,为了能找到原因,将本次失败经历也记录下来,
最后通过Docker完成本地数据库的搭建和基本学习使用。
2.1.1 硬件支持
项目 | 要求 |
CPU和内存 | 单节点配置建议不低于 4 核 8G。对于数据量大、复杂的工作负载、高并发和高性能场景,建议配置更高的 CPU 和内存资源以确保系统的高效运行。 |
磁盘 | 1、推荐使用 SSD 或者 NVMe 设备,尽量避免使用 NFS、CIFS、CEPH 等共享存储。 2、磁盘必须能够实现 500 IOPS 和 30 MB/s 处理效率。 3、KaiwuDB 系统自身启动不会占用过多磁盘容量(低于 1G)。实际所需磁盘大小主要取决于用户的业务量以及是否开启 KaiwuDB 压缩等可以减少原始数据磁盘占用的功能。 用户可以根据实际的业务规模和性能要求规划硬件资源。更多详细信息,参见预估磁盘使用量。 |
文件系统 | 建议使用 ext4 文件系统。 |
2.1.2 操作系统及架构
操作系统 | 版本 | 架构 | 容器 | 裸机 |
Anolis | 7 | ARM_64 | √ | - |
Anolis | 7 | x86_64 | √ | - |
Anolis | 8 | ARM_64 | √ | √ |
Anolis | 8 | x86_64 | √ | √ |
CentOS | 7 | x86_64 | √ | - |
CentOS | 8 | x86_64 | √ | - |
Debian | V11 | ARM_64 | √ | - |
KylinOS | V10 | ARM_64 | √ | √ |
KylinOS | V10 | x86_64 | √ | √ |
openEuler | 22.03 | x86_64 | √ | - |
Ubuntu | V18.04 | x86_64 | √ | √ |
Ubuntu | V20.04 | ARM_64 | √ | √ |
Ubuntu | V20.04 | x86_64 | √ | √ |
Ubuntu | V22.04 | ARM_64 | √ | √ |
Ubuntu | V22.04 | x86_64 | √ | √ |
Ubuntu | V24.04 | ARM_64 | √ | √ |
Ubuntu | V24.04 | x86_64 | √ | √ |
UOS | V20 | x86_64 | √ | √ |
UOS | V20 | ARM_64 | √ | √ |
规格 | 参数 |
CPU | 4核(3核+NPU) |
内存 | 8GB |
存储 | 支持NVMe SSD (M.2接口) |
系统支持 | Ubntu 22.04 aarch64 |
满足KWDB最低要求4核8GB
烧录成功等待验证
验证后不同版本提示信息不一样,免安装版本和直接安装版本,烧录成功提示不同,如果提示失败,请自行重启香橙派测试
绿灯由GPIO4_19控制其亮灭,可以作为SATA硬盘的指示灯或者其他需要的用途。目前发布的Linux系统默认在DTS中将其点亮。当看到此灯点亮后,至少可以说明Linux内核已经启动了。
使用MoBaxterm SSH连接
账号:root 密码:Mind@123
通过nmcli命令连接WIFI
香橙派上有WIFI模块,于是我们进行Wi-Fi连接,后面就可以不用网线连接开发板
nmcli dev wifi
sudo nmcli dev wifi connect 'Cloud' password '13*******8'
1. 查看系统位数(ARM64/aarch64 还是 ARM32)
uname -m
free -h
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker version
sudo systemctl enable docker
下载安装包KWDB-2.2.0-ubuntu22.04-aarch64-docker.tar.gz并上传安装包到开发板
解压
cd /home/upload/ tar -zxvf KWDB-2.2.0-ubuntu22.04-aarch64-docker.tar.gz
默认情况下,deploy.cfg 配置文件中包含集群配置参数,请删除或注释 [cluster] 集群配置项。
不需要集群的话注释 [cluster]以下内容,例如:
[global] secure_mode=tls management_user=kaiwudb rest_port=8080 kaiwudb_port=26257 data_root=/var/lib/kaiwudb #cpu=1 encrypto_store=true [local] node_addr=127.0.0.1 # [cluster] # # node_addr=127.0.0.2,127.0.0.3 # # ssh_port=22 # # ssh_user=admin
进入刚刚解压好的安装包内,输入代码进入编辑
vi deploy.cfg
输入"i"进入编辑模式
cd kwdb_install chmod +x ./deploy.sh
./deploy.sh install --single
systemctl daemon-reload
./deploy.sh start
systemctl enable kaiwudb
./deploy.sh status
提示:
香橙派(3核 + NPU)但是显示只有3个cpu,安装后可能会运行不起来,需要通过./deploy.sh install --single --force安装即可,或者更改deploy.sh中的cpu核心检测,–force 参数跳过了 CPU 核数检查,实际运行证明 3核足够支撑基础服务
./add_user.sh
例如:
账号:orange 密码:123456
该部分安装失败,作为失败案例借鉴参考,可能是机器架构不一样导致的,个人认为是go环境没有用aarch64导致的
将两个包上传到开发板上
cd /home/upload/
tar -C /usr/local/ -xvf cmake-3.23.4-linux-aarch64.tar.gz
mv /usr/local/cmake-3.23.4-linux-aarch64 /usr/local/cmake
go安装包
tar -C /usr/local -xvf go1.22.5.linux-arm64.tar.gz
创建用于存放项目代码的代码目录
mkdir -p /home/go/src/gitee.com
设置 Go 和 CMake 的环境变量
export GOROOT=/usr/local/go export GOPATH=/home/go #请以实际代码下载存放路径为准,在此以home/go目录为例 export PATH=$PATH:/usr/local/go/bin:/usr/local/cmake/bin
使变量设置立即生效
source /etc/profile
git clone https://gitee.com/kwdb/kwdb.git /home/go/src/gitee.com/kwbasedb #请勿修改目录路径中的 src/gitee.com/kwbasedb cd /home/go/src/gitee.com/kwbasedb git submodule update --init #适用于首次拉取代码 git submodule update --remote
构建和安装
在项目目录下创建并切换到构建目录。
cd /home/go/src/gitee.com/kwbasedb mkdir build && cd build
运行 CMake 配置。
需要在包含 CMakeLists.txt 的 构建目录 中运行
cmake .. -DCMAKE_BUILD_TYPE=Release
报错:
找到"/home/go/src/gitee.com/kwbasedb/CMakeFiles/CMakeOutput.log".
The system is: Linux - 5.10.0+ - aarch64
又遇到报错:
从错误信息来看,使用华为云镜像源 (repo.huaweicloud.com) 时遇到了 Hash Sum mismatch 问题,这通常是由于镜像源同步延迟或网络问题导致的。
换阿里云镜像源
sudo sed -i 's|http://repo.huaweicloud.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list sudo apt update
sudo apt install -y build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
继续报错:
cd /home/go/src/gitee.com/kwbasedb/build rm -rf * cmake .. -DCMAKE_BUILD_TYPE=Debug
CMake 配置失败的主要原因是 缺少 Protobuf(Protocol Buffers)库
sudo apt update sudo apt install -y libprotobuf-dev protobuf-compiler
cd /home/go/src/gitee.com/kwbasedb/build rm -rf * cmake .. -DCMAKE_BUILD_TYPE=Release # 注意去掉空格
运行成功
生效
source /etc/profile
make
报错
export GO111MODULE=on
go mod edit -replace github.com/emmansun/gmsm/internal/bigmod=./vendor/github.com/emmansun/gmsm/internal/bigmod
可以通过命令进行连接操作,不过我认为可视化更加容易理解和使用,这里推荐下载数据库连接工具(点击这里下载KaiwuDB_Developer_Center-2.0.4-win-x86_64.zip)
下载完成后进行解压,双击exe文件即可
优势:
高效处理高频率写入
优秀的时间范围查询性能
自动数据降采样和保留策略
针对时间序列的压缩算法
常用于存储设备运行数据、生产指标等时间相关的监测数据。
6.2 关系数据库
关系数据库是使用关系模型组织的传统数据库,在KWDB中用于:
存储特点:以表格形式存储数据,表与表之间可建立关系
核心概念:表、行、列、主键、外键、索引等
优势:
数据结构化程度高
支持复杂的SQL查询
完善的ACID事务支持
数据一致性强
常用于存储设备信息、工单记录、用户权限等结构化业务数据。
CREATE TABLE goods( id INT8 DEFAULT unique_rowid(), goods_name VARCHAR(60) NULL, production_date VARCHAR(50) NULL, shelf_life_days VARCHAR(50) NOT NULL, bar_code VARCHAR(50) NOT NULL, goods_src STRING NULL, FAMILY "primary" (rowid, id, goods_name, production_date, shelf_life_days, bar_code, goods_src) ); COMMENT ON COLUMN goods.id IS 'id'; COMMENT ON COLUMN goods.goods_name IS '商品名称'; COMMENT ON COLUMN goods.production_date IS '生产日期'; COMMENT ON COLUMN goods.shelf_life_days IS '保质期'; COMMENT ON COLUMN goods.bar_code IS '条形码'; COMMENT ON COLUMN goods.goods_src IS '商品图片';
-id指定 INSERT INTO goods VALUES (1, '卫龙亲嘴道麻辣条50g/包', '2025-04-11', '150天', '6935284412079', 'http://app2.showapi.com/img/barCode_img/20200316/ce6a775b-330b-4ee9-b31d-16576412511e.jpg');
或
-id自增 INSERT INTO goods (goods_name, production_date, shelf_life_days,bar_code,goods_src) VALUES ('卫龙亲嘴道麻辣条50g/包', '2025-04-11', '150天', '6935284412079', 'http://app2.showapi.com/img/barCode_img/20200316/ce6a775b-330b-4ee9-b31d-16576412511e.jpg');
Delete FROM goods WHERE id='2';
SELECT * FROM "ProductData".public.goods;
UPDATE "ProductData".public.goods SET goods_name='test' WHERE id='1';
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import psycopg2 def main(): try: con = psycopg2.connect(database="defaultdb", user="test", password="KWdb!2022", host="127.0.0.1",port="26257") # for secure connection mode # con = psycopg2.connect(database="defaultdb", user="root", password="", host="127.0.0.1", # port="26257", sslmode="verify-ca", # sslrootcert=<file_path_of_root_ca_certificate file>, # sslcert=<file_path_of_user_certificate_file>, # sslkey=<file_path_of_user_certificate_key>) print("Connected!") con.set_session(autocommit=True) cur = con.cursor() except psycopg2.Error as e: print(f"Failed to connect to Kaiwudb: {e}") sql = "CREATE TABLE db_TimeSeries.table1 \ (k_timestamp timestamp NOT NULL, \ voltage double, \ current double, \ temperature double \ ) TAGS ( \ number int NOT NULL) \ PRIMARY TAGS(number) \ ACTIVETIME 3h" try: cur.execute(sql) except psycopg2.Error as e: print(f"Failed to create table: {e}") sql = "INSERT INTO db_TimeSeries.table1 \ VALUES ('2024-07-01 10:00:00', 220.0, 3.0, 20.5,123)" try: cur.execute(sql) except psycopg2.Error as e: print(f"Failed to insert data: {e}") sql = "SELECT * from db_TimeSeries.table1" try: cur.execute(sql) rows = cur.fetchall() for row in rows: print(f"k_timestamp: {row[0]}, voltage: {row[1]}, current: {row[2]}, temperature: {row[3]}, number: {row[4]}") except psycopg2.Error as e: print(f"Failed to insert data: {e}") cur.close() con.close() return if __name__ == "__main__": main()
KWDB 是一款开源的分布式多模数据库,支持自适应时序引擎、预测分析引擎等多种数据模型,具有高性能、低成本、多场景的特点。KaiwuDB 覆盖工业物联网、数字能源、车联网、智慧矿山等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务,本次部署到香橙派Ubuntu(aarch64)上,实现数据本地化存储,为后续结合KWDB出一个项目结合案例做准备