集群规划
在集群规划阶段,用户需合理规划集群的拓扑结构、硬件环境、安全性等方面。
拓扑结构
在计划部署时,应选择最能满足延迟和弹性要求的拓扑模式:
- 为了提高可用性和降低数据丢失的风险,建议在一台计算机上只运行一个节点。由于 KaiwuDB 跨节点复制,如果一台计算机运行多个节点,当计算机发生故障会增加数据丢失的可能性。
- KaiwuDB 集群的副本数为 3,在单区域部署时,为确保集群的稳定运行,需要保证集群中正常运行的节点数大于集群的副本数。
硬件
每个节点需要配备必要的 CPU、内存、网络和存储等资源。在部署集群前需要检查各个硬件设备。
下表列出安装部署 KaiwuDB 所需的硬件规格要求。在实际部署时,用户需要根据实际的业务规模和性能要求,进行硬件资源的规划。下表列出部署 KaiwuDB 所需的硬件规格要求。在实际部署时,用户需要根据实际的业务规模和性能要求,规划硬件资源。
项目 | 要求 |
---|---|
CPU 和内存 | 单节点配置建议不低于 4 核 8G。对于数据量大、复杂的工作负载、高并发和高性能场景,建议配置更高的 CPU 和内存。 |
磁盘 | - 推荐使用 SSD 或者 NVMe 设备,尽量避免使用 NFS、CIFS、CEPH 等共享存储。 - 磁盘至少能够实现 500 IOPS 和 30 MB/s 处理效率。 - KaiwuDB 系统自身启动不会占用过多磁盘容量(低于 1G)。实际所需磁盘大小主要取决于用户的业务量以及是否开启 KaiwuDB 压缩等可以减少原始数据磁盘占用的功能。 |
文件系统 | 建议使用 ext4 文件系统。 |
用户可以使用以下公式预估磁盘需求量:
- 压缩前空间:总存储空间 = 设备数量 x 单台设备每天写入行数 x 分区天数 x 总分区数 x (行宽/1024/1024+15/64/分片可存储的最大数据行数/500/1000)/1024,单位为 GB。
- 压缩后空间:总存储空间 = 设备数量 x 单台设备每天写入行数 x 分区天数 x 总分区数 x (行宽/1024/1024/压缩比 +15/64/分片可存储的最大数据行数/500/1000)/1024,单位为 GB。
其中,分区天数取决于时序表的分区时间范围(PARTITION INTERVAL <interval>
)的设置。默认情况下,KaiwuDB 每 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
。
KaiwuDB 支持时序数据 5-30 倍的压缩。实际的压缩比取决于用户数据的重复度。重复度越高,压缩比越高,反之亦然。
假设某项目有 1000
台设备,每台设备每天写入 1000
行,分区天数采用默认值 10
,表的生命周期设置为 30
天,每行数据占用的总字节数为 913
,分片可存储的最大数据行数为 5000
,压缩比为 58
,则压缩前的空间预计为 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/58+15/64/1000/10)/1024 ≈ 1.1 GB。
下表基于以下假设列出不同规模数据库推荐配置的参数值、预计占用的压缩分区空间、活跃未压缩分区空间的合计大小。
- 表内有 20 个数据列。
- 每行数据的总宽度为 500 字节。
- 数据保存时间为 3 年。
- 采用单节点部署方式。如果采用集群部署,预估空间时应乘以集群副本数。
- 压缩比为 10:1。
设备数 | 数据写入速率 | 数据量 | 推荐配置 | 预估空间合计 |
---|---|---|---|---|
100 | 1 条/分钟 | 14.4 万/天 | 集群实时参数: - ts.entities_per_subgroup.max_limit :100 - ts.blocks_per_shard.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_shard.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_shard.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_shard.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_shard.max_limit : 230000 - ts.rows_per_block.max_limit : 1000 - ts.mount.max_limit :5000 时序表设置: - PARTITION INTERVAL :1d - ACTIVETIME :2d | 5020 TB |
安全性
以非安全模式部署的集群存在严重的安全风险:
- 集群对所有客户端都是开放的,允许访问集群中任意节点的 IP 地址。
- 所有用户都可以在无需密码的情况下访问集群。
- 所有用户都可以以 root 用户身份访问集群,并对所有数据进行读写操作。
- 缺乏网络加密和认证机制,使得数据传输容易受到威胁。
因此,KaiwuDB 强烈建议采用安全模式部署集群,通过 TLS 加密技术验证节点和客户端的身份,并对节点与客户端之间的数据传输进行加密,有效防范未经授权的访问和数据篡改。