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

使用Systemd管理ES服务进程

Centos中的Systemd介绍


CentOS 中的 Systemd 详细介绍

Systemd 是 Linux 系统的初始化系统和服务管理器,自 CentOS 7 起取代了传统的 SysVinit,成为默认的初始化工具。它负责系统启动、服务管理、日志记录等核心功能,显著提升了系统的启动速度和资源管理效率。


1. Systemd 的核心作用

服务管理:启动、停止、重启服务,管理服务依赖关系。
系统初始化:并行化启动进程,加速系统启动。
资源监控:跟踪进程状态、资源占用(CPU、内存等)。
日志管理:通过 journald 统一收集和存储系统及服务日志。
挂载点管理:自动挂载文件系统(替代 /etc/fstab 的部分功能)。


2. Systemd 的核心组件
组件功能
systemd主进程,负责初始化系统和管理其他组件。
systemctl用于管理服务的命令行工具(如启动、停止、重启服务)。
journald日志服务,记录系统、内核及所有服务的日志。
unit系统资源单元(如服务、挂载点、设备等),通过 .service.target 等文件定义。

3. 常用 Systemd 命令
(1) 服务管理
# 启动服务
sudo systemctl start nginx.service

# 停止服务
sudo systemctl stop nginx

# 重启服务
sudo systemctl restart nginx

# 查看服务状态
sudo systemctl status nginx

# 设置开机自启
sudo systemctl enable nginx

# 禁用开机自启
sudo systemctl disable nginx

# 查看所有已启动的服务
systemctl list-units --type=service
(2) 日志管理(journald)
# 查看所有日志(默认显示当前启动的日志)
journalctl

# 查看指定服务的日志
journalctl -u nginx.service

# 按时间过滤(例如最近1小时)
journalctl --since "1 hour ago"

# 实时跟踪日志
journalctl -f

# 查看内核日志
journalctl -k
(3) 系统状态与维护
# 查看系统启动时间
systemd-analyze

# 分析各服务的启动耗时
systemd-analyze blame

# 重新加载修改的 unit 文件
sudo systemctl daemon-reload

# 重启 systemd 管理器(仅在紧急情况下使用)
sudo systemctl daemon-reexec

4. Systemd Unit 文件

Systemd 通过 Unit 文件(单元文件)定义系统资源,常见类型包括:
.service:服务单元(如 Nginx、MySQL)。
.target:目标单元(类似 SysVinit 的运行级别,如 multi-user.target)。
.mount:挂载点单元(替代 /etc/fstab)。
.socket:套接字单元(管理网络或 IPC 套接字)。

Unit 文件路径

系统默认配置/usr/lib/systemd/system/
用户自定义配置/etc/systemd/system/

示例:自定义 Service 文件

创建 /etc/systemd/system/myapp.service

[Unit]
Description=My Custom Application
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
User=myuser
Group=mygroup

[Install]
WantedBy=multi-user.target
关键字段解释

[Unit]:定义依赖关系和元数据(如 After 表示启动顺序)。
[Service]:配置服务行为(如启动命令、重启策略)。
[Install]:定义如何启用服务(如 WantedBy 指定关联的目标)。


5. Systemd 的日志持久化

默认情况下,journald 的日志存储在内存中(/run/log/journal/),重启后丢失。若需持久化日志:

  1. 创建日志目录:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
  1. 重启 journald
sudo systemctl restart systemd-journald

6. Systemd 与 SysVinit 的对比
特性SystemdSysVinit
启动速度并行启动,速度更快串行启动,速度较慢
服务管理支持依赖关系、按需启动依赖脚本顺序
日志系统统一日志(journald分散在 /var/log/
配置方式通过 Unit 文件定义通过 /etc/init.d/ 脚本管理
兼容性兼容 SysVinit 脚本(但不推荐)仅支持传统脚本

7. 注意事项与最佳实践
  1. 避免直接修改系统默认 Unit 文件
    如需覆盖配置,在 /etc/systemd/system/ 中创建同名文件或使用 systemctl edit

  2. 使用 systemctl enable 而非手动创建符号链接
    确保依赖关系正确处理。

  3. 调试服务启动失败
    • 使用 systemctl status <service> 查看详细错误。
    • 结合 journalctl -u <service> 分析日志。

  4. 定期清理日志

# 保留最近7天的日志
journalctl --vacuum-time=7d

8. 典型问题解决

服务启动超时
在 Unit 文件中增加 TimeoutStartSec=300(单位:秒)。

依赖服务未就绪
使用 AfterRequires 字段明确依赖关系。

自定义环境变量
在 Unit 文件的 [Service] 段添加 Environment="KEY=value"


Systemd 是 CentOS 系统管理的核心工具,熟练掌握其用法可以显著提升运维效率。理解 Unit 文件的设计和日志管理机制,是优化服务稳定性和排查问题的关键!

自建Es进程通过Systemd管理


1. 创建 Elasticsearch 系统用户

# 创建 elasticsearch 用户及用户组(禁止登录)
sudo groupadd es
sudo useradd -g es -s /sbin/nologin elasticsearch

# 赋予用户对 ES 安装目录、数据目录、日志目录的权限
sudo chown -R es:elasticsearch /opt/elasticsearch/
sudo chown -R elasticsearch:elasticsearch /var/data/elasticsearch/
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

2. 编写 Systemd Unit 文件

创建文件 /etc/systemd/system/elasticsearch.service,内容如下:

[Unit]
Description=Elasticsearch 7.x Service
Documentation=https://www.elastic.co/guide/en/elasticsearch/reference/7.x/index.html
After=network.target

[Service]
User=es
Group=es
Environment="ES_HOME=/opt/elasticsearch"
Environment="ES_PATH_CONF=/etc/elasticsearch"


# 限制资源使用(按需调整)
LimitNOFILE=65536
LimitMEMLOCK=infinity

ExecStart=/opt/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=30s

# 内存限制(建议根据服务器配置调整)
Environment="ES_JAVA_OPTS=-Xms4g -Xmx4g"

# 安全配置(若启用 xpack)
# Environment="ES_SECURITY_TYPE=trial"

[Install]
WantedBy=multi-user.target

3. 加载并启动服务

# 重新加载 Systemd 配置
sudo systemctl daemon-reload

# 启动 Elasticsearch
sudo systemctl start elasticsearch

# 设置开机自启
sudo systemctl enable elasticsearch

# 查看服务状态
systemctl status elasticsearch

# 查看实时日志
journalctl -u elasticsearch -f

5. 验证 Elasticsearch 运行

# 检查 ES 是否监听端口 9200
curl http://localhost:9200

# 输出示例:
{
  "name" : "node-1",
  "cluster_name" : "my-es-cluster",
  "cluster_uuid" : "abc123",
  "version" : {
    "number" : "7.17.3",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "abc123",
    "build_date" : "2023-01-01",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0"
  },
  "tagline" : "You Know, for Search"
}

6. 常见问题与解决

(1) 启动失败:权限不足
# 检查目录权限
sudo chown -R elasticsearch:elasticsearch /opt/elasticsearch
sudo chown -R elasticsearch:elasticsearch /var/data/elasticsearch

# 查看详细错误日志
journalctl -u elasticsearch --no-pager -n 50
(2) 内存分配失败

/etc/sysconfig/elasticsearch 中调整 JVM 参数:

# 减少堆内存(例如 2GB)
ES_JAVA_OPTS="-Xms2g -Xmx2g"
(3) 最大文件描述符限制
# 临时生效
ulimit -n 65536

# 永久生效(编辑 /etc/security/limits.conf)
echo "elasticsearch - nofile 65536" | sudo tee -a /etc/security/limits.conf

7. 安全配置(可选)

若启用了 Elasticsearch 安全功能(如 xpack),需在 elasticsearch.yml 中添加配置:

# 编辑配置文件 /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

生成密码并保存:

# 进入 ES 安装目录的 bin 文件夹
cd /opt/elasticsearch/bin

# 交互式生成所有内置用户密码
./elasticsearch-setup-passwords interactive

8. 完整配置示例

配置示例

/etc/elasticsearch/elasticsearch.yml

cluster.name: my-es-cluster
node.name: node-1
path.data: /var/data/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["node-1", "node-2"]
cluster.initial_master_nodes: ["node-1"]

通过以上步骤,Elasticsearch 7.x 将被 Systemd 托管,实现开机自启、服务监控和日志统一管理。遇到问题时,优先通过 journalctl 分析日志定位原因。

拓展

  • 1、查看当前用户的group
id

相关文章:

  • Python实验:Python语言分支循环结构应用
  • 未来科幻赛博朋克风品牌电影游戏设计装饰英文字体安装包 Heat Robox – The Ultimate Futuristic Display Font
  • Android java 设计封装增强型WebView组件
  • HTTPS 加密过程详解
  • 关于Unity的CanvasRenderer报错
  • spring-tx笔记
  • 关于多目标进化算法评估指标
  • 可编辑52页PPT | 智慧园区安全生产顶层设计方案
  • 在C语言基础上学Java【Java】【二】
  • 工业软件的破局与重构:从技术依赖到自主创新的未来路径
  • Vagrant+VMWare 安装Ubuntu24.04
  • JVM常见概念之条件移动
  • 《掌握基础DOM操作:从零开始的前端入门指南》
  • C++的常用容器嵌套
  • Android Compose 基础布局之 Box 和 Stack 源码深度剖析(九)
  • 【留一下记录】Vllm在Linux环境下的学习笔记
  • 多路FM调频广播解调器:多路电台FM广播信号一体化解调处理方案
  • Burp Suite HTTPS解密原理
  • 星越L_大灯延时关闭使用讲解
  • vue3之写一个aichat---实现聊天逻辑
  • 贵州省总工会正厅级副主席梁伟被查,曾任贵州省纪委副书记
  • 呼和浩特推进新一轮国企重组整合:杜绝一项目一公司、一业务一公司
  • 广西钦州:坚决拥护自治区党委对钟恒钦进行审查调查的决定
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 异域拾异|大脚怪的形状:一项神秘社会学研究