Elasticsearch 8.14.3 完整部署方案

jupiter
2026-06-03 / 0 评论 / 1 阅读 / 正在检测是否收录...

一、环境规划

项目
运行用户app
JDK 安装路径/data/app/jdk17
ES 安装路径/data/app/es-server
ES 数据目录/data/app/es-data
ES 日志目录/data/app/es-logs
ES 配置目录/data/app/es-server/config
证书目录/data/app/es-server/config/certs
服务端口9200 (HTTPS)
集群模式单节点

二、完整部署命令

2.1 创建 app 用户和基础目录

# 创建 app 用户
sudo useradd app -m -s /bin/bash

# 创建安装根目录并授权
sudo mkdir -p /data/app
sudo chown app:app /data/app

2.2 安装 JDK 17

# 切换到 app 用户
sudo -i -u app

# 进入安装目录
cd /data/app

# 下载 JDK 17
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz

# 解压
tar xzvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz

# 重命名目录
mv jdk-17.0.19+10/ jdk17

# 清理安装包
rm -f OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz

# 配置环境变量
echo 'export JAVA_HOME=/data/app/jdk17' >> /home/app/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /home/app/.bashrc
source /home/app/.bashrc

# 验证 JDK
java -version

2.3 安装 Elasticsearch

# 仍在 app 用户下执行
cd /data/app

# 下载 ES 8.14.3
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-linux-x86_64.tar.gz

# 解压
tar xzvf elasticsearch-8.14.3-linux-x86_64.tar.gz

# 重命名
mv elasticsearch-8.14.3 es-server

# 清理安装包
rm -f elasticsearch-8.14.3-linux-x86_64.tar.gz

# 创建数据和日志目录
mkdir -p /data/app/es-data
mkdir -p /data/app/es-logs

2.4 生成 SSL 证书(开启安全认证必需)

# 仍在 app 用户下执行
cd /data/app/es-server

# 生成 CA 证书(直接回车,不设密码)
./bin/elasticsearch-certutil ca

# 生成节点证书(直接回车,不设密码)
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

# 创建证书目录并移动证书
mkdir -p config/certs
mv elastic-certificates.p12 config/certs/
mv elastic-stack-ca.p12 config/certs/

# 设置证书权限
chmod 644 config/certs/elastic-certificates.p12

2.5 配置 Elasticsearch

# 备份原配置
cp /data/app/es-server/config/elasticsearch.yml /data/app/es-server/config/elasticsearch.yml.bak

# 写入新配置
cat > /data/app/es-server/config/elasticsearch.yml << 'EOF'
# ======================== 路径配置 ========================
path.data: /data/app/es-data
path.logs: /data/app/es-logs

# ======================== 集群配置 ========================
cluster.name: my-app-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node

# ======================== 安全认证配置 ========================
# 开启安全功能
xpack.security.enabled: true

# 传输层 SSL 配置(节点间通信)
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

# HTTP 层 SSL 配置(开启 HTTPS)
xpack.security.http.ssl.enabled: false
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
EOF

2.6 配置 JVM 堆内存(可选,根据服务器内存调整)

# 设置堆内存为 1G(根据实际情况调整)
sed -i 's/^-Xms.*/-Xms1g/' /data/app/es-server/config/jvm.options
sed -i 's/^-Xmx.*/-Xmx1g/' /data/app/es-server/config/jvm.options

2.7 退出 app 用户,配置系统参数

# 退出 app 用户
exit
# 配置文件描述符限制
echo "app soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "app hard nofile 65535" | sudo tee -a /etc/security/limits.conf

# 配置虚拟内存映射数
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 配置进程限制
echo "app soft nproc 4096" | sudo tee -a /etc/security/limits.conf
echo "app hard nproc 4096" | sudo tee -a /etc/security/limits.conf

2.8 创建 Systemd 服务文件

sudo cat > /etc/systemd/system/elasticsearch.service << 'EOF'
[Unit]
Description=Elasticsearch Server
Documentation=https://www.elastic.co
After=network.target

[Service]
Type=simple
User=app
Group=app
WorkingDirectory=/data/app/es-server
Environment=JAVA_HOME=/data/app/jdk17
Environment=ES_PATH_CONF=/data/app/es-server/config
ExecStart=/data/app/es-server/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
LimitNOFILE=65535
LimitNPROC=4096
TimeoutStopSec=20
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

2.9 设置目录权限并启动服务

# 确保所有目录属主为 app
sudo chown -R app:app /data/app

# 重载 systemd
sudo systemctl daemon-reload

# 启动 Elasticsearch
sudo systemctl start elasticsearch

# 查看启动状态(等待 10-20 秒让服务完全启动)
sleep 15
sudo systemctl status elasticsearch

2.10 设置内置用户密码

# 使用 auto 模式,自动生成随机密码
sudo -u app /data/app/es-server/bin/elasticsearch-setup-passwords auto --insecure

执行后,系统会提示输入以下用户的密码(请务必牢记):

用户说明密码建议
elastic超级管理员强密码
kibanaKibana 连接用强密码
logstash_systemLogstash 监控随机密码
beats_systemBeats 监控随机密码
apm_systemAPM 监控随机密码
remote_monitoring_user远程监控随机密码

2.11 开启防火墙端口

# 开放 9200 端口
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --reload

2.12 设置开机自启

sudo systemctl enable elasticsearch

三、验证部署

3.1 基础验证(HTTPS + 认证)

# 使用 elastic 用户和密码访问(-k 忽略自签名证书验证)
curl -u elastic:<你设置的密码> http://localhost:9200

预期输出

{
  "name" : "node-1",
  "cluster_name" : "my-app-cluster",
  "cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxx",
  "version" : {
    "number" : "8.14.3",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d55f984299e0e88dee72ebd8255f7ff130859ad0",
    "build_date" : "2024-07-07T22:04:49.882652950Z",
    "build_snapshot" : false,
    "lucene_version" : "9.10.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

3.2 查看集群健康状态

curl -k -u elastic:<密码> https://localhost:9200/_cluster/health?pretty

3.3 查看节点信息

curl -k -u elastic:<密码> https://localhost:9200/_cat/nodes?v

3.4 远程访问验证(从其他机器执行)

curl -k -u elastic:<密码> https://<服务器IP>:9200

四、日常管理命令

4.1 服务管理

# 启动
sudo systemctl start elasticsearch

# 停止
sudo systemctl stop elasticsearch

# 重启
sudo systemctl restart elasticsearch

# 查看状态
sudo systemctl status elasticsearch

# 查看日志
sudo journalctl -u elasticsearch -f

# 查看最近 100 行日志
sudo journalctl -u elasticsearch -n 100

4.2 密码管理

# 修改 elastic 用户密码
curl -k -u elastic:<旧密码> -X POST https://localhost:9200/_security/user/elastic/_password -H "Content-Type: application/json" -d '{"password":"<新密码>"}'

# 创建新用户
curl -k -u elastic:<密码> -X POST https://localhost:9200/_security/user/monitor -H "Content-Type: application/json" -d '{"password":"<密码>","roles":["monitoring_user"]}'

4.3 证书管理

# 查看证书信息
openssl pkcs12 -info -in /data/app/es-server/config/certs/elastic-certificates.p12 -nokeys

五、目录结构总览

/data/app/
├── jdk17/                           # JDK 安装目录
│   ├── bin/
│   ├── lib/
│   └── ...
├── es-server/                       # ES 安装目录
│   ├── bin/                         # 可执行文件
│   ├── config/
│   │   ├── elasticsearch.yml        # 主配置文件
│   │   ├── jvm.options              # JVM 配置
│   │   └── certs/                   # SSL 证书目录
│   │       ├── elastic-certificates.p12
│   │       └── elastic-stack-ca.p12
│   ├── lib/                         # 依赖库
│   └── modules/                     # 模块
├── es-data/                         # 数据目录
│   └── nodes/                       # 节点数据
└── es-logs/                         # 日志目录
    └── elasticsearch.log            # 主日志文件

六、常见问题排查

问题检查命令解决方案
服务启动失败sudo systemctl status elasticsearch查看错误信息,检查配置文件语法
证书错误sudo journalctl -u elasticsearch -n 50确认证书路径正确,权限为 644
内存不足free -h调整 jvm.options 中的 -Xms-Xmx
端口被占用`sudo netstat -tlnpgrep 9200`修改 http.port 或停止占用进程
认证失败检查密码是否正确使用 elasticsearch-setup-passwords 重置
远程无法访问sudo firewall-cmd --list-all确认防火墙开放 9200 端口

七、安全建议(生产环境)

  1. 证书替换:自签名证书仅适用于测试环境,生产环境请使用 CA 签发的正式证书
  2. IP 绑定network.host: 0.0.0.0 允许所有 IP 访问,建议改为具体内网 IP
  3. 防火墙:仅允许可信 IP 访问 9200 端口
  4. 定期改密:定期更换 elastic 等内置用户密码
  5. 审计日志:开启审计功能 xpack.security.audit.enabled: true
  6. 备份:定期备份 /data/app/es-data 目录和证书文件
0

评论 (0)

打卡
取消