分片是 Elasticsearch 将索引数据拆分成多个部分,每个分片都是一个独立的 Lucene 实例。分片可以分布在不同节点上,实现数据分布式存储和并行处理。
分片不能随意设置过多:分片数过多会导致管理开销增大,占用大量内存和文件句柄;分片过少则不利于并行和扩展。
每个分片建议不超过 50GB(实际视硬件和查询情况而定)。
分片数建议 ≥ 集群数据节点数,这样可以充分利用集群的所有节点。
分片数一旦设置不可更改,除非重建索引或使用 reindex。
经验公式:
分片总数 ≈ 最大节点数 × 每节点希望承载的分片数
例如:有 3 个数据节点,每节点希望 10 分片,则总分片数 ≈ 30。
举例:
小型集群(3节点):分片数可以设置为 3 或 6。大型集群(10节点):分片数可以设置为 10、20、30 等。副本是分片的冗余副本,主要用于高可用和负载均衡。副本分片不会和主分片在同一节点上。
假设有 4 个数据节点,预计总数据量为 2TB,单分片建议不超过 50GB:
分片数
2TB / 50GB = 40 个分片
可以设置分片数为 40(number_of_shards: 40)
副本数
设置副本数为 1(number_of_replicas: 1),那么总分片数为 40主分片 + 40副本分片 = 80分片,4个节点平均每节点有20个分片。
副本数可以随时通过如下命令修改,无需重建索引:
PUT /your_index/_settings
{
"number_of_replicas": 2
}
调整后,Elasticsearch 会自动重新分配副本分片。
分片数是索引创建时确定的,后续无法直接更改。如果需要调整分片数,只能新建索引并使用 reindex 迁移数据:
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
对于时间序列数据(如日志),可以用模板自动创建分片数和副本数:
PUT _index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"number_of_shards": 6,
"number_of_replicas": 1
}
}
}
这样每天新建索引时自动应用模板。
如果你的集群跨机房或有特殊硬件分布,可以用 allocation awareness 让分片分布更合理:
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.awareness.attributes": "rack_id"
}
}
这样主分片和副本分片不会分配到同一个物理机架,提高容灾能力。
对于大量历史数据,可以把新数据放在性能高的 hot 节点,老数据迁移到 warm/cold 节点,分片数和副本数可根据节点类型灵活调整。
使用 Kibana 或 API 查询分片分布和健康:
GET _cat/shards?v
观察分片是否均匀分布,是否有 unassigned 状态。
如果每个分片数据很少(比如每个分片只有几十 MB),就会造成“分片碎片化”,浪费资源。此时建议减少分片数或使用 shrink API 合并分片:
POST /source_index/_shrink/target_index
案例1:日志系统,日索引
日数据量:100GB节点数:5单分片建议:20GB分片数:100/20=5副本数:1创建索引时配置:
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
案例2:电商商品索引,单表索引
总数据量:500GB节点数:5单分片建议:50GB分片数:500/50=10副本数:2(高可用要求)配置:
{
"settings": {
"number_of_shards": 10,
"number_of_replicas": 2
}
}
分片均衡至关重要:如果分片分布不均,会造成部分节点负载过高,影响性能和稳定性。
自动均衡机制:Elasticsearch 默认有分片自动均衡,但如果节点资源差异大或有特殊需求,可以手动迁移分片。
POST /_cluster/reroute
{
"commands": [
{
"move": {
"index": "your_index",
"shard": 0,
"from_node": "node1",
"to_node": "node2"
}
}
]
}
节点宕机或分片分配异常时,可通过如下命令强制分配分片:
POST /_cluster/reroute
{
"commands": [
{
"allocate_empty_primary": {
"index": "your_index",
"shard": 1,
"node": "node3",
"accept_data_loss": true
}
}
]
}
注意:
allocate_empty_primary会丢失该分片的数据,只用于特殊恢复场景。
使用如下命令持续监控分片健康:
GET /_cluster/health?level=shards
GET /_cat/shards?v
关注
unassigned 分片,及时排查。
查看原因:
GET /_cluster/allocation/explain
常见原因:
节点磁盘空间不足分片分配策略限制(如 allocation awareness)节点数不足,副本分片无法分布到不同节点ILM 可以自动管理索引的分片、副本数、冷热迁移等生命周期策略
通过 ILM 可以设置不同阶段的分片、副本数,比如热阶段副本多,冷阶段副本少
PUT _ilm/policy/logs_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"set_replicas": {
"number_of_replicas": 1
}
}
},
"cold": {
"actions": {
"set_replicas": {
"number_of_replicas": 0
}
}
}
}
}
}
创作不易,点赞关注,感谢支持,互通有无!!!
¥176.00
PC中文正版Steam游戏 维多利亚3 Victoria 3 策略 国区CDKey激活码
¥18.80
PC中文正版 steam平台 国区 游戏 鬼泣5 Devil May Cry 5 豪华版 新角色维吉尔 Vergil DLC 激活码 CDkey
¥17.00
文明6 文明六文明六季票文明6白金版新纪元季票全DLC迭起兴衰风云变幻激活码文明六PC中文正版Steam游戏key
¥7.20
Steam正版 国区激活码 城市天际线 Cities Skylines 全DLC都市天际线cdk机场工业园区key不夜城cdkey电脑游戏
¥245.00
PC中文正版 Steam游戏 霍格沃茨之遗 Hogwarts Legacy 霍格沃茨遗产 数字豪华版 激活码KEY
¥23.88
steam赛博朋克2077 激活码key兑换码2027正版入库中文CDK游戏Cyberpunk