Elasticsearch参数配置指南
Eave
2026.09.01
一、总体说明
| 参数 | 含义 | 类型 | 是否可动态修改 |
|---|---|---|---|
number_of_shards |
主分片数量,决定数据如何分布到节点 | 静态 | 不可修改(创建后固定) |
number_of_replicas |
每个主分片的副本数量,决定数据冗余和高可用 | 动态 | 可随时修改 |
index.refresh_interval |
数据从内存缓冲区刷新到可搜索状态的间隔 | 动态 | 可随时修改 |
二、number_of_shards设置
| 场景 | 建议值 | 说明 |
|---|---|---|
| 开发/测试环境 | 1 |
单节点,节省资源 |
| 生产环境(日数据量 < 10GB) | 1 |
单分片足够,避免资源浪费 |
| 生产环境(日数据量 10-100GB) | 2-3 |
适合中等规模业务 |
| 生产环境(日数据量 > 100GB) | 5-10 |
大数据量,按需增加 |
| ES 集群节点数 | <= 节点数 |
分片数不应超过节点数,否则有些节点会有多个分片 |
三、number_of_replicas设置
| 场景 | 建议值 | 说明 |
|---|---|---|
| 开发/测试环境 | 0 |
节省资源,允许数据丢失 |
| 生产环境(单节点) | 0 |
单节点无法存储副本(同一节点不能存主+副本) |
| 生产环境(>= 2 节点) | 1 |
最低要求,保证节点故障时数据不丢 |
| 生产环境(核心数据,>= 3 节点) | 2 |
更高可用性,允许 2 个节点同时故障 |
| 读多写少场景 | 1-2 |
增加副本可以提升查询吞吐量 |
| 写多读少场景 | 0-1 |
减少副本以提升写入性能 |
四、index.refresh_interval设置
| 场景 | 建议值 | 说明 |
|---|---|---|
| 开发/测试环境 | 1s 或不设置(默认 1s) |
默认值,便于调试 |
| 生产环境(实时搜索) | 1s-5s |
平衡实时性和写入性能 |
| 生产环境(批量导入) | 30s-120s |
降低刷新频率,大幅提升写入吞吐量 |
| 生产环境(日志类) | 10s-30s |
日志对实时性要求不高,可适当降低 |
| 全量重建/数据迁移 | -1(关闭) |
完全禁用刷新,导入完成后再开启 |
五、不同场景参数推荐
| 场景 | number_of_shards |
number_of_replicas |
index.refresh_interval |
说明 |
|---|---|---|---|---|
| 开发测试 | 1 |
0 |
5s |
单节点,方便调试 |
| 生产环境(2-3 节点) | 3 |
1 |
10s |
平衡可用性和性能 |
| 生产环境(核心数据) | 3-5 |
2 |
5s |
高可用,高实时 |
| 批量导入(ETL) | 3 |
0 |
-1 |
导入时关闭副本和刷新 |
| 导入完成后恢复 | 3(不变) |
1 |
10s |
恢复可用性和查询能力 |
| 高实时性搜索 | 3 |
1 |
1s |
监控告警等场景 |
六、参数间关系
| 参数组合 | 效果 |
|---|---|
| 分片多 + 副本少 | 写入性能好,查询并行度高,但有数据丢失风险 |
| 分片少 + 副本多 | 查询吞吐量高(多副本负载均衡),但写入性能略降 |
| 刷新间隔短 | 实时性好,但 CPU/IO 消耗高 |
| 刷新间隔长 | 写入性能好,但数据有延迟(近实时而非实时) |
七、选择建议
| 参数 | 建议 |
|---|---|
number_of_shards |
根据数据总量预估,创建前定好,单分片 20-50GB |
number_of_replicas |
生产环境至少 1,动态调整,单节点只能为 0 |
index.refresh_interval |
写入优先拉长到 30s-120s,搜索优先缩短到 1s-5s |
八、修改命令
# 参数修改
curl -X PUT -d '{
"index.refresh_interval": "60s"
}' -H 'Content-Type: application/json' "http://localhost:9200/my_index/_settings"
# 手动刷新
curl -X POST "http://localhost:9200/my_index/_refresh"