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,祝你升职、加薪、不提桶!

相关推荐
智脑API2 分钟前
CCSwitch Claude Code 如何配置 MCP?服务器启动、工具权限与安全测试
运维·服务器·claude·codex·ccswitch
Rain的Java大神之路5 分钟前
如何保证接口幂等
java·经验分享·后端·面试·架构
木木爱研究5 分钟前
elpis-里程碑四-基于Vue完成动态组件库建设
前端·后端
一水行5 分钟前
博客评论系统搭建回顾
javascript·后端
Jesse_EC8 分钟前
一个看不见的字符——CRLF 如何让我的 Docker 初始化脚本"静默失踪"
java·后端
学长毕业设计12 分钟前
基于SpringBoot的社区鲜奶订购系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
2601_9621741712 分钟前
小试牛刀-SpringBoot集成SOL链
数据库·spring boot·后端
郝学胜_神的一滴16 分钟前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
c++·后端
张炯炯16 分钟前
个人RAG上线翻车实录-记一次 API 延迟排查
后端
小蒜学长32 分钟前
基于SpringBoot + Vue的智能健身房管理系统的设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端