集群规划
在集群规划阶段,用户需合理规划集群的拓扑结构、硬件环境、安全性等方面。
拓扑结构
在计划部署时,应选择最能满足延迟和弹性要求的拓扑模式:
- 为了提高可用性和降低数据丢失的风险,建议在一台计算机上只运行一个节点。由于 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 字节 BOOL 1 字节 INT2 2 字节 INT4、FLOAT4 4 字节 DOUBLE、TIMESTAMP、INT8 8 字节 CHAR、BYTES DDL 中定义宽度 + 1 NCHAR DDL 中定义宽度 x 2 + 1 VARCHAR、VARBYTES 8 字节偏移宽度 + 平均内容宽度 分片可存储的最大数据行数:
ts.blocks_per_shard.max_limit
和ts.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。
设备数 | 数据写入速率 | 数据量 | 集群配置 | 时序表配置 | 预估空间合计 |
---|---|---|---|---|---|
100 | 1 条/分钟 | 14.4 万/天 | - ts.entities_per_subgroup.max_limit :100 - ts.blocks_per_segment.max_limit : 1500 - ts.rows_per_block.max_limit : 1000 | - PARTITION INTERVAL :10d - ACTIVETIME :200d | 20 GB |
1000 | 1 条/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_limit :2000 | - PARTITION INTERVAL :5d - ACTIVETIME :10d | 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_limit :5000 | - PARTITION INTERVAL :1d - ACTIVETIME :2d | 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_limit :5000 | - PARTITION INTERVAL :1d - ACTIVETIME :2d | 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_limit :5000 | - PARTITION INTERVAL :1d - ACTIVETIME :2d | 5020 TB |
安全性
以非安全模式部署的集群存在严重的安全风险:
- 集群对所有客户端都是开放的,允许访问集群中任意节点的 IP 地址。
- 所有用户都可以在无需密码的情况下访问集群。
- 所有用户都可以以 root 用户身份访问集群,并对所有数据进行读写操作。
- 缺乏网络加密和认证机制,使得数据传输容易受到威胁。
因此,KWDB 强烈建议采用安全模式部署集群,通过 TLS 加密技术验证节点和客户端的身份,并对节点与客户端之间的数据传输进行加密,有效防范未经授权的访问和数据篡改。