当前位置: 首页 > news >正文

ES进程除了kill之外,有什么优雅关闭的方式吗?

问题

Linux环境中,Elasticsearch 8的进程除了kill之外,有什么优雅关闭的方式吗?
在这里插入图片描述

具体实施方式

在Linux环境中,Elasticsearch(ES)进程可以通过多种方式实现优雅关闭,这种方式允许它完成必要的清理工作,如保存未写入磁盘的数据、关闭索引等,而不是直接强制终止。对于Elasticsearch 8.x版本,可以采用以下几种方式进行优雅关闭:

1. 通过Elasticsearch API

发送HTTP请求到本地节点关闭整个集群:

curl -X POST "localhost:9200/_cluster/nodes/_local/_shutdown"

如果你知道特定节点的ID,也可以只关闭那个节点:

curl -X POST "localhost:9200/_cluster/nodes/node_id/_shutdown"

这个在ES 8实测结果:无法使用!

2. 通过Elasticsearch命令行工具

使用Elasticsearch提供的elasticsearch-cli工具(从7.x版本开始引入)进行关闭:

elasticsearch-cli --request POST "/_cluster/nodes/_local/_shutdown"

ES 8中这个工具存在,但是执行也是报错。

3. 通过系统信号

向Elasticsearch进程发送适当的信号也能触发优雅关闭。找到Elasticsearch进程的PID,然后发送SIGTERM信号:

kill -SIGTERM <es_pid>

Elasticsearch进程在接收到SIGTERM信号后,会按照设计的流程执行优雅关闭。

实际测试该方式是ok的。

4. 使用Systemd服务管理器(如果你的系统使用Systemd启动Elasticsearch服务):

sudo systemctl stop elasticsearch.service

Systemd通常会确保服务按照正确的方式来停止,包括执行服务定义中的“pre-stop”脚本,这对于像Elasticsearch这样的服务来说意味着执行一个有序的关闭。

这个方式也是ok的。

小结

在大型集群中,尤其是在生产环境中,建议通过API或服务管理器进行关闭,以便确保集群状态一致性和数据完整性。同时,Elasticsearch在接收到关闭信号后,也会尽量保证正在执行的操作得到妥善处理和回滚,避免数据丢失或损坏。

附录

kill的SIGTERM参数

当你在Linux或其他类Unix系统中操作时,kill命令是用来向一个进程发送特定信号的工具。SIGTERM信号就是这些信号之一,你可以将其理解为一种温和的通知方式,告诉某个进程:“嘿,程序,现在是时候结束了,请尽可能干净利落地完成手头的工作,并自行退出。”

具体来说,当你执行kill -15 <进程ID>(这里的15代表SIGTERM信号)时,操作系统会向指定的进程发送一个“终止请求”。对于遵守规则的程序,这意味着它们应该开始清理资源,保存状态,关闭打开的文件和网络连接等,并最终结束自身运行。这是一个尊重程序内部逻辑的优雅关机过程,给予程序机会去正确地完成收尾工作,防止数据丢失或者其他副作用。

然而,并非所有进程都会立即响应SIGTERM信号,有的进程可能没有实现对SIGTERM信号的处理,或者在接到信号后仍需一定时间才能完全终止。如果一个进程在接收到SIGTERM后未能及时结束,那么管理员可能会考虑发送更为强硬的SIGKILL信号(信号编号为9),这种信号无法被忽略或捕获,一旦发出,进程将会立即被内核强制终止。

Systemd服务管理

Linux上的Systemd服务管理是一种现代的系统和服务初始化系统,替代了早期Linux发行版中常用的SysVinit和Upstart等传统服务管理工具。Systemd的设计旨在提高系统的启动速度,简化服务管理,以及增强系统的整体可管理性和可靠性。以下是Systemd服务管理的主要特点和优势:

  1. 统一管理:Systemd将各种系统资源(如服务、定时任务、sockets、设备等)都抽象为统一的“单元”(units),包括.service(服务单元)、.target(目标单元)、.socket(套接字单元)、.device(设备单元)、.mount(挂载单元)等不同类型的单元文件,便于集中管理和维护。

  2. 并行启动:Systemd通过对服务间的依赖关系进行智能分析,允许系统服务并行启动,大大缩短了系统启动时间和服务响应时间。

  3. 动态管理:Systemd支持服务的动态管理,可以实时监控服务状态、重启失败的服务、按需启动服务(例如当监听的socket有连接请求时自动启动服务)等。

  4. 目标(targets)概念:Systemd引入了目标的概念,类似于运行级别,但更加灵活。例如,multi-user.target对应于传统意义上的多用户文本模式,graphical.target则是图形界面模式,不同的目标包含了启动时需要激活的一系列服务。

  5. Journal日志系统:Systemd自带的日志管理系统journalctl,能够收集、索引和过滤系统的所有日志,这为故障排查提供了便利。

  6. Systemctl工具:通过systemctl命令行工具,用户可以轻松地启动、停止、重启服务,查询服务状态,以及进行更复杂的服务管理操作。

  7. 跨平台兼容性:Systemd设计之初就考虑到了多种架构和操作系统环境,提供了统一的服务管理接口,增强了Linux生态系统的协同性和一致性。

http://www.lryc.cn/news/323980.html

相关文章:

  • 院子摄像头的监控
  • SpringBoot3使用响应Result类返回的响应状态码为406
  • 基础:TCP四次挥手做了什么,为什么要挥手?
  • Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)
  • 第十一届蓝桥杯省赛第一场真题
  • 设计模式 模板方法模式
  • 【STM32嵌入式系统设计与开发】——6矩阵按键应用(4x4)
  • 乐优商城(九)数据同步RabbitMQ
  • XSS-labs详解
  • 设计模式——模板方法模式封装.net Core读取不同类型的文件
  • [思考记录]技术欠账
  • React - 实现菜单栏滚动
  • 线性筛选(欧拉筛选)-洛谷P3383
  • 企业微信可以更换公司主体吗?
  • Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)
  • Golang案例开发之gopacket抓包三次握手四次分手(3)
  • 如何减少pdf的文件大小?pdf压缩工具介绍
  • TypeScript基础类型
  • 长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审
  • 安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?
  • 【Python + Django】表结构创建
  • 解锁编程潜能:ChatGPT如何革新软件开发
  • 内网使用rustdesk进行远程协助
  • linux内核input子系统概述
  • 【解决报错】vi/vim修改文件时报错:Found a swap file by the name xxxxx
  • BRAM底层原理详细解释(1)
  • GEE:为什么在机器学习分类或回归时,提取特征变量后的样本点下载到本地时,数据为空且缺少坐标?
  • 电脑安装双系统windows和ubuntu server
  • 掌握这8大工具,自媒体ai写作之路畅通无阻! #媒体#媒体
  • 「渗透笔记」致远OA A8 status.jsp 信息泄露POC批量验证