您当前的位置: 首页 > 

zmc@

暂无认证

  • 3浏览

    0关注

    142博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ES集群掉出节点后恢复时出现red

zmc@ 发布时间:2020-09-08 22:53:24 ,浏览量:3

这里写自定义目录标题
  • ES集群掉出节点后恢复时出现red
    • 集群red/yellow排查
    • 一个比较难处理的case

ES集群掉出节点后恢复时出现red 集群red/yellow排查

基本思路: 1.分片设置不合理,单组分片:primary数 + replica数 > node数,则yellow 2.total_shards_per_node参数的限制导致分片不能完全分配 3.节点掉出导致red 4.各种元数据修改、恢复等操作导致rebalance(暂时的init) 5…

除了上述经验的思路,可以直接使用explain

GET /_cluster/allocation/explain
{
  "index": "vacationvbkorderindex",
  "shard":4,
  "primary":false
}
一个比较难处理的case

场景:集群配置过低(1c4g)导致集群某个节点cpu打满,脱离集群,进而流量全部打到剩余节点,导致又有其他节点因为压力过大继续脱离集群---->集群不可用

集群由于超过延迟时间不能发现节点,则准备重新分配分片数据,allocation的流程消耗性能,导致加剧集群的压力---->集群不可用

处理:

  1. 紧急扩容,减小集群压力
  2. 处理red分片

处理red分片的过程:

  1. 通过上述explain命令,发现是node_left导致的red;
  2. 结果:由于多个节点脱离,导致节点主分片、副本分片都unassign; 由于allocation的源码(decide)不能允许非最新的数据分片成为主分片–→主分片不能分配 因为主分配不能分配–→副本分配也不能分配
  3. 根据以上分析,发现没法使用ES的自治均衡分配分片,只能使用手动的逻辑
1.先查询未分配的主分片原来是在哪个节点上
GET /order_orderlist/_shard_stores

2.处理方案
-- 方案一:将主分片分配(只丢失部分数据)
POST _cluster/reroute { 
   "commands": [ 
       { 
          "allocate_stale_primary": 
             { 
               "index": "index_name", 
               "shard": 4, 
               "node": "node_name", 
               "accept_data_loss" : true 
             } 
        } 
   ] 
}

-- 方案二:如果数据不重要,可以不用放到原来的节点上,直接新建一个空分片替代(会丢失整个分片的数据)
POST _cluster/reroute { 
   "commands": [ 
       { 
          "allocate_empty_primary": 
             { 
              "index": "index_name", 
              "shard": 2, 
              "node": "node_name", 
              "accept_data_loss" : true 
             } 
       } 
    ] 
}




关注
打赏
1643271353
查看更多评论
立即登录/注册

微信扫码登录

0.0390s