在 Kubernetes 集群里,如果需要重启或移除某个节点,可以先对节点进行排水,然后就可以痛快地维护了。排水这个概念在其他集群环境里也是普遍存在的,但是说法可能不一样。
我最近解决了一个 Elasticsearch 集群维护的问题,就学习到了关于ES节点排水的操作。
公司早期部署了一个 3 节点的ES集群,master 没有独立部署,每个节点同时具有 master 和 data 角色。随着业务量增长,ES服务器性能已经不能满足需求了,于是又部署了 3 个 data 节点,新的节点具有更好的性能。这样 6 个节点用起来也没问题,但是我想把早期的 3 个节点设置为纯 master 节点,确保 master 节点具有高可靠性。
纯 master 角色不存储数据,我需要把 master 分片数据安全排空,然后把节点角色修改掉,最后依次重启节点就可以了。
Elasticsearch 节点排水
,但是没有获得任何有效的答案,尝试搜索其他关键词也没有效果。Elasticsearch 节点排水
,得到了一个让我非常满意的回答。Elasticsearch 节点排水,也被称为节点维护,是指将 Elasticsearch 节点上的分片迁移走,以便进行维护或升级等操作。这一过程通常需要通过设置节点的 "cluster.routing.allocation.enable" 参数为 "none",然后再将其改回 "all" 来完成。
具体步骤如下:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": "<你的节点IP>"
}
}
GET /_cat/shards
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": null
}
}
请注意,这些操作可能会影响 Elasticsearch 集群的性能,因此在执行时需要谨慎。
以上是 ChatGPT 原版答卷,后来我在 Google 搜索
Elasticsearch drain
得到了比 ChatGPT 更好一点的答案。
首先需要获取目标ES节点的IP地址,然后在 Kibana Dev Tools 执行下面的操作:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": "192.168.8.10,192.168.8.11,192.168.8.12"
}
}
查看节点分片分布情况:
GET /_cat/allocation?v=true
持续观察集群各节点分片变化情况,直到目标节点从列表中消失,这意味着目标节点所有索引分片都被迁移到其他节点了。
修改目标服务器节点角色属性:
node.roles: ["master"]
然后把节点逐个重启一遍,操作过程完全是平滑的,没有任何不良影响,到此问题就全部解决了。
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": null
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。