Elasticsearch 分片配置示例(电商场景适用)
一、中小规模集群(4节点)
分片数计算
数据节点数:3(建议主节点与数据节点分离)
分片数公式:分片数 = 数据节点数 × 1.5 → 3 × 1.5 = 5(向上取整)
副本数:1(确保高可用性)
索引创建命令
bash
Copy Code
创建商品索引,设置5主分片+1副本
curl -XPUT "http://localhost:9200/products" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
"index.routing.allocation.require.box_type": "hot" # 热数据优先分配至SSD节点:ml-citation{ref="6" data="citationList"}
}
}'
二、中大规模集群(10+节点)
分片策略
数据节点数:8(分片数=12)
冷热分层:
热数据分片(近3天订单):6分片,分配至SSD节点
冷数据分片(历史订单):6分片,迁移至机械硬盘节点
动态分片调整
bash
Copy Code
调整历史订单索引的副本数(从1提升至2)
curl -XPUT "http://localhost:9200/orders-2025.04/_settings" -H 'Content-Type: application/json' -d'
{
"number_of_replicas": 2
}'
三、分片配置最佳实践
分片容量控制
单分片大小:建议不超过50GB(日志类)或30GB(高更新频率数据)
超限处理:通过_split API拆分大分片
bash
Copy Code
curl -XPOST "http://localhost:9200/products/_split/products_split" -H 'Content-Type: application/json' -d'
{
"settings": { "index.number_of_shards": 10 } # 将原5分片拆分为10分片
}'
分片分配策略
避免节点热点:启用cluster.routing.allocation.balance.shard参数自动均衡分片分布
强制分片迁移:
bash
Copy Code
curl -XPOST "http://localhost:9200/_cluster/reroute" -H 'Content-Type: application/json' -d'
{
"commands": [
{ "move": { "index": "products", "shard": 0, "from_node": "node-1", "to_node": "node-4" } }
]
}'
配置流程图解
text
Copy Code
数据写入 → 按分片规则(哈希/自定义)分配至主分片 → 副本分片同步 → 查询时合并结果
注:以上配置需结合硬件资源(如SSD/HDD节点分离)和业务需求调整,建议通过GET _cat/shards监控分片状态。
浙公网安备 33010602011771号