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"