配置项作用 #
index_state_management.history.number_of_shards 配置项用于控制索引状态管理(ISM)历史索引的主分片数量。
历史索引用于存储 ISM 策略执行的记录。分片数影响历史索引的并发写入性能和查询性能。
配置项属性 #
- 配置路径:
index_state_management.history.number_of_shards - 数据类型:
Integer(整数) - 默认值:
1 - 最小值:
1 - 是否可选: 是
- 作用域: NodeScope(节点级别)
- 动态更新: 是(支持动态更新)
配置项详解 #
工作机制 #
历史索引分片结构
number_of_shards = 1:
┌─────────────────────┐
│ Shard 1 (Primary) │
└─────────────────────┘
优点: 简单管理
缺点: 单节点写入瓶颈
number_of_shards = 3:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Shard 1 │ │ Shard 2 │ │ Shard 3 │
│ (Primary) │ │ (Primary) │ │ (Primary) │
└─────────────┘ └─────────────┘ └─────────────┘
优点: 并发写入
缺点: 管理复杂度增加
分片与副本 #
完整索引结构
number_of_shards = 2
number_of_replicas = 1
Shard 1 (Primary) ──→ Replica 1
Shard 2 (Primary) ──→ Replica 2
总分片数 = 2 × (1 + 1) = 4
├── 2 个主分片
└── 2 个副本分片
每个分片是独立的 Lucene 索引
写入分布 #
并发写入流程
ISM 操作记录
│
↓
根据分片键分配
│
├──────── 记录 1 ──→ Shard 1
├──────── 记录 2 ──→ Shard 2
├──────── 记录 3 ──→ Shard 3
└──────── 记录 4 ──→ Shard 1
负载均衡:
- 数据均匀分布到各分片
- 提高并发写入能力
- 降低单分片压力
配置建议 #
生产环境(默认) #
index_state_management:
history:
number_of_shards: 1 # 默认值
建议: 保持默认值 1。历史索引通常写入量不大。
高频操作环境 #
index_state_management:
history:
number_of_shards: 3 # 3 个分片
建议: 增加到 2-3。ISM 操作非常频繁时使用。
大规模集群 #
index_state_management:
history:
number_of_shards: 2
建议: 设置为 2。集群节点较多时使用。
测试环境 #
index_state_management:
history:
number_of_shards: 1 # 简化配置
建议: 保持默认值。测试环境使用。
代码示例 #
easysearch.yml 基础配置 #
index_state_management:
history:
number_of_shards: 1
完整历史配置 #
index_state_management:
history:
enabled: true
number_of_shards: 1
number_of_replicas: 1
max_docs: 2500000
max_age: 24h
高性能配置 #
index_state_management:
history:
number_of_shards: 3
number_of_replicas: 1
动态更新配置 #
PUT /_cluster/settings
{
"transient": {
"index_state_management.history.number_of_shards": 2
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
index_state_management.history.enabled | 是否启用历史记录 | true |
index_state_management.history.number_of_shards | 历史索引分片数 | 1 |
index_state_management.history.number_of_replicas | 历史索引副本数 | 1 |
index_state_management.history.max_docs | 历史索引最大文档数 | 2500000 |
性能影响分析 #
| number_of_shards 设置 | 优点 | 缺点 |
|---|---|---|
| 1(默认) | 简单管理,资源占用少 | 单分片写入瓶颈 |
| 2-3 | 并发写入,查询性能好 | 资源占用多 |
| 5+ | 高并发能力 | 过度分片,管理复杂 |
并发写入能力 #
写入性能对比
假设单分片写入能力: 10000 条/秒
shards = 1:
总写入能力 = 10000 条/秒
shards = 2:
总写入能力 ≈ 18000 条/秒
shards = 3:
总写入能力 ≈ 25000 条/秒
注意:
实际性能还取决于集群资源
使用场景 #
推荐使用默认值的场景 #
- 标准生产: ISM 操作频率正常
- 小规模集群: 节点数量较少
- 简化管理: 希望简化索引管理
推荐增加分片的场景 #
- 高频操作: ISM 策略执行非常频繁
- 大数据量: 历史记录量很大
- 多节点集群: 有足够节点分配分片
推荐减少分片的场景 #
- 低频操作: ISM 操作不频繁
- 小数据量: 历史记录量不大
- 资源受限: 节点资源有限
分片数规划 #
确定合适的分片数
步骤 1: 评估数据量
每小时产生多少条历史记录?
低频: < 1000 条/小时
中频: 1000-10000 条/小时
高频: > 10000 条/小时
步骤 2: 评估写入性能
单分片能处理多少写入?
通常: 5000-15000 条/秒
步骤 3: 确定分片数
分片数 ≈ 峰值写入量 / 单分片能力
例如: 峰值 30000 条/秒
分片数 = 30000 / 10000 = 3
步骤 4: 考虑节点数
分片数 ≤ 节点数
确保每个分片能分配到不同节点
步骤 5: 预留增长空间
当前需求 × 1.5 = 推荐分片数
为未来增长预留空间
分片数限制 #
分片数的实际限制
节点数限制:
分片数最好 ≤ 数据节点数
确保每个分片有独立的资源
JVM 内存限制:
每个分片占用 JVM 内存
过多分片可能导致内存压力
管理复杂度:
分片数越多,管理越复杂
通常建议不超过 10 个
历史索引特点:
写多读少
主要用于审计和故障排查
不需要过多分片
注意事项 #
默认值: 默认值为
1,适合大多数场景。不可减少: 已创建索引的分片数不能减少。
生效时机: 配置只对新创建或滚动的索引生效。
与副本数配合: 总分片数 = 主分片数 × (1 + 副本数)。
资源占用: 每个分片会占用内存和文件句柄。
查询性能: 适当分片可以提高查询并发度。
动态更新: 支持动态更新,下次滚动时生效。
隐藏索引: 历史索引是隐藏索引,不占用命名空间。
写入特点: 历史索引主要是追加写入,很少更新。
监控建议: 监控各分片的写入性能和大小分布。





