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
相关推荐
蚁巡信息巡查系统3 小时前
网站信息发布再巡查机制怎么建立?
大数据·人工智能·数据挖掘·内容运营
云边云科技_云网融合4 小时前
AIoT智能物联网平台:架构解析与边缘应用新图景
大数据·网络·人工智能·安全
青岛前景互联信息技术有限公司4 小时前
政策支撑:应急部推动化工园区安全风险智能化管控平台有效应用!
大数据·人工智能·安全
才盛智能科技4 小时前
歪麦霸王餐&元K(才盛云)签订战略合作
大数据·人工智能·物联网·自助ktv系统·才盛云
峥嵘life4 小时前
Android EDLA CTS、GTS等各项测试命令汇总
android·学习·elasticsearch
WZgold1414 小时前
黄金突然跳水!是技术调整还是趋势反转?
大数据·经验分享
开源能源管理系统5 小时前
开源筑基,智领零碳:MyEMS 赋能零碳工厂全周期转型新实践
大数据·开源·能源·能源管理系统·零碳工厂
金融小师妹5 小时前
AI算法与多因子模型驱动:金价获利了结涌现后的高位下跌态势
大数据·人工智能·深度学习·机器学习
samFuB5 小时前
【数据集】上市公司-客户及供应商集中度数据(2000-2024年)
大数据
说私域5 小时前
微商企业未来迭代的核心方向与多元探索——以链动2+1模式AI智能名片商城小程序为核心支撑
大数据·人工智能·小程序·流量运营·私域运营