使用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) 服务管理
bash 复制代码
# 启动服务
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)
bash 复制代码
# 查看所有日志(默认显示当前启动的日志)
journalctl

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

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

# 实时跟踪日志
journalctl -f

# 查看内核日志
journalctl -k
(3) 系统状态与维护
bash 复制代码
# 查看系统启动时间
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

ini 复制代码
[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. 创建日志目录:
bash 复制代码
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
  1. 重启 journald
bash 复制代码
sudo systemctl restart systemd-journald

6. Systemd 与 SysVinit 的对比
特性 Systemd SysVinit
启动速度 并行启动,速度更快 串行启动,速度较慢
服务管理 支持依赖关系、按需启动 依赖脚本顺序
日志系统 统一日志(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. 定期清理日志

bash 复制代码
# 保留最近7天的日志
journalctl --vacuum-time=7d

8. 典型问题解决

服务启动超时

在 Unit 文件中增加 TimeoutStartSec=300(单位:秒)。

依赖服务未就绪

使用 AfterRequires 字段明确依赖关系。

自定义环境变量

在 Unit 文件的 [Service] 段添加 Environment="KEY=value"


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

自建Es进程通过Systemd管理


1. 创建 Elasticsearch 系统用户

bash 复制代码
# 创建 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,内容如下:

ini 复制代码
[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. 加载并启动服务

bash 复制代码
# 重新加载 Systemd 配置
sudo systemctl daemon-reload

# 启动 Elasticsearch
sudo systemctl start elasticsearch

# 设置开机自启
sudo systemctl enable elasticsearch

# 查看服务状态
systemctl status elasticsearch

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

5. 验证 Elasticsearch 运行

bash 复制代码
# 检查 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) 启动失败:权限不足
bash 复制代码
# 检查目录权限
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 参数:

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

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

7. 安全配置(可选)

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

yaml 复制代码
# 编辑配置文件 /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

生成密码并保存:

bash 复制代码
# 进入 ES 安装目录的 bin 文件夹
cd /opt/elasticsearch/bin

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

8. 完整配置示例

配置示例

/etc/elasticsearch/elasticsearch.yml

yaml 复制代码
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
bash 复制代码
id
相关推荐
星宸追风2 小时前
Git查看某个commit的改动
大数据·elasticsearch·搜索引擎
Zyxalia3 小时前
gin + es 实践 03
elasticsearch·jenkins·gin
{{uname}}4 小时前
ElasticSearch启动成功后访问9200端口需要登录的问题
大数据·elasticsearch·搜索引擎
LUCIAZZZ6 小时前
ElasticSearch基本概念
java·大数据·elasticsearch·搜索引擎·中间件·操作系统
wending-Y11 小时前
es 里的Filesystem Cache 理解
大数据·elasticsearch·mybatis
Zyxalia14 小时前
gin + es 实践 01
大数据·elasticsearch·gin
咸鱼求放生1 天前
验证es启动成功
大数据·elasticsearch·jenkins
Zyxalia1 天前
gin + es 实践 05
大数据·elasticsearch·gin
mit6.8241 天前
[Es_1] 介绍 | 特点 | 图算法 | Trie | FST
后端·elasticsearch
信仰JR1 天前
OpenKylin安装Elastic Search8
elasticsearch·es