【DevOps】Elasticsearch集群JVM参数调整及滚动重启指南

目录

概述

准备工作

滚动重启步骤

[1. 禁用分片分配(可选)](#1. 禁用分片分配(可选))

[2. 关闭索引写操作](#2. 关闭索引写操作)

[3. 检查集群状态](#3. 检查集群状态)

[4. 重启Master节点](#4. 重启Master节点)

[5. 重启Data节点](#5. 重启Data节点)

[6. 重新开启索引写操作](#6. 重新开启索引写操作)

[7. 启用分片分配(如果之前禁用了)](#7. 启用分片分配(如果之前禁用了))

[8. 监控集群状态](#8. 监控集群状态)

结论


概述

本文档旨在提供一个详细的指南,帮助用户在Elasticsearch集群中调整JVM参数并进行滚动重启。滚动重启是一种逐步重启集群节点的方法,旨在最小化对集群性能和可用性的影响。Elasticsearch集群的环境包括3台master节点,三台data节点。下面我们看一下具体实现步骤。

准备工作

  1. 备份配置文件 :

    在每个节点上备份jvm.options文件。

    复制代码
    cp /etc/elasticsearch/jvm.options /etc/elasticsearch/jvm.options.backup
  2. 修改JVM参数 :

    编辑每个节点的/etc/elasticsearch/jvm.options文件,调整所需的JVM参数。例如,调整堆内存大小:

    复制代码
    -Xms4g
    -Xmx4g

滚动重启步骤

1. 禁用分片分配(可选)

在任意一个Master节点上执行以下命令,禁用分片分配:

复制代码
curl -X PUT "http://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}'

2. 关闭索引写操作

在任意一个Master节点上执行以下命令,关闭所有索引的写操作:

复制代码
curl -X PUT "http://localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'
{
  "index.blocks.write": true
}'

3. 检查集群状态

确保集群状态为黄色或绿色,等待所有分片被分配:

复制代码
curl -X GET "http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=30s"

4. 重启Master节点

依次重启每个Master节点,确保每次重启后集群保持稳定。

  • 重启Master节点1:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Master节点1成功加入集群并状态正常。

  • 重启Master节点2:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Master节点2成功加入集群并状态正常。

  • 重启Master节点3:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Master节点3成功加入集群并状态正常。

5. 重启Data节点

依次重启每个Data节点,确保每次重启后集群保持稳定。

  • 重启Data节点1:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Data节点1成功加入集群并状态正常。

  • 重启Data节点2:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Data节点2成功加入集群并状态正常。

  • 重启Data节点3:

    复制代码
    sudo systemctl restart elasticsearch
  • 检查节点状态:

    复制代码
    curl -X GET "http://localhost:9200/_cat/nodes"
  • 等待节点加入集群 :

    确保Data节点3成功加入集群并状态正常。

6. 重新开启索引写操作

在任意一个Master节点上执行以下命令,重新开启所有索引的写操作:

复制代码
curl -X PUT "http://localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'
{
  "index.blocks.write": false
}'

7. 启用分片分配(如果之前禁用了)

在所有节点重启完成后,重新启用分片分配:

复制代码
curl -X PUT "http://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}'

8. 监控集群状态

在重启完成后,持续监控集群的健康状态和性能指标,确保一切正常。

结论

通过以上步骤,你可以在Elasticsearch集群中安全地调整JVM参数并进行滚动重启。请确保在操作过程中谨慎行事,并持续监控集群状态,以确保集群的稳定性和性能。

相关推荐
Elasticsearch3 小时前
最快的工作是你根本不需要做的工作:Elasticsearch 中速度提升 100 倍的排序查询
elasticsearch
Elastic 中国社区官方博客13 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
Elasticsearch14 小时前
使用 Lucene 搜索你的 Bean — 搜索
elasticsearch
2601_9620715715 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
专业程序开发源21 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
用户0942485680321 小时前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
wuminyu21 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
vx_Biye_Design1 天前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物
Elastic 中国社区官方博客1 天前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
2601_962071571 天前
类变量和全局变量的隔离性有什么区别?
java·开发语言·jvm