澳八机器人 从零部署 ES,核心就是搞定四个关键环节,每一步都有新人必踩的坑
从零部署 ES,核心就是搞定四个关键环节,每一步都有新人必踩的坑。以下综合多篇实战教程,按部署顺序整理:
---
第一步:环境准备
JDK 版本(ES 8.x 内置 JDK,可以不额外装,但要注意版本兼容)[citation:web:71.11]:
| ES 版本 | 推荐 JDK | 备注 |
|:-------|:---------|:----|
| 7.x | JDK 11(或自带JDK) | 7.8+ 内置 JDK |
| 8.x | JDK 17(内置) | 默认启用安全特性 |
内存:ES 启动默认占 1GB 堆内存,最低 2GB,生产环境推荐 16GB+。JVM 堆内存设为物理内存的 50%,且不超过 32GB[citation:web:71.1]。
---
第二步:Linux 环境必备配置(90% 新人卡在这里)
ES 禁止 root 用户直接启动,必须先创建普通用户[citation:web:71.7]:
创建 elastic 用户
useradd -m -s /bin/bash elastic
修改系统限制(/etc/security/limits.conf)
elastic soft nofile 65536
elastic hard nofile 65536
elastic soft nproc 4096
elastic hard nproc 4096
修改内核参数(/etc/sysctl.conf)
vm.maxmapcount = 262144
生效
sysctl -p
⚠️ 不配这两个参数,ES 启动直接报错退出的概率极高。maxmapcount 默认 65530,ES 需要 262144。
---
第三步:核心配置(elasticsearch.yml)
集群名
cluster.name: my-es-cluster
节点名
node.name: node-1
数据和日志路径
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
网络(生产环境不要用 0.0.0.0 裸奔)
network.host: 0.0.0.0
http.port: 9200
单节点模式(开发测试用,生产环境要配置集群发现)
discovery.type: single-node
JVM 配置(jvm.options):关键参数[citation:web:71.7]
-Xms4g # 堆初始大小
-Xmx4g # 堆最大大小(两者设成一致,避免运行时扩容抖动)
⚠️ -Xms 和 -Xmx 必须相等,否则 GC 时会触发堆扩容/缩容,导致性能抖动。
---
第四步:启动与验证
切换到 elastic 用户
su elastic
启动(前台,看日志)
./bin/elasticsearch
后台启动
./bin/elasticsearch -d -p pid
验证
curl http://localhost:9200
应该返回类似:
{
"name" : "node-1",
"cluster_name" : "my-es-cluster",
"cluster_uuid" : "...",
"version" : { "number" : "8.x" }
}
---
常见的坑
| 症状 | 原因 | 解决 |
|:----|:----|:----|
| max file descriptors 报错 | limits.conf 没配 | 加上 nofile 65536 |
| max virtual memory 报错 | vm.maxmapcount 太小 | sysctl -w vm.maxmapcount=262144 |
| can not run as root | ES 禁止 root 启动 | 创建 elastic 用户 |
| 启动闪退 / 没日志 | JVM 内存超了物理内存 | 检查 -Xmx 是否超过物理内存 50% |
| 远程连不上 9200 | network.host 没配 | 改为 0.0.0.0(注意安全) |
| 生产环境脑裂 | discovery 没配多节点 | 配置 discovery.seedhosts 和 cluster.initialmaster_nodes |
---
一句话
下载解压不叫部署,配好 maxmapcount、limits.conf、JVM 堆内存、非 root 用户这四样,ES 才算真正"站起来"了。