文档下载建议反馈入口

  • 拓扑结构
  • 硬件
  • 安全性

集群规划

在集群规划阶段,用户需合理规划集群的拓扑结构、硬件环境、安全性等方面。

拓扑结构

在计划部署时,应选择最能满足延迟和弹性要求的拓扑模式:

  • 为了提高可用性和降低数据丢失的风险,建议在一台计算机上只运行一个节点。由于 KWDB 跨节点复制,如果一台计算机运行多个节点,当计算机发生故障会增加数据丢失的可能性。
  • KWDB 多副本集群的副本数为 3,部署多副本集群时,为确保集群的稳定运行,需要保证集群中正常运行的节点数大于集群的副本数。

硬件

每个节点需要配备必要的 CPU、内存、网络和存储等资源。在部署集群前需要检查各个硬件设备。

下表列出部署 KWDB 所需的硬件规格要求。在实际部署时,用户需要根据实际的业务规模和性能要求,规划硬件资源。

项目要求
CPU 和内存单节点配置建议不低于 4 核 8G。对于数据量大、复杂的工作负载、高并发和高性能场景,建议配置更高的 CPU 和内存资源以确保系统的高效运行。
磁盘- 推荐使用 SSD 或者 NVMe 设备,尽量避免使用 NFS、CIFS、CEPH 等共享存储。
- 使用 HDD 硬盘部署单机版本时,避免设备数过多或每秒写入测点数过高,否则数据写入性能将显著下降;不建议使用 HDD 部署分布式集群版本。
- 磁盘至少能够实现 500 IOPS 和 30 MB/s 处理效率。
- KWDB 系统自身启动不会占用过多磁盘容量(低于 1G)。实际所需磁盘大小主要取决于用户的业务量以及是否开启 KWDB 压缩等可以减少原始数据磁盘占用的功能。
文件系统建议使用 ext4 文件系统。

磁盘管理

查看磁盘分区空间

用户可以使用 df.sh 脚本查看磁盘分区的空间以及使用和剩余的空间信息。

默认路径

  • 裸机部署:/usr/local/kaiwudb/bin
  • 容器部署:/kaiwudb/bin

语法格式

<path-to-df.sh>df.sh [OPTION]

常用选项

选项说明
--squashfs查看 squashfs 挂载的循环设备。不指定时默认不显示 squashfs 挂载的循环设备。
--help查看帮助信息。

使用举例

./df.sh
File systems information(excluding squashfs):
文件系统       类型      容量  已用  可用 已用% 挂载点
udev           devtmpfs   31G     0   31G    0% /dev
tmpfs          tmpfs     6.2G  1.4M  6.2G    1% /run
/dev/nvme0n1p5 ext4      916G  209G  661G   25% /
tmpfs          tmpfs      31G     0   31G    0% /dev/shm
tmpfs          tmpfs     5.0M  4.0K  5.0M    1% /run/lock
tmpfs          tmpfs      31G     0   31G    0% /sys/fs/cgroup
/dev/nvme0n1p1 vfat      511M  6.2M  505M    2% /boot/efi
tmpfs          tmpfs     6.2G  8.0K  6.2G    1% /run/user/114
tmpfs          tmpfs     6.2G  8.0K  6.2G    1% /run/user/1000

Number of squashfs mounted: 1

预估磁盘使用量

用户可以使用以下公式预估磁盘需求量(单位:GB)。

  • 压缩前空间

    总存储空间 = 设备数量 x 单台设备每天写入行数 x 分区天数 x 总分区数 x (行宽/1024/1024+15/64/分片可存储的最大数据行数/500/1000)/1024。

  • 压缩后空间

    总存储空间 = 设备数量 x 单台设备每天写入行数 x 分区天数 x 总分区数 x (行宽/1024/1024/压缩比 +15/64/分片可存储的最大数据行数/500/1000)/1024

其中,

  • 分区天数:取决于时序表的分区时间范围(PARTITION INTERVAL <interval>)的设置。默认情况下,KWDB 每 10 天进行一次分区,即分区天数的值为 10。如果建表时将分区时间范围设置为 1mon, 则对应的分区天数的值为 30

  • 总分区数:取决于表的生命周期(RETENTIONS <keep_duration>)和分区时间范围(PARTITION INTERVAL <interval>)的设置。例如,如果建表时将表的生命周期设置为 10 天,分区天数使用默认值 10 天,则总分区数为 1。如果建表时没有设置生命周期,则总分区数取决于业务周期。例如,如果需要存储一年的数据,总分区数将为 37

  • 行宽:每行数据所有列占用空间的字节总数。下表列出各数据列所占用字节数。

    数据类型占用字节数
    第一列(时间戳列)16 字节
    BOOL1 字节
    INT22 字节
    INT4、FLOAT44 字节
    DOUBLE、TIMESTAMP、INT88 字节
    CHAR、BYTESDDL 中定义宽度 + 1
    NCHARDDL 中定义宽度 x 2 + 1
    VARCHAR、VARBYTES8 字节偏移宽度 + 平均内容宽度
  • 分片可存储的最大数据行数:ts.blocks_per_shard.max_limitts.rows_per_block.max_limit 实时参数的乘积。默认值为 1000000

  • 压缩比:取决于用户数据的重复度。重复度越高,压缩比越高,反之亦然。KWDB 支持时序数据 5-30 倍压缩比。

假设某项目有 1000 台设备,每台设备每天写入 1000 行,分区天数采用默认值 10,表的生命周期设置为 30 天,每行数据占用的总字节数为 913,分片可存储的最大数据行数为 5000,压缩比为 30,则压缩前占用的磁盘空间预计为 1000 x 1000 x 10 x 3 x (913/1024/1024+15/64/1000/10)/1024 ≈ 26 GB。压缩后占用的磁盘空间预计为 1000 x 1000 x 10 x 3 x (913/1024/1024/30+15/64/1000/10)/1024 ≈ 1.5 GB。

推荐配置

下表基于以下假设列出不同规模数据库推荐配置的参数值、预计占用的压缩分区空间、活跃未压缩分区空间的合计大小。

  • 表内有 20 个数据列。
  • 每行数据的总宽度为 500 字节。
  • 数据保存时间为 3 年。
  • 采用单节点部署方式。如果采用集群部署,预估空间时应乘以集群副本数。
  • 压缩比为 10:1。
设备数数据写入速率数据量集群配置时序表配置预估空间合计
1001 条/分钟14.4 万/天- ts.entities_per_subgroup.max_limit100
- ts.blocks_per_segment.max_limit: 1500
- ts.rows_per_block.max_limit: 1000
- PARTITION INTERVAL10d
- ACTIVETIME200d
20 GB
10001 条/10 秒864 万/天- ts.entities_per_subgroup.max_limit: 500
- ts.blocks_per_segment.max_limit: 25000
- ts.rows_per_block.max_limit: 1000
- ts.mount.max_limit2000
- PARTITION INTERVAL5d
- ACTIVETIME10d
551 GB
1 万1 条/10 秒8640 万/天- ts.entities_per_subgroup.max_limit: 500
- ts.blocks_per_segment.max_limit: 230000
- ts.rows_per_block.max_limit: 1000
- ts.mount.max_limit5000
- PARTITION INTERVAL1d
- ACTIVETIME2d
5.3 TB
10 万1 条/秒86.4 亿/天- ts.entities_per_subgroup.max_limit: 500
- ts.blocks_per_segment.max_limit: 230000
- ts.rows_per_block.max_limit: 1000
- ts.mount.max_limit5000
- PARTITION INTERVAL1d
- ACTIVETIME2d
502 TB
100 万1 条/秒864 亿/天- ts.entities_per_subgroup.max_limit: 500
- ts.blocks_per_segment.max_limit: 230000
- ts.rows_per_block.max_limit: 1000
- ts.mount.max_limit5000
- PARTITION INTERVAL1d
- ACTIVETIME2d
5020 TB

安全性

以非安全模式部署的集群存在严重的安全风险:

  • 集群对所有客户端都是开放的,允许访问集群中任意节点的 IP 地址。
  • 所有用户都可以在无需密码的情况下访问集群。
  • 所有用户都可以以 root 用户身份访问集群,并对所有数据进行读写操作。
  • 缺乏网络加密和认证机制,使得数据传输容易受到威胁。

因此,KWDB 强烈建议采用安全模式部署集群,通过 TLS 加密技术验证节点和客户端的身份,并对节点与客户端之间的数据传输进行加密,有效防范未经授权的访问和数据篡改。