Elasticsearch 安装部署
Elasticsearch 单机安装、目录规划、系统参数、基础配置、systemd 管理、安全口令和连通性验证。
Elasticsearch 安装部署
本文档介绍 Elasticsearch 在 Linux 环境中的单机安装和基础部署规范。生产环境建议优先使用官方 RPM / Debian 软件包,离线交付或固定目录部署时可以使用官方 tar 包。
安装方式选择
| 方式 | 适用场景 | 优点 | 注意事项 |
|---|---|---|---|
| RPM / Debian 包 | 生产环境、系统服务托管 | 自动创建用户、目录和 systemd 服务 | 目录遵循发行包规范 |
| tar 包 | 离线部署、固定目录交付、非 root 用户运行 | 目录清晰、升级可控 | 需要手动创建用户、目录和 systemd |
| Docker | 开发测试、容器平台 | 启动快、环境一致 | 生产要规划持久化、内核参数和资源限制 |
部署规划
| 项目 | 示例值 | 说明 |
|---|---|---|
| 安装目录 | /usr/share/elasticsearch 或 /data/app/elasticsearch/current | RPM / Debian 包和 tar 包路径不同 |
| 配置目录 | /etc/elasticsearch 或 /data/elasticsearch/config | elasticsearch.yml、证书、jvm 配置 |
| 数据目录 | /data/elasticsearch/data | 索引分片数据 |
| 日志目录 | /data/elasticsearch/logs | 服务日志、慢日志 |
| 运行用户 | elasticsearch | 不使用 root 运行 |
| HTTP 端口 | 9200 | REST 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/elasticsearch | RPM 环境变量 |
/usr/lib/systemd/system/elasticsearch.service | systemd 服务 |
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/elasticsearch | Debian 环境变量 |
/usr/lib/systemd/system/elasticsearch.service | systemd 服务 |
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_nodes、discovery.seed_hosts,并保证节点间 9300 端口互通。
官方参考
- https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-with-rpm
- https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package
- https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-from-archive-on-linux-macos
- https://www.elastic.co/docs/deploy-manage/deploy/self-managed/important-system-configuration