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

相关推荐
Javatutouhouduan1 小时前
如何系统全面地自学Java语言?
java·后端·程序员·编程·架构师·自学·java八股文
后端转全栈_小伵1 小时前
MySQL外键类型与应用场景总结:优缺点一目了然
数据库·后端·sql·mysql·学习方法
努力的小T2 小时前
Linux apt-mirror 同步搭建本地源详解教程
linux·运维·服务器·ubuntu·云计算·debian
ly21st2 小时前
elasticsearch安全认证
安全·elasticsearch
Mitch3112 小时前
【漏洞复现】CVE-2014-3120 & CVE-2015-1427 Expression Injection
运维·web安全·elasticsearch·docker·apache
编码浪子2 小时前
Springboot高并发乐观锁
后端·restful
路飞雪吖~2 小时前
【Linux】编写简易shell && 深度理解命令行解释器 && 环境变量 && 内建命令
linux·运维·服务器
uccs2 小时前
go 第三方库源码解读---go-errorlint
后端·go
神奇侠20242 小时前
基于Centos7.X系统端口占用处理
linux·运维·服务器
Mr.朱鹏3 小时前
操作002:HelloWorld
java·后端·spring·rabbitmq·maven·intellij-idea·java-rabbitmq