Elasticsearch集群降级为单节点

Elasticsearch集群降级为单节点

WangScaler: 一个用心创作的作者。

声明:才疏学浅,如有错误,恳请指正。

最近迫于资金的压力,不得不取消集群模式,使用单节点,那么我们如何正确的进行降级呢?以及降级的时候需要注意哪些问题呢?一起来跟我实操一下吧。

1、提升单体节点的配置

要想马儿跑,就得给马儿草。所以全干工程师们,老板给你加薪了吗?既然集群取消了,所有压力都给在一台ES节点上,势必要提升下单体节点的配置,不能做资本主义,要适当的给点蛋糕。

vim /etc/elasticsearch/jvm.options

将默认内存1g进行修改,当然如果是你开发学习用的服务器内存很拉跨,默认1g拉不起来,可以适当调低。

因为elasticsearch比较吃内存,建议给到一半的内存。但是不能超过32G,官方的原文点这里,简单来说就是超过32G,因为内存指针压缩(compressed oops)技术蜕变为普通指针,降低CPU的性能。所以内存的设置范围最好就是1/2主机内存到32G之间,内存分配越大,性能越好。

我这里是8G内存的服务器,所以我直接给到4G内存,当然也要考虑你服务器其他的业务,别不够用了导致OOM。

diff 复制代码
-Xms4g
-Xmx4g

2、将副本设置为0

因为我的索引创建的时候指定了一个副本,5个分片。所以我每个索引都有5*2个分片。es会把这些分片均衡的分配给各个节点来保证数据的安全。现在我们切换到单节点,就无需副本了。

执行完以下命令所有的副本消失,只剩下主分片数据。

bash 复制代码
PUT */_settings
{
    "index":{
        "number_of_replicas":"0"
    }
}

执行完这步我们所有节点一共只有一套完整的所有索引的分片信息。

如图test_old是移除副本之前的分片信息,test就是我们移除之后分片信息。可以很明显的看出来副本已经消失了。

3、禁用节点

移除完副本之后,我们需要把其他节点的分片信息转移到我们要保留的单节点的机器上。所有的数据安全、性能全取决于这一个节点。

bash 复制代码
PUT /_cluster/settings
{"transient":{"cluster.routing.allocation.exclude._ip":"172.19.0.3,172.21.0.4"}}

禁用完节点之后,数据全部都已经转移到我们的主节点上,如下图

4、配置投票过滤

ini 复制代码
POST /_cluster/voting_config_exclusions?node_names=node-2,node-3

这一步的目的就是为了,让主节点切换到我们剩余的这个节点上,防止其他节点选举出现脑裂等意外情况。如果移除超过一半节点必须要执行此操作,像我们只剩下单节点问题不大。

5、停止服务

这时候,我们其他节点的服务已经不起作用了,没有数据没有选举权。可以直接停止了。

arduino 复制代码
systemctl stop elasticsearch

6、修改配置文件

因为我们集群模式取消,如果不修改配置,它肯定会尝试跟其他节点通信等等,稍微有点影响性能,不过应该影响也不大,我建议修改。

bash 复制代码
vim /etc/elasticsearch/elasticsearch.yml
# 将以下两句的之前的节点信息删除
discovery.seed_hosts: ["172.19.0.2"]
cluster.initial_master_nodes: ["node-1"]

到这里基本就完成了我们的降级任务。

7、Bug

果然,没有bug是不可能的,真的佩服那些编写航天程序的程序员,一旦有问题,就是天灾人祸啊。

运行了没多长时间分片不够用了,默认的分片设置是1000,我之前调大过参数。假设10000分片为例,之前一个索引是5*2=10个分片,平均分到单个节点上一个节点也就是3个分片。10000/3≈3333个索引。所以之前能容纳3333个索引。因为我创建索引使用的模板,而模板默认的配置就是1个副本5个分片,也就是新创建的索引还是10个分片。如下图

但是当时并没有观察,所以本来每个节点3个分片现在变成了10个分片,所以很快就不够用了。10000/10=1000,减少了2/3的索引数。

所以我直接修改模板的设置,就ok了,如果你没有使用模板的话,创建索引的时候设置副本为0就可以了。

json 复制代码
PUT _template/模板名
{
    "settings" : {
      "index" : {
        "number_of_shards" : "3",
        "refresh_interval" : "5s",
        "number_of_replicas": 0
      }
    }
}

这里我还减少了单节点的分片数,不知道对性能的影响大不大。看官网集群模式推荐每个节点至少五个分片。

原来的副本还是通过第二步将副本数设置为0即可。

总结

终于经过千辛万苦,降级成功,还会不会出现新的问题,让我们拭目以待。如果你认为哪里不妥,请指教。

来都来了,点个赞再走呗!

关注WangScaler,祝你升职、加薪、不提桶!

相关推荐
程序猿DD12 分钟前
OctaFuse Gateway 2.16.0:新增 ElevenLabs 的支持、厂商原生端点重构、后台管理优化
后端
掘金者阿豪13 分钟前
列存储适不适合订单报表?从一条慢 SQL 聊聊金仓 KES 的使用边界
后端
武子康35 分钟前
150毫秒和2400毫秒:同一 Agent 任务的两种延迟
人工智能·后端·agent
海边捡石子1 小时前
FreeSWITCH 入门:把电话系统接入语音客服机器人
人工智能·后端
武子康1 小时前
Agent 偏好记忆怎样确认写入:范围、版本与撤销的一个最小例
人工智能·后端·agent
Bazingga2 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
对象存储与RustFS2 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
Thneonl2 小时前
你写的 NetworkPolicy 可能一条都没生效
后端·架构
王中阳Go2 小时前
质保期第 90 天我翻了一遍日志目录:交付后真正会坏的 3 处
人工智能·后端·agent
卷无止境2 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python