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监控分片状态。

posted @ 2025-04-22 14:18  an森  阅读(50)  评论(0)    收藏  举报