其他
Elasticsearch 线上问题排查——搞一天了,明天还要给客户解决这个问题
1、线上问题
线上问题描述:
症状:新增节点后,shard 没有分配到新节点上。如下图所示:
2、问题排查
我的大致排解思路:
如下第一、第二、第三......代表排查问题的推进步骤。
2.1 第一:确定节点角色划分,核实未被分配的节点类型。
2.2 第二:关闭索引再打开试试。
2.3 第三:独立创立一个新索引,设置3个副本。
2.4 第四:查看分片未分配的原因。
2.5 第五:为什么设置?在哪里设置的?如何设置的?
为什么设置?
在哪里设置?
如何设置的?
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
2.6 取消这个设置就会恢复新节点的分片分配。
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : ""
}
}
3、我的几点观察和思考
3.1 关于 head 插件 和 Kibana dev tools 的选型
3.2 关于优化参数配置
3.3 关于设置,在哪个层面设置?
临时设置 永久设置 配置文件设置
静态设置 在索引创建阶段或者关闭索引阶段设置。 动态设置 通过 update-index-settings 方式随时更新设置。
3.4 设置生效容易,使得设置失效一样得会
You can reset persistent or transient settings by assigning a null value.
也就是我们上面的命令行操作更严谨的写法应该是:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : null
}
}
如果有标准写法,上面的这个才是最正宗、最标准的写法。
4、小结
事后观察,只通过后面的第四、五、六步,就能定位问题的根本原因。
但,毕竟不在现场,多去了解问题的来龙去脉,更有助于辅助解决问题。
复盘总结一下,希望对大家也有所帮助。
参考
集群层面设置 https://www.elastic.co/guide/en/elasticsearch/reference/7.14//cluster-update-settings.html 索引层面设置 https://www.elastic.co/guide/en/elasticsearch/reference/7.x/index-modules.html