前言


本文旨在探索国产数据库 KaiwuDB (KWDB) 在 openEuler 操作系统上的高效部署与可观测性建设方案。通过结合 Prometheus 强大的时序数据采集能力与 Grafana 的可视化展示优势,我们将构建一套完整的监控体系以实时洞察数据库运行状态。本实践将为运维人员提供从环境搭建到监控落地的全流程指南,助力实现国产数据库的稳定运行与智能运维。


一、初识KWDB数据库

1.1 KWDB简介

KWDB (KaiwuDB)是一款面向 AIoT 场景的分布式、多模融合的数据库产品, 支持同一实例同时建立时序库和关系库并融合处理多模数据,具备时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、车联网、智慧产业等领域,KWDB 提供一站式数据存储、管理与分析的基座。

  • KWDB社区官网:https://www.kaiwudb.com/kaiwudb/

在这里插入图片描述

1.2 产品架构

KWDB 数据库架构分为接口连接层计算层存储层三个部分,以下是 KWDB 数据库架构功能概览图:

在这里插入图片描述

二、环境介绍

2.1 本次实践说明

本次实践基于个人测试环境搭建,旨在验证技术方案的可行性,若应用于生产环境请务必根据实际业务负载进行严谨的压力测试与安全加固。我们将在 openEuler 操作系统上部署 KaiwuDB 分布式数据库,并利用 Prometheus 作为核心监控组件采集 KWDB 的各项运行时指标。随后,通过 Grafana 导入定制化的监控面板,将复杂的底层数据转化为直观的图表,实现对数据库健康状态、SQL 性能及资源利用率的全面可视化展示。

2.2 本地环境规划

本次实践为个人测试环境,操作系统版本为openEuler 24.03 (LTS)

hostname IP地址 操作系统版本 系统内核版本 Docker版本 KWDB版本 Prometheus版本
openEuler001 192.168.3.83 openEuler 24.03 (LTS) 6.6.0-28.0.0.34.oe2403.x86_64 26.1.3 V3.1.0 v3.10.0

2.3 本地环境检查

  • 检查操作系统版本
[root@openEuler001 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="24.03 (LTS)"
ID="openEuler"
VERSION_ID="24.03"
PRETTY_NAME="openEuler 24.03 (LTS)"
ANSI_COLOR="0;31"
  • 检查内存和磁盘大小
[root@openEuler001 ~]# free -h
               total        used        free      shared  buff/cache   available
Mem:           3.3Gi       988Mi       652Mi       132Mi       2.1Gi       2.4Gi
Swap:          4.0Gi       168Mi       3.8Gi
[root@openEuler001 ~]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0  500G  0 disk
├─sda1               8:1    0    1M  0 part
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0  499G  0 part
  ├─openeuler-root 253:0    0   70G  0 lvm  /
  ├─openeuler-swap 253:1    0    4G  0 lvm  [SWAP]
  └─openeuler-home 253:2    0  425G  0 lvm  /home
sr0                 11:0    1 1024M  0 rom

三、部署Docker环境

3.1 更新系统并安装依赖

安装 Docker 请使用 root 用户或拥有 sudo 权限的用户执行命令,本次实践采用全新环境并以 root 账号操作,先将系统软件包更新至最新状态,再安装 Docker 所需工具。

  • 更新系统软件包
dnf update -y --exclude=kernel* --exclude=kernel-modules* --exclude=kernel-core*

在这里插入图片描述

  • 安装相关依赖工具
dnf install -y device-mapper-persistent-data lvm2

在这里插入图片描述

3.2 配置 Docker 官方仓库

  • 添加 Docker 官方仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's+https://download.docker.com+https://mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3.3 安装Docker

执行以下命令,更新仓库缓存。

dnf makecache

安装 Docker 所需的组件,包括守护进程、命令行工具和插件。

dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

在这里插入图片描述

  • 验证Docker安装版本,
[root@openEuler001 ~]# docker --version
Docker version 26.1.3, build b72abbb

3.4 启动 Docker服务

安装完成后,需要启动 Docker 守护进程并设置开机自动运行。

  • 启动 Docker 服务
systemctl start docker
  • 设置 Docker 开机自启
systemctl enable docker
  • 检查 Docker 状态,确保是 active (running)
systemctl status docker

在这里插入图片描述

3.5 配置镜像加速器

在国内拉取 Docker Hub 的镜像通常很慢,配置一个加速器可以显著提升速度。我们可以添加华为云个人账号下的镜像服务加速地址,确保后续可以成功拉取Docker镜像。

mkdir -p /etc/docker
sudo  tee /etc/docker/daemon.json > /dev/null <<EOF
{
    "registry-mirrors": ["https://80c84f5330e14908928ca78944e61dc4.mirror.swr.myhuaweicloud.com"]
}
EOF

执行以下命令,重启Docker服务。

systemctl restart docker

3.6 检查Docker安装信息

检查Docker版本,可以看到当前安装的版本为 26.1.3

[root@openEuler001 ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.3
 API version:       1.45
 Go version:        go1.21.10
 Git commit:        b72abbb
 Built:             Thu May 16 08:34:39 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.3
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.10
  Git commit:       8e96db1
  Built:            Thu May 16 08:33:34 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.32
  GitCommit:        8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

检查Docker compose版本,当前安装版本为v2.27.0

[root@openEuler001 ~]# docker compose version
Docker Compose version v2.27.0

四、部署KWDB数据库

4.1 下载KWDB容器镜像

执行以下命令,拉取KWDB容器镜像。本次实践所使用的KWDB镜像为 kwdb/kwdb:3.1.0

docker pull kwdb/kwdb:3.1.0

在这里插入图片描述

4.2 创建部署目录

拉取KWDB镜像成功后,我们创建以下KWDB部署目录。

mkdir -p /data/kwdb   &&  cd /data/kwdb/

4.3 创建证书文件

基于Docker的 KWDB 数据库节点部署支持安全模式与非安全模式两种方式,本次实践采用安全模式部署。在以 TLS 安全模式部署KaiwuDB)时,需先通过命令创建 CA 证书、root 用户客户端证书及节点服务器证书,用于身份验证与加密通信,这是安全部署的基础。创建节点证书时,请将命令中的示例 IP 替换为服务器实际 IP,以确保生成有效的服务器证书。

docker run --rm --privileged \
  -v /data/kwdb/certs:/kaiwudb/certs \
  -w /kaiwudb/bin \
   kwdb/kwdb:3.1.0  \
  bash -c './kwbase cert create-ca --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
            ./kwbase cert create-client root --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
            ./kwbase cert create-node 127.0.0.1 localhost 0.0.0.0  192.168.3.83 --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key'

在这里插入图片描述

生成相关证书文件后,我们可以查看证书目录:

[root@openEuler001 kwdb]# ls certs/
ca.crt  ca.key  client.root.crt  client.root.key  node.crt  node.key

4.4 创建KWDB容器

基于TLS安全模式,创建并启动 KWDB 容器。

docker run -d --privileged --name kwdb \
--ulimit memlock=-1 \
--ulimit nofile=65535 \
-p 26257:26257 \
-p 8080:8080 \
-v /data/kwdb/certs:/kaiwudb/certs \
-v /data/kwdb/db:/kaiwudb/deploy/kaiwudb-container \
--ipc shareable \
-w /kaiwudb/bin \
 kwdb/kwdb:3.1.0  \
./kwbase start-single-node \
  --certs-dir=/kaiwudb/certs \
  --listen-addr=0.0.0.0:26257 \
  --http-addr=0.0.0.0:8080 \
  --store=/kaiwudb/deploy/kaiwudb-container

在这里插入图片描述

4.5 查看KWDB容器状态

查询KWDB容器状态,确保KWDB容器创建成功。

[root@openEuler001 kwdb]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                      NAMES
31199bc6bb1a   kwdb/kwdb:3.1.0   "./kwbase start-sing…"   28 seconds ago   Up 27 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:26257->26257/tcp, :::26257->26257/tcp   kwdb

4.6 查看 KWDB容器日志

查看KWDB容器日志,确认数据库服务正常运行。

[root@openEuler001 kwdb]# docker logs kwdb
*
* INFO: Replication was disabled for this cluster.
* When/if adding nodes in the future, update zone configurations to increase the replication factor.
*
KWDB node starting at 2026-03-07 14:52:07.889693583 +0000 UTC (took 0.8s)
build:                3.1.0 @ 2026/02/02 10:31:37 (go1.21.13)
sql:                 postgresql://root@0.0.0.0:26257?sslcert=%2Fkaiwudb%2Fcerts%2Fclient.root.crt&sslkey=%2Fkaiwudb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fkaiwudb%2Fcerts%2Fca.crt
RPC client flags:    ./kwbase <client cmd> --host=0.0.0.0:26257 --certs-dir=/kaiwudb/certs
logs:                /kaiwudb/deploy/kaiwudb-container/logs
temp dir:            /kaiwudb/deploy/kaiwudb-container/kwbase-temp4289006900
external I/O path:   /kaiwudb/deploy/kaiwudb-container/extern
store[0]:            path=/kaiwudb/deploy/kaiwudb-container
storage engine:      rocksdb
ts storage engine:   kwtsdb
status:              initialized new cluster
clusterID:           b68571f3-d19f-468d-9590-2997f3174d44
nodeID:              1

在这里插入图片描述

4.7 访问KWDB数据库

在 TLS 安全模式下,通过容器内的kwbase工具本地连接 KaiwuDB,依靠证书完成身份认证,无需账号密码即可安全访问数据库;其中–host后的 IP 地址请替换为自身服务器的实际 IP。

docker exec -it kwdb ./kwbase sql --certs-dir=/kaiwudb/certs  --host=192.168.3.83

在这里插入图片描述

五、部署Prometheus和Grafana服务

5.1 相关介绍

  • Prometheus简介

Prometheus 是一个开源的系统监控和报警工具包,最初由 SoundCloud 开发,现属于 CNCF 毕业项目。它采用拉取(Pull)模型从目标服务收集多维度的时间序列数据,内置强大的查询语言 PromQL,非常适合云原生环境和微服务架构的动态监控与异常告警。

  • Grafana简介

Grafana 是一个功能强大的开源数据可视化和分析平台,支持连接 Prometheus、MySQL、Elasticsearch 等多种数据源。它允许用户通过灵活的面板和仪表盘将复杂的监控数据转化为直观的图表,广泛应用于实时监控展示、日志分析以及业务数据的可视化决策支持,常与 Prometheus 搭配使用形成完整的监控解决方案。

5.2 拉取镜像

执行以下命令,拉取prometheus和grafana容器镜像。

docker pull prom/prometheus:v3.10.0
docker pull grafana/grafana-enterprise:11.1.0

在这里插入图片描述

5.3 编辑prometheus.yml文件

在 /data/kwdb 部署目录下创建并编辑 prometheus.yml 配置文件,定义全局采集间隔为10秒、告警规则路径及 Alertmanager 连接地址。同时配置名为 kaiwudb 的采集任务,通过 HTTPS 协议(跳过证书验证)从指定节点 192.168.3.83:8080 的 /_status/vars 端点拉取监控指标。

vim prometheus.yml
# Prometheus configuration for kaiwudb clusters.
# Requires prometheus 2.X
#
# Run with:
# $ prometheus -config.file=prometheus.yml
global:
  scrape_interval: 10s
  evaluation_interval: 10s

rule_files:
- "rules/alerts.rules.yml"
- "rules/aggregation.rules.yml"

# Alert manager running on the same host:
alerting:
  alertmanagers:
  - path_prefix: "/alertmanager/"
    static_configs:
    - targets:
      - localhost:9093

scrape_configs:
  - job_name: 'kaiwudb'
    metrics_path: '/_status/vars'
    # Insecure mode:
    scheme: 'https'
    # Secure mode:
    # scheme: 'https'
    tls_config:
      insecure_skip_verify: true

    static_configs:
    - targets: ['192.168.3.83:8080']
      labels:
        cluster: 'my-kaiwudb'

在这里插入图片描述

5.4 配置监控规则文件

从Gitee 仓库获取监控规则文件并放置于 rules/ 目录下,确保包含 alerts.rules.yml 和 aggregation.rules.yml 等配置文件以匹配前序 Prometheus 配置中的引用。

  • 项目文件地址:https://gitee.com/kwdb/kwdb/tree/master/kwbase/monitoring
[root@openEuler001 kwdb]# ls rules/
aggregation.rules.yml  alerts.rules.yml  dummy.rules.yml

5.5 新建及编辑部署文件

新建及编辑部署文件docker-compose.yaml文件:

vim docker-compose.yaml
version: '3.8'

services:
  prometheus:
    image: prom/prometheus:v3.10.0
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./rules:/etc/prometheus/rules:ro
      - ./prometheus-data:/prometheus
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "9090:9090"
    command:
      - "--storage.tsdb.path=/prometheus"
      - "--web.listen-address=:9090"
      - "--config.file=/etc/prometheus/prometheus.yml"
    restart: unless-stopped

  grafana:
    image: grafana/grafana-enterprise:11.1.0
    container_name: grafana
    volumes:
      - ./grafana-data:/var/lib/grafana
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_ROOT_URL=http://localhost:3000/
    restart: unless-stopped

5.6 设置挂载目录权限

重要提示:在测试环境中,为确保容器进程能正常读写挂载目录,需严格设置目录权限。生产环境必须采用最小权限原则,避免使用默认权限(如 root)。

chown -R 65534:65534 ./prometheus-data
chmod -R 755 ./prometheus-data
chown -R 472:472 ./grafana-data
chmod -R 755 ./grafana-data
chmod -R 755 ./rules 

5.7 创建容器

我们使用以下命令,快速创建prometheus和grafana容器。

docker compose up -d

在这里插入图片描述

5.8 检查容器状态

为确保2个容器正常启动,我们检查当前宿主机各容器状态。

[root@openEuler001 kwdb]# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED         STATUS         PORTS                                                      NAMES
9e1e602b7caa   prom/prometheus:v3.10.0             "/bin/prometheus --s…"   3 minutes ago   Up 3 minutes   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                  prometheus
d11c47af28b8   grafana/grafana-enterprise:11.1.0   "/run.sh"                3 minutes ago   Up 3 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                  grafana
feccdf700752   kwdb/kwdb:3.1.0                     "./kwbase start-sing…"   10 hours ago    Up 10 hours    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:26257->26257/tcp, :::26257->26257/tcp   kwdb

在这里插入图片描述

六、访问Prometheus和Grafana

6.1 防火墙墙与selinux配置

  • 关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  • 停止本地防火墙
systemctl stop firewalld
systemctl disable firewalld

6.2 访问Prometheus服务

访问地址:http://<服务器IP地址>:9090,将IP替换为自己服务器IP地址。如果无法访问到该页面,则可以尝试检查本地防火墙是否关闭或者放行相关端口,云服务器则还需要设置安全组规则。

在这里插入图片描述

访问浏览器地址 http://<本地服务器IP>:9090/targets,检查 kaiwudb 任务中 192.168.3.83:8080 实例状态是否为 UP(绿色);若显示 Server returned HTTP status 400 或其他异常,可点击右侧 Error 查看具体报错信息。

在这里插入图片描述

查询数据:进入 Graph 页面,输入 PromQL 查询语句,如下所示:

up{job="kaiwudb"}

在这里插入图片描述

6.3 访问Grafana服务

访问地址:http://<服务器IP地址>:3000,将IP替换为自己服务器IP地址。如果无法访问到Grafana页面,则可以尝试检查本地防火墙是否关闭或者放行相关端口,云服务器则还需要设置安全组规则。

在这里插入图片描述

使用默然的登录账号密码:admin/admin ,进入Grafana首页。

在这里插入图片描述

七、Grafana基本配置

7.1 设置系统语言

点击右上角的账号图标后选择Profile选项,在系统设置中设置时区为上海、语言为简体中文,保存配置即可。

在这里插入图片描述

7.2 添加数据源

在左侧菜单栏中,依次进入 连接 → 数据源,点击 Add data source 即可添加数据源。

在这里插入图片描述

我们选择数据源的类型为prometheus后,进入数据源配置页面。

在这里插入图片描述

数据源相关配置,可参考如下:

  • Name: KWDB
  • Prometheus server URL :http://192.168.3.83:9090/
  • 其余配置:默认即可。

在这里插入图片描述

配置完毕后,点击【Save & test】选项,当提示“Successfully queried the Prometheus API.”时,则表示数据源添加成功。

在这里插入图片描述

7.3 导入Grafana面板

下载Grafana面板模板,地址为:https://gitee.com/kwdb/kwdb/tree/master/kwbase/monitoring

在这里插入图片描述

导入仪表板:在左侧菜单栏中选择仪表板后,点击【导入仪表板】。

在这里插入图片描述

上传面板json文件:依次上传模板文件,确认即可。

在这里插入图片描述
在这里插入图片描述

  • KaiwuDB_Console_Overview.json (概览):提供集群整体健康状态的宏观视图,集中展示 SQL 查询吞吐量、服务延迟、节点副本分布及存储容量等核心关键指标。

在这里插入图片描述

  • KaiwuDB_Console_Hardware.json (硬件资源):监控底层基础设施资源使用情况,包括各节点的 CPU 利用率、内存占用、磁盘 I/O 读写吞吐及网络流量状况。

在这里插入图片描述

  • KaiwuDB_Console_Runtime.json (运行时状态):聚焦数据库内部运行时性能,展示活跃节点数、Go/C 语言层内存细节、Goroutine 数量、GC 频率及暂停时间等深层指标。

在这里插入图片描述

  • KaiwuDB_Console_SQL.json (SQL 性能):分析 SQL 层执行效率,统计各类语句(SELECT/INSERT 等)的执行速率、事务提交/回滚情况以及不同百分位的查询延迟。

在这里插入图片描述

  • KaiwuDB_Console_Storage.json (存储引擎):深入监控 RocksDB 存储引擎内部状态,涵盖数据容量、Raft 日志提交延迟、读放大效应、SST 文件数量及压缩刷新频率。

在这里插入图片描述

  • KaiwuDB_Console_Replication.json (数据复制):追踪分布式数据复制与一致性机制,展示 Range 分布、副本领导者选举、数据同步快照传输及负载均衡操作详情。

在这里插入图片描述

  • KaiwuDB_Console_Distribution.json (分布式调度):监控分布式请求分发与事务协调过程,统计跨节点 RPC 调用、批量请求处理、KV 事务重启原因及节点心跳延迟。

在这里插入图片描述

  • KaiwuDB_Console_Queue.json (后台队列):观察系统后台维护队列的运行健康度,包括垃圾回收 (GC)、副本复制、数据分裂合并及一致性检查等任务的处理失败率与耗时。

在这里插入图片描述

  • KaiwuDB_Console_Slow_Query.json (慢查询分析):专门用于诊断性能瓶颈,统计 Raft 提案、远程 RPC 调用、租约获取及锁竞争等环节出现的慢操作请求数量。

在这里插入图片描述

八、实践总结

本次实践在 openEuler 操作系统上成功完成了国产 KaiwuDB 数据库的容器化部署,并构建了基于 Prometheus 与 Grafana 的高性能监控体系。通过深度适配的监控面板,KaiwuDB 在 SQL 处理吞吐、分布式存储引擎状态及底层硬件资源调度上的卓越性能得到了直观且精确的呈现。实测数据表明,该数据库在 openEuler 环境下运行稳定,其架构设计能够充分释放国产化软硬件协同的优势,为关键业务提供了坚实的数据底座。这一落地方案不仅验证了国产数据库在可观测性方面的成熟度,也展示了其在复杂生产场景中替代传统国外数据库的强大实力与可靠性。


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐