1. 内存配置
| 配置项 | 下限 | 推荐值 | 上限 | 说明 |
|---|---|---|---|---|
| 堆内存(Heap Size) | 1GB(生产4GB+) | RAM的50% | 32GB | 超过32GB会因Java指针压缩失效导致性能下降 |
| 虚拟内存区域(vm.max_map_count) | 262144 | 262144 | 无 | 低于此值启动失败 |
| 堆外内存 | 无 | 至少1GB | RAM的50% | 为Lucene预留,大集群需更多 |
2. 文件与I/O配置
| 配置项 | 下限 | 推荐值 | 上限 | 说明 |
|---|---|---|---|---|
| 文件描述符 | 4096 | 65535+ | 65536(OS限制) | 生产环境强制要求 |
| 磁盘空间 | 无 | 50%可用 | 85%使用 | 超过85%会只读 |
| 分片磁盘占用 | 无 | 10-50GB/分片 | 无 | 超过50GB影响恢复性能 |
3. 分片(Shard)配置
| 配置项 | 下限 | 推荐值 | 上限 | 说明 |
|---|---|---|---|---|
| 每节点分片数 | 无 | 20-30/GB堆 | 1000/节点 | 默认限制 |
| 分片文档数 | 无 | 5000万-1亿 | Int的最大值/分片 | 超过2亿性能骤降 |
| 分片大小 | 无 | 10-50GB/分片 | 无 | 大分片恢复慢 |
| 总分片数 | 无 | 无 | 无 | 受堆内存限制、集群节点数 |
4. 索引配置
| 配置项 | 下限 | 推荐值 | 上限 | 说明 |
|---|---|---|---|---|
| 字段映射数 | 无 | 无 | 1000(默认) | index.mapping.total_fields.limit |
| 索引恢复速率 | 1MB/s | 40MB/s | 无 | indices.recovery.max_bytes_per_sec |
| 索引速率 | 无 | 无 | 无 | 受硬件限制 |
5. 查询限制
| 配置项 | 下限 | 默认 | 上限 | 说明 |
|---|---|---|---|---|
| 结果窗口 | 无 | 10000 | Int最大值 | index.max_result_window |
| 聚合桶数 | 无 | 10000 | 无 | search.max_buckets |
| 批量请求大小 | 无 | 5-15MB | 无 | 避免OOM |
6. 节点配置
| 配置项 | 下限 | 推荐值 | 上限 | 说明 |
|---|---|---|---|---|
| 主节点数 | 1 | 3(生产) | 无 | 必须奇数 |
| 数据节点数 | 1 | ≥2 | 无 | 根据数据量调整 |
| 节点类型 | 无 | 专用角色 | 无 | 生产环境建议分离角色 |
关键限制总结
-
绝对不可突破的硬性限制:
- 分片文档数:2,147,483,519(Lucene限制)
- 堆内存:32GB
- 文件描述符:65536(OS限制)
-
官方强烈建议不要超过的推荐限制:
- 分片文档数:200,000,000
- 每节点分片数:1000
- 磁盘使用率:85%
- 结果窗口:100,000
-
性能最佳实践:
- 分片文档数:5000万-1亿
- 分片大小:10-50GB
- 堆内存:RAM的50%且≤32GB
- 文件描述符:65535+