【Elasticsearch】Elasticsearch 新增节点 不分配 shard

在这里插入图片描述

1.概述

转载;Elasticsearch 线上问题排查——搞一天了,明天还要给客户解决这个问题

建议去看原文。

1、线上问题
线上问题描述:

在这里插入图片描述

原来是聊天形式,比较冗长,精简后的问题描述如下:
症状:新增节点后,shard 没有分配到新节点上。如下图所示:
在这里插入图片描述
2、问题排查
我的大致排解思路:

如下第一、第二、第三…代表排查问题的推进步骤。

2.1 第一:确定节点角色划分,核实未被分配的节点类型。
仅主节点是不参与分片数据落地存储的,这是认知大前提。
经对方核实,未分配的节点的确是数据节点。
集群有3个候选主节点,3个数据节点,其中1个数据节点为新添加的节点。

在这里插入图片描述
2.2 第二:关闭索引再打开试试。
close 再 open 之前验证过会走重新分配机制,部分场景适用。
经对方核查,没有生效。
2.3 第三:独立创立一个新索引,设置3个副本。
分片分配策略是:主、副本会分配到不同的节点上。
多个副本,如果数据节点够多,肯定会相对均匀的分片到多个节点。
经核查:仍然无法分配到新增的数据节点。
不过,此时看截图,已有了未分配的灰色分片。

在这里插入图片描述
2.4 第四:查看分片未分配的原因。
排查方法:

GET _cluster/allocation/explain

这时候,客户反馈:“我设置了节点踢出集群的设置”。
我的第一反应:“和这个有关系,为什么要设置?!”
且 explain 执行结果验证了刚才的推断:

“cannot allocate because allocation is not permitted to any of the nodes”。

在这里插入图片描述
2.5 第五:为什么设置?在哪里设置的?如何设置的?
为什么设置?

客户反馈:“我看书上写的只要有节点离开集群就会触发 rebalance。所以就设置了这个参数。”
在哪里设置?
经反复确认,是集群层面的设置,非索引层面。
起初认为是索引层面的设置,我单独验证后不对,才想起来是集群层面的配置。
如何设置的?
这个之前的博文:Elasticsearch集群管理之1——如何高效的添加、删除节点?中讲过,我自己也在实战环境中用过。
命令行如下:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

2.6 取消这个设置就会恢复新节点的分片分配。
我推荐的命令行如下:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : ""
  }
}

经客户验证也是 ok 的。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值