Elasticsearch 安装部署

Elasticsearch 单机安装、目录规划、系统参数、基础配置、systemd 管理、安全口令和连通性验证。

Elasticsearch 安装部署

本文档介绍 Elasticsearch 在 Linux 环境中的单机安装和基础部署规范。生产环境建议优先使用官方 RPM / Debian 软件包,离线交付或固定目录部署时可以使用官方 tar 包。

安装方式选择

方式适用场景优点注意事项
RPM / Debian 包生产环境、系统服务托管自动创建用户、目录和 systemd 服务目录遵循发行包规范
tar 包离线部署、固定目录交付、非 root 用户运行目录清晰、升级可控需要手动创建用户、目录和 systemd
Docker开发测试、容器平台启动快、环境一致生产要规划持久化、内核参数和资源限制

部署规划

项目示例值说明
安装目录/usr/share/elasticsearch/data/app/elasticsearch/currentRPM / Debian 包和 tar 包路径不同
配置目录/etc/elasticsearch/data/elasticsearch/configelasticsearch.yml、证书、jvm 配置
数据目录/data/elasticsearch/data索引分片数据
日志目录/data/elasticsearch/logs服务日志、慢日志
运行用户elasticsearch不使用 root 运行
HTTP 端口9200REST API 访问端口
Transport 端口9300节点间通信端口

系统参数准备

创建运行用户

如果使用 RPM / Debian 包安装,安装过程会自动创建 elasticsearch 用户。tar 包安装时需要手动创建:

groupadd elasticsearch
useradd -r -g elasticsearch -s /sbin/nologin elasticsearch

关闭 swap

临时关闭:

swapoff -a

永久关闭需要编辑 /etc/fstab,注释 swap 挂载行。

配置 vm.max_map_count

临时生效:

sysctl -w vm.max_map_count=262144

永久生效:

cat >/etc/sysctl.d/99-elasticsearch.conf <<'EOF'
vm.max_map_count=262144
EOF

sysctl --system

配置 limits

创建 /etc/security/limits.d/99-elasticsearch.conf

elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

如果使用 systemd 托管,还需要在服务文件中设置:

LimitNOFILE=65535
LimitNPROC=4096
LimitMEMLOCK=infinity

RPM 包安装

适用于 RHEL、CentOS、Rocky Linux、AlmaLinux 等发行版。

配置官方仓库

导入 GPG key:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

创建 /etc/yum.repos.d/elasticsearch.repo

[elasticsearch]
name=Elasticsearch repository for 9.x packages
baseurl=https://artifacts.elastic.co/packages/9.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装:

yum install -y elasticsearch
# 或 Rocky Linux / RHEL 8+:
dnf install -y elasticsearch

RPM 目录说明

路径说明
/usr/share/elasticsearch程序文件
/etc/elasticsearch配置文件
/var/lib/elasticsearch默认数据目录
/var/log/elasticsearch默认日志目录
/etc/sysconfig/elasticsearchRPM 环境变量
/usr/lib/systemd/system/elasticsearch.servicesystemd 服务

Debian 包安装

适用于 Debian、Ubuntu 等发行版。

配置官方仓库

安装依赖:

apt-get update
apt-get install -y apt-transport-https ca-certificates wget gnupg

导入 GPG key:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch \
  | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

创建仓库文件:

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" \
  >/etc/apt/sources.list.d/elastic-9.x.list

安装:

apt-get update
apt-get install -y elasticsearch

Debian 目录说明

路径说明
/usr/share/elasticsearch程序文件
/etc/elasticsearch配置文件
/var/lib/elasticsearch默认数据目录
/var/log/elasticsearch默认日志目录
/etc/default/elasticsearchDebian 环境变量
/usr/lib/systemd/system/elasticsearch.servicesystemd 服务

tar 包离线安装

tar 包适合固定目录、离线部署或不希望依赖系统包管理器的场景。

下载与解压

mkdir -p /data/app /data/elasticsearch/{data,logs,config}
cd /data/app

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.1.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.1.0-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-9.1.0-linux-x86_64.tar.gz.sha512

tar -xzf elasticsearch-9.1.0-linux-x86_64.tar.gz
ln -sfn /data/app/elasticsearch-9.1.0 /data/app/elasticsearch/current

授权目录

chown -R elasticsearch:elasticsearch /data/app/elasticsearch-9.1.0
chown -h elasticsearch:elasticsearch /data/app/elasticsearch/current
chown -R elasticsearch:elasticsearch /data/elasticsearch
chmod 750 /data/elasticsearch/{data,logs,config}

基础配置

RPM / Debian 包配置文件为 /etc/elasticsearch/elasticsearch.yml。tar 包可以使用安装目录下的 config/elasticsearch.yml,也可以将配置文件放到 /data/elasticsearch/config 并通过 ES_PATH_CONF 指定。

单节点配置示例

cluster.name: ops-es
node.name: es-01

path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs

network.host: 0.0.0.0
http.port: 9200

discovery.type: single-node

xpack.security.enabled: true

JVM 内存

创建 /etc/elasticsearch/jvm.options.d/heap.options(tar 包按实际配置目录创建):

-Xms2g
-Xmx2g

systemd 管理

RPM / Debian 包安装后已包含 systemd 服务,只需要重载并启动:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl status elasticsearch

tar 包安装可以创建 /etc/systemd/system/elasticsearch.service

[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
After=network.target

[Service]
Type=simple
User=elasticsearch
Group=elasticsearch
Environment=ES_HOME=/data/app/elasticsearch/current
Environment=ES_PATH_CONF=/data/elasticsearch/config
WorkingDirectory=/data/app/elasticsearch/current
ExecStart=/data/app/elasticsearch/current/bin/elasticsearch
Restart=on-failure
RestartSec=30
LimitNOFILE=65535
LimitNPROC=4096
LimitMEMLOCK=infinity
TimeoutStartSec=900

[Install]
WantedBy=multi-user.target

启动:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

安全口令

首次启动后,使用内置工具重置 elastic 用户密码:

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

tar 包部署时命令路径改为:

/data/app/elasticsearch/current/bin/elasticsearch-reset-password -u elastic

服务验证

查看服务状态:

systemctl status elasticsearch
journalctl -u elasticsearch -f

检查端口:

ss -lntp | grep -E '9200|9300'

访问健康状态:

curl -u elastic 'http://127.0.0.1:9200/'
curl -u elastic 'http://127.0.0.1:9200/_cluster/health?pretty'
curl -u elastic 'http://127.0.0.1:9200/_cat/nodes?v'

如果启用了 HTTPS,访问方式改为:

curl --cacert /etc/elasticsearch/certs/http_ca.crt \
  -u elastic 'https://127.0.0.1:9200/_cluster/health?pretty'

常见问题

max virtual memory areas vm.max_map_count is too low

原因是 vm.max_map_count 未配置或未生效。

sysctl vm.max_map_count
sysctl -w vm.max_map_count=262144

确认 /etc/sysctl.d/99-elasticsearch.conf 中已写入:

vm.max_map_count=262144

max file descriptors is too low

检查 systemd 限制:

systemctl show elasticsearch -p LimitNOFILE

如果值过低,检查服务文件或 override:

systemctl edit elasticsearch

写入:

[Service]
LimitNOFILE=65535

然后重载:

systemctl daemon-reload
systemctl restart elasticsearch

can not run elasticsearch as root

Elasticsearch 不允许使用 root 用户直接运行。使用 RPM / Debian 包安装时通过 systemd 启动即可;tar 包需要切换到专用用户:

sudo -u elasticsearch /data/app/elasticsearch/current/bin/elasticsearch

master not discovered yet

单节点部署确认已配置:

discovery.type: single-node

多节点集群需要配置 cluster.initial_master_nodesdiscovery.seed_hosts,并保证节点间 9300 端口互通。

官方参考