Elasticsearch 8.13.2 单机部署与配置详细指南

本文提供了一份完整的Elasticsearch 8.13.2在生产环境中的部署指南。涵盖了从系统优化、安全配置到服务管理的全流程,特别注重生产环境下的安全性和稳定性配置。指南包括TLS/SSL证书配置、系统资源调优、systemd服务集成以及用户权限管理等关键环节,适合用于构建安全、可靠的Elasticsearch集群。

一、部署前准备

在部署Elasticsearch之前,必须对操作系统进行优化配置,以确保Elasticsearch能够获得足够的系统资源并稳定运行。

1.修改文件描述符最大及进程数量打开上限

Elasticsearch在处理大量数据时可能需要同时打开很多文件(如索引分片、日志文件等),默认的文件描述符限制通常不足以支持生产环境需求。提高这些限制可以避免出现"打开文件过多"的错误。

  • soft nofile 65535:设置每个进程可打开的文件描述符软限制为65535
  • hard nofile 131070:设置硬限制为131070,这是软限制的上限值
  • hard nproc 8192:设置用户最大进程数为8192,确保ES有足够的进程资源
sh 复制代码
[root@elk101 ~]# cat > /etc/security/limits.d/es.conf <<EOF
*          soft    nofile     65535
*          hard    nofile     131070
*          hard    nproc     8192
EOF

2.修改虚拟内存映射上限

Elasticsearch使用mmap来高效访问索引文件,vm.max_map_count参数定义了进程可以拥有的内存映射区域的最大数量。默认值通常较低,需要增加以避免内存映射不足的问题。

sh 复制代码
查看内核参数:
[root@elk101 ~]# sysctl -q vm.max_map_count
vm.max_map_count = 262144
		
	临时修改内核参数(重启OS后配置丢失):
[root@elk101 ~]# sysctl -w vm.max_map_count=262144

	
	永久生效内核参数(重启OS后配置不丢失)  强烈推荐
[root@elk101 ~]# cat > /etc/sysctl.d/es.conf <<EOF
vm.max_map_count=262144
EOF

[root@elk101 ~]# sysctl -f /etc/sysctl.d/es.conf

3.安装jdk

Elasticsearch是基于Java开发的,需要JDK运行环境。Elasticsearch 8.13.2需要JDK 17或更高版本。

sh 复制代码
#01 Oracle JDK下载地址:https://www.oracle.com/java/technologies/downloads/
#02 解压软件包
[root@ecm-d323 software]# tar xf jdk-17.0.15_linux-x64_bin.tar.gz 
[worker@es-node-27 ~]$ vim /etc/profile.d/java.sh
#添加环境变量
export PATH=/data/software/jdk-17/bin:$PATH

4.创建es用户

出于安全考虑,不应该使用root用户运行Elasticsearch。创建专用用户可以限制权限,降低安全风险。

sh 复制代码
[root@elk101 ~]# useradd elastic

二、部署es

1.下载es

从官方源下载Elasticsearch安装包,确保软件包完整性和安全性。

sh 复制代码
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-linux-x86_64.tar.gz

2.解压

sh 复制代码
[root@ecm-d323 software]# cd /data/software/
[root@ecm-d323 software]# tar xf elasticsearch-8.13.2-linux-x86_64.tar.gz 

3.修改jvm参数

调整JVM堆内存大小是性能调优的关键步骤。应根据服务器物理内存大小合理分配。

  • Xms和Xmx设置为相同值:避免运行时堆内存调整带来的性能开销
  • 通常设置为物理内存的50%:但不超过32GB(超过32GB会降低JVM性能)
  • 保留足够内存给操作系统和文件系统缓存
sh 复制代码
[root@ecm-d323 config] cd /data/software/elasticsearch-8.13.2/config
[root@ecm-d323 config]# vim jvm.options
-Xms4g
-Xmx4g

4.生成证书

Elasticsearch 8.x默认启用安全特性,包括传输层加密。需要为节点间通信生成TLS/SSL证书。

  • 第一步:创建自签名的根CA证书,用于签发其他证书
  • 第二步:使用CA为Elasticsearch节点签发证书
  • 生产建议:使用受信任的CA或内部PKI系统颁发证书
sh 复制代码
#生成一个新的证书颁发机构(CA),即 自签名的根证书,用于后续签发其他 Elasticsearch 节点证书
[root@ecm-d323 ~]# cd /data/software/elasticsearch-8.13.2/config
[root@ecm-d323 elasticsearch-8.13.2]# ./bin/elasticsearch-certutil ca --out elastic-stack-ca.p12 --pass ""

#使用已有的 CA 签发 Elasticsearch 节点证书(即由 CA 签名的证书,而不是自签名证书)
[root@ecm-d323 elasticsearch-8.13.2]# ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ca-pass "" --out config/elastic-certificates.p12 --pass ""

5.修改配置文件

Elasticsearch的主要配置文件,需要根据实际环境调整集群名称、网络设置和安全配置。

关键配置说明

  • cluster.name:集群标识,同一集群的所有节点必须相同
  • network.host: 0.0.0.0:监听所有网络接口(生产环境建议绑定特定IP)
  • http.port: 19200:REST API端口(默认9200)
  • discovery.seed_hosts:集群发现种子节点列表
  • cluster.initial_master_nodes:初始主节点列表(集群首次启动时需要)
  • xpack.security:启用安全特性,包括认证和加密
sh 复制代码
[worker@elasticsearch-zs config]$  cd /data/software/elasticsearch-8.13.2/config/
[worker@elasticsearch-zs config]$  egrep -v "^#|^$" elasticsearch.yml 
cluster.name: es8
network.host: 0.0.0.0
http.port: 19200
discovery.seed_hosts: ["10.0.0.3"]
cluster.initial_master_nodes: ["10.0.0.3"]
#配置证书
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

6.添加启动配置文件

创建启动脚本便于管理和维护Elasticsearch服务,包含环境变量设置和进程管理。

  • ES_JAVA_HOME:显式指定JDK路径,避免环境变量问题
  • 使用专用用户启动:提高安全性
  • 进程检查:避免重复启动,确保服务状态可控
  • 日志记录:将启动日志保存到文件便于排查问题
sh 复制代码
[root@ecm-d323 elasticsearch-8.13.2]# cat startES.sh 
#!/bin/bash

#设置jdk路径
export ES_JAVA_HOME="/data/software/jdk-17.0.15"

# 设置Elasticsearch的安装目录
ES_HOME="/data/software/elasticsearch-8.13.2"
LOG_FILE="${ES_HOME}/logs/startup.log"
#设置启动用户
ES_USER="elastic"
pid=`ps -ef | grep elasticsearch-8.13.2 | grep -v grep | grep '/data/software/elasticsearch-8.13.2' | awk '{print $2}'`
                                                                           
# 检查Elasticsearch是否已经在运行
if ps -ef | grep elasticsearch | grep -v grep > /dev/null; then
    echo "Elasticsearch is running. Stopping..."
    kill $pid;
    echo "Elasticsearch stopped."
fi
sleep 5s
# 使用nohup重新启动Elasticsearch

#nohup "$ES_HOME/bin/elasticsearch" -d > "$ES_HOME/es.log" 2>&1 &
su - "$ES_USER" -s /bin/bash -c "nohup \"$ES_HOME/bin/elasticsearch\" -d >> \"$LOG_FILE\" 2>&1 &"
echo "Elasticsearch is starting in the background..."

7.以systemctl管理

使用systemd管理Elasticsearch服务可以实现开机自启、服务状态监控和集中化日志管理。

systemd配置要点

  • User/Group:指定运行服务的专用用户,确保安全
  • 资源限制:覆盖系统默认限制,确保ES获得足够资源
  • 进程控制:优雅的停止机制,避免数据损坏
sh 复制代码
[root@ecm-d323 elasticsearch-8.13.2]#  vim /usr/lib/systemd/system/es8.service
[Unit]
Description=elasticsearch
After=network.target

[Service]
# 核心配置:指定运行用户和组,请将 `your_es_user` 和 `your_es_group` 替换为实际的用户和组
User=elastic
Group=elastic
Type=forking
# 指定启动命令,-d 参数表示以守护进程(daemon)方式运行
ExecStart=/data/software/elasticsearch-8.13.2/bin/elasticsearch -d
PrivateTmp=true
# 设置资源限制,这对于ES稳定运行很重要
LimitNOFILE=65535
LimitNPROC=4096
LimitMEMLOCK=infinity
# 设置超时和停止信号
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target


# 重新加载systemd配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable es8.service
# 启动服务
sudo systemctl start es8.service
# 检查服务状态
sudo systemctl status es8.service

8.修改文件目录权限

确保Elasticsearch专用用户对安装目录和数据目录有正确的读写权限。

  • 递归修改目录所有权,确保elastic用户可以正常读写
  • 包括配置文件、数据目录、日志目录等
sh 复制代码
chown elastic:elastic /data/software/elasticsearch-8.13.2 -R

9.启动

执行启动脚本,启动Elasticsearch服务,并监控启动日志。

  • 使用tail -f实时查看启动日志,便于监控启动过程
  • 关注日志中的错误和警告信息
sh 复制代码
[root@ecm-d323 elasticsearch-8.13.2]# sh startES.sh 
[root@ecm-d323 elasticsearch-8.13.2]# tail -f logs/startup.log 

10.设置es密码

Elasticsearch 8.x默认启用安全特性,需要为内置用户设置密码。

内置用户说明

  • elastic:超级管理员用户,拥有所有权限
  • kibana_system:Kibana服务连接ES使用的用户
  • logstash_system:Logstash服务连接ES使用的用户
  • beats_system:Beats系列产品连接ES使用的用户
  • apm_system:APM服务使用的用户
  • remote_monitoring_user:监控用户
sh 复制代码
[root@ecm-d323 elasticsearch-8.13.2]# ./bin/elasticsearch-setup-passwords auto
******************************************************************************
Note: The 'elasticsearch-setup-passwords' tool has been deprecated. This       command will be removed in a future release.
******************************************************************************

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = d2Kiqz6UR2RvRIUpFiNj

Changed password for user kibana_system
PASSWORD kibana_system = hBbxAHMiJywLgnuWDt2c

Changed password for user kibana
PASSWORD kibana = hBbxAHMiJywLgnuWDt2c

Changed password for user logstash_system
PASSWORD logstash_system = JbyQQrLKyb0tkhTZpYsu

Changed password for user beats_system
PASSWORD beats_system = gKqD5OMUxpkbWlVzmtFx

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = x42jHJK8i9xmoFYDMppn

Changed password for user elastic
PASSWORD elastic = EOnjcxaOSOuk5QjEmnOS

[root@ecm-d323 elasticsearch-8.13.2]# 

#交互式修改密码
[root@ecm-d323 elasticsearch-8.13.2]# ./bin/elasticsearch-reset-password -i -u elastic

11.验证

通过REST API验证Elasticsearch是否正常运行,节点状态是否健康。

sh 复制代码
curl -u elastic:IfCaV45mpajspXJ9cS4G 10.0.0.3:19200/_cat/nodes
相关推荐
玄微云13 分钟前
2026年通用软件难适配,垂直店务系统反而更省心
大数据·云计算·软件需求
Elastic 中国社区官方博客1 小时前
Elastic 为什么捐赠其 OpenTelemetry PHP 发行版
大数据·开发语言·elasticsearch·搜索引擎·信息可视化·全文检索·php
方向研究1 小时前
ABS生产
大数据
TDengine (老段)2 小时前
TDengine 视图功能使用
大数据·数据库·servlet·时序数据库·tdengine·涛思数据
TDengine (老段)2 小时前
TDengine IDMP 运维指南 —— 部署架构
大数据·运维·数据库·架构·时序数据库·tdengine·涛思数据
utmhikari2 小时前
【测试人生】变更规则校验Agent研发的一些思路
大数据·人工智能·llm·agent·变更风险·openclaw
AC赳赳老秦2 小时前
DeepSeek优化多智能体指令:避免协同冲突,提升自动化流程稳定性
android·大数据·运维·人工智能·自然语言处理·自动化·deepseek
成长之路5143 小时前
【数据集】A股上市公司数字投资数据集-含代码(2000-2024年)
大数据
jkyy20143 小时前
破局家电同质化:智能冰箱+主动健康,解锁家庭健康新赛道
大数据·人工智能·健康医疗
weiyvyy4 小时前
信息化系统建设规划篇——蓝图设计与路径规划
大数据·信息可视化·信息化系统·企业信息化核心业务模块·信息化建设