InfluxDB 分片和分片组
InfluxDB 在将数据存储到磁盘时,将时间序列数据组织为 碎片。 碎片被分组为 碎片组。 了解桶、碎片和碎片组之间的关系。
分片
一个分片包含编码和压缩的时间序列数据,适用于由分片组持续时间定义的给定时间范围。 在指定的分片组持续时间内的系列中的所有点都存储在同一个分片中。 一个分片包含多个系列、一个或多个TSM 文件,并且属于一个分片组。
分片组
一个分片组属于一个 InfluxDB bucket,并包含在分片组持续时间定义的特定时间范围内的时间序列数据。
在 InfluxDB OSS 中,一个分片组通常只包含一个单独的分片。 在 InfluxDB Enterprise 1.x 集群 中,分片组包含多个分片 分布在多个数据节点上。
分片组持续时间
强分片组持续时间指定每个分片组的时间范围,并决定多频繁创建一个新的分片组。默认情况下,InfluxDB根据
保留周期设置分片组的持续时间:
| 存储桶保留期 | 默认分片组持续时间 |
|---|---|
| 少于2天 | 1小时 |
| 在2天和6个月之间 | 1d |
| 大于6个月 | 7d |
分片组持续时间配置选项
要配置自定义桶分片组持续时间,请使用 --shard-group-duration 标志与 influx bucket create 和 influx bucket update 命令。
分片组的持续时间必须短于桶的保留周期。
要查看您的存储桶的分片组持续时间,请使用
influx bucket list 命令。
分片组图
以下图示表示一个存储桶,具有4天的保留期和1天的分片组持续时间:
分片生命周期
分片预创建
InfluxDB 分片预创建服务 根据分片组的持续时间预先创建具有未来开始和结束时间的分片。
预创建服务不会为过去的时间范围预创建分片。 在填充历史数据时,InfluxDB 会根据需要为过去的时间范围创建分片, 因此导致暂时的写入吞吐量降低。
分片预创建相关配置设置
分片写入
InfluxDB 将时间序列数据写入未压缩或“热”的分片。当一个分片不再被积极写入时,InfluxDB 压缩 分片数据, resulting in a “cold” shard.
通常,InfluxDB 将数据写入最近的分片组,但在填充历史数据时,InfluxDB 将数据写入必须先进行解压缩的旧分片。当填充完成后,InfluxDB 会重新压缩旧分片。
分片压缩
InfluxDB定期对分片进行合并,以压缩时间序列数据并优化磁盘使用。当启用合并时,InfluxDB每秒检查是否需要进行分片合并。如果在compact-full-write-cold-duration周期内(默认是4h)没有写入,InfluxDB将合并所有的TSM文件。否则,InfluxDB将TSM文件分组为合并级别(根据文件被合并的次数确定),并尝试合并文件以更高效地压缩它们。
InfluxDB 使用以下四个压缩级别:
- 级别 0 (L0): 日志文件 (
LogFile) 被视为级别 0 (L0)。一旦该文件超过5MB的阈值,InfluxDB 会创建一个新的活动日志文件,之前的文件开始压缩成IndexFile。第一个索引文件处于级别 1 (L1)。 - 级别 1 (L1): InfluxDB 将所有新写入的数据从内存缓存中刷新到磁盘中的
IndexFile。 - 级别 2 (L2): InfluxDB 将多达八个 L1 压缩文件压缩成一个或多个 L2 文件,通过将包含相同系列的多个块组合成更少的块,生成一个或多个新文件。
- 级别 3 (L3): InfluxDB 迭代 L2 压缩文件块(超过一定大小)并将包含相同系列的多个块合并为一个新的文件中的一个块。
- 级别 4 (L4): 完全压缩 InfluxDB 遍历 L3 压缩的文件块,并将包含相同系列的多个块组合成一个块,存储在一个新文件中。
InfluxDB 优先进行压缩,遵循以下指引:
- 级别越低(文件被压缩的次数越少),文件的压缩权重就越大。
- 在一个级别中,文件越紧凑,给该级别压缩的优先级就越高。如果每个级别中的文件数量相等,则优先压缩较低级别。
- 如果更高层级有更多用于压缩的候选者,它可能会在较低层级之前被压缩。InfluxDB 通过将每个层级的集合组数量(要压缩成单个下一代文件的文件集合)乘以指定的权重(0.4、0.3、0.2 和 0.1),来确定压缩优先级。
分片压缩相关的配置设置
以下配置设置对于负载不规则的系统特别有利,因为它们限制了在高使用期间的压缩,并允许在低负载期间的压缩追赶:
storage-compact-full-write-cold-durationstorage-compact-throughput-burststorage-max-concurrent-compactionsstorage-max-index-log-file-sizestorage-series-file-max-concurrent-snapshot-compactionsstorage-series-file-max-concurrent-snapshot-compactions
在负载稳定的系统中,如果压缩干扰了其他操作,通常情况下,系统对于其负载而言规模不足,而配置更改不会有太大帮助。
分片删除
InfluxDB 保留强制服务 定期检查比其桶的保留期限更久的分片组。 一旦分片组的开始时间超出桶的保留期限,InfluxDB 将删除该分片组及其相关的分片和 TSM 文件。
在具有无限保留期的桶中,分片会无限期地保留在磁盘上。
InfluxDB 仅删除冷数据分片
InfluxDB 只删除冷分片。 如果在桶的保留期之外回填数据,则回填的数据将在以下情况发生之前保留在磁盘上:
- 分片返回到冷状态。
- 保留执行服务删除分片组。