一、单机版 ES 部署(Windows/Linux/Mac 全平台)
环境前置说明:ES7.8+、ES8.x内置 OpenJDK,全平台无需手动装 JDK;单机核心配置:discovery.type=single-node(单节点模式,跳过集群校验)、关闭 Xpack 安全(开发用)、开放外网访问0.0.0.0;内存最低 2G 空闲,推荐 4G+,JVM 堆 Xms=Xmx,不超物理内存 50%。官网下载页:https://www.elastic.co/cn/downloads/elasticsearch
一、通用配置(3 个系统共用配置,修改config/elasticsearch.yml)
# 单机必配:单节点模式,不组建集群
discovery.type: single-node
# 节点名称
node.name: es-single
# 数据、日志存储目录(默认自动生成,可自定义)
path.data: ./data
path.logs: ./logs
# 开放所有IP访问(0.0.0.0=外网可连;127.0.0.1仅本机)
network.host: 0.0.0.0
# HTTP端口默认9200
http.port: 9200
# 关闭安全(8.x默认开启ssl+账号密码,单机开发关闭)
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.enrollment.enabled: false
JVM 内存配置(config/jvm.options)
- 本机 8G 内存:-Xms1g、-Xmx1g
- 本机 16G + 内存:-Xms2g、-Xmx2g
规则:Xms=Xmx,数值一致,不要超过机器物理内存一半
二、Windows 部署(zip 绿色免安装 + msi 安装服务两种方式)
方式 1:ZIP 绿色部署(推荐开发)
cd D:\\soft\\elasticsearch-8.15.0\\bin
.\\elasticsearch.bat
方式 2:MSI 安装成 Windows 系统服务(后台开机自启)
三、Linux 部署(CentOS/Ubuntu 通用|禁止 root 直接启动)
新建专用运行用户(ES 强制不能 root 启动)
# root执行创建用户
useradd esuser
passwd esuser
# 切换普通用户
su esuser
cd ~
下载 + 解压
# 下载tar.gz包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-linux-x86_64.tar.gz
# 解压
tar -zxvf elasticsearch-8.15.0-linux-x86_64.tar.gz
cd elasticsearch-8.15.0
若 root 解压,授权目录:chown -R esuser:esuser elasticsearch-8.15.0
系统内核参数修复(必改,否则启动报错 vm.max_map_count)
# root执行修改内核
vim /etc/sysctl.conf
# 添加一行
vm.max_map_count=262144
# 生效配置
sysctl -p
修改 yml、jvm 配置(同上文通用配置)
启停命令
# 前台启动(看日志)
./bin/elasticsearch
# 后台守护进程启动(-d后台,-p记录pid)
./bin/elasticsearch -d -p es.pid
# 停止
kill $(cat es.pid)
验证
curl http://127.0.0.1:9200
四、MacOS 部署(两种:压缩包手动装|Homebrew 一键装)
方式 1:tar.gz 压缩包部署(通用,Intel/M 系列芯片)
# 终端下载darwin包
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-darwin-x86_64.tar.gz
# 解压
tar -zxvf elasticsearch-8.15.0-darwin-x86_64.tar.gz
cd elasticsearch-8.15.0
修改config/elasticsearch.yml、jvm.options配置
# 前台启动
./bin/elasticsearch
# 后台启动
./bin/elasticsearch -d
M 系列 Mac 启动报错:系统设置→安全性与隐私→允许运行被拦截的程序
方式 2:Homebrew 一键安装(极简)
# 安装elastic源
brew tap elastic/tap
# 安装es
brew install elastic/tap/elasticsearch-full
# 启动/停止/查看状态
brew services start elastic/tap/elasticsearch-full
brew services stop elastic/tap/elasticsearch-full
验证:浏览器http://localhost:9200
五、一键 Docker 单机部署(全平台通用,最快)
Windows/Mac/Linux 装 Docker 后直接执行:
docker run -d \\
–name es-single \\
-p 9200:9200 -p 9300:9300 \\
-e discovery.type=single-node \\
-e xpack.security.enabled=false \\
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \\
docker.elastic.co/elasticsearch/elasticsearch:8.15.0
六、常见启动报错速查
二、Docker 一键部署 ES & Kibana(生产快速启动方案)
一套可直接复制运行、生产可用、无坑、全平台兼容的 docker-compose.yml,包含:
- ES 8.x 单节点生产配置
- Kibana 配套可视化
- 固定数据目录、日志目录、持久化
- 内存优化、安全关闭、端口映射
- 一键启动 / 停止 / 查看日志
一、最终可用 docker-compose.yml
创建一个空目录,新建文件:docker-compose.yml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: es-node
restart: always # 生产必开:开机自启、崩溃自动重启
ports:
– "9200:9200"
– "9300:9300"
environment:
– discovery.type=single-node # 单机模式
– xpack.security.enabled=false # 关闭安全认证(生产可开启)
– xpack.security.http.ssl.enabled=false # 关闭 SSL
– "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 堆内存(生产不超过 32G)
– TZ=Asia/Shanghai
volumes:
– ./es-data:/usr/share/elasticsearch/data
– ./es-logs:/usr/share/elasticsearch/logs
ulimits:
memlock:
soft: -1
hard: -1
networks:
– es-net
kibana:
image: docker.elastic.co/elasticsearch/kibana:8.15.0
container_name: kibana
restart: always
ports:
– "5601:5601"
environment:
– ELASTICSEARCH_HOSTS=http://es-node:9200
– TZ=Asia/Shanghai
depends_on:
– elasticsearch
networks:
– es-net
networks:
es-net:
driver: bridge
二、一键启动命令
在 docker-compose.yml 所在目录执行:
# 后台启动(推荐)
docker-compose up -d
# 查看启动日志
docker-compose logs -f
# 停止服务
docker-compose down
# 停止并删除数据(慎用)
docker-compose down -v
三、访问地址
- Elasticsearch:http://localhost:9200
- Kibana 控制台:http://localhost:5601
启动成功后,Kibana 会自动连接 ES。
四、生产环境关键优化(已内置)
五、内存建议(根据你的服务器配置)
- 2 核 4G 机器:-Xms1g -Xmx1g
- 4 核 8G 机器:-Xms2g -Xmx2g(推荐)
- 8 核 16G 机器:-Xms4g -Xmx4g
- 规则:Xms = Xmx,不超过服务器内存的 50%
六、公网生产环境安全增强(可选)
如果你需要开启账号密码,我可以给你一行命令开启 ES + Kibana 认证,并自动生成 elastic 密码。
总结
- 这是生产级单机 ES + Kibana 最快部署方案
- 全平台(Windows/Mac/Linux)Docker 通用
- 持久化、自启动、内存优化、端口齐全、无坑可直接上线
- 启动只需 1 条命令
三、多节点集群搭建(伪集群&真实物理集群)
两套最实用、无坑、可直接落地的 ES 集群方案:
通用版本:ES 7.x/ 8.x 通用(以 8.15.0 为例)集群规则:至少 3 个节点 才能选主,避免脑裂核心配置:cluster.name 所有节点必须一致;discovery.seed_hosts 填写节点地址;cluster.initial_master_nodes 填写候选主节点
一、核心概念(先看懂,不踩坑)
- cluster.name:集群名称,所有节点必须一样
- node.name:节点名,每个节点唯一
- node.roles:节点角色(master /data/ingest)
- discovery.seed_hosts:集群节点地址列表
- cluster.initial_master_nodes:初始化候选主节点
- 网络:9200 = HTTP 端口,9300 = 集群通信端口
二、方案 1:单机伪集群(同一台机器 3 节点|测试用)
适合:学习、测试、本地开发原理:同一台机器,运行 3 个 ES 实例,不同端口 + 不同数据目录推荐用 Docker Compose 一键启动(最简单)
一键 docker-compose.yml(3 节点伪集群)
version: '3.8'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: es01
environment:
– cluster.name=es-cluster
– node.name=es01
– node.roles=master,data,ingest
– discovery.seed_hosts=es02,es03
– cluster.initial_master_nodes=es01,es02,es03
– xpack.security.enabled=false
– xpack.security.http.ssl.enabled=false
– "ES_JAVA_OPTS=-Xms512m -Xmx512m"
– TZ=Asia/Shanghai
ports:
– "9200:9200"
– "9300:9300"
networks:
– es-net
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: es02
environment:
– cluster.name=es-cluster
– node.name=es02
– node.roles=master,data,ingest
– discovery.seed_hosts=es01,es03
– cluster.initial_master_nodes=es01,es02,es03
– xpack.security.enabled=false
– xpack.security.http.ssl.enabled=false
– "ES_JAVA_OPTS=-Xms512m -Xmx512m"
– TZ=Asia/Shanghai
ports:
– "9201:9200"
networks:
– es-net
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: es03
environment:
– cluster.name=es-cluster
– node.name=es03
– node.roles=master,data,ingest
– discovery.seed_hosts=es01,es02
– cluster.initial_master_nodes=es01,es02,es03
– xpack.security.enabled=false
– xpack.security.http.ssl.enabled=false
– "ES_JAVA_OPTS=-Xms512m -Xmx512m"
– TZ=Asia/Shanghai
ports:
– "9202:9200"
networks:
– es-net
kibana:
image: docker.elastic.co/elasticsearch/kibana:8.15.0
container_name: kibana
environment:
– ELASTICSEARCH_HOSTS=http://es01:9200
– TZ=Asia/Shanghai
ports:
– "5601:5601"
depends_on:
– es01
– es02
– es03
networks:
– es-net
networks:
es-net:
driver: bridge
启动命令
docker-compose up -d
验证集群
curl http://localhost:9200/_cluster/health?pretty
看到 "number_of_nodes" : 3 且 status: green 即成功
三、方案 2:真实物理机集群(3 台服务器|生产标准)
环境准备
- 3 台 Linux 服务器(CentOS / Ubuntu)
- 互相内网互通(9200、9300 端口开放)
- 关闭防火墙 / 开放端口
- 每台机器配置:至少 2 核 4G(生产 8 核 16G+)
服务器规划
表格 还在加载中,请等待加载完成后再尝试复制
四、真实集群部署步骤
每台机器执行:系统优化(必做)
# 修改内核参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
# 文件句柄数
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf
每台机器:安装 ES(8.15.0)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.15.0-linux-x86_64.tar.gz
mv elasticsearch-8.15.0 /usr/local/elasticsearch
cd /usr/local/elasticsearch
每台机器:修改 config/jvm.options
-Xms2g
-Xmx2g
每台机器:修改 config/elasticsearch.yml
节点 1(192.168.1.101)
cluster.name: es-cluster
node.name: es01
node.roles: [master, data, ingest]
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["es01", "es02", "es03"]
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
节点 2(192.168.1.102)
cluster.name: es-cluster
node.name: es02
node.roles: [master, data, ingest]
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["es01", "es02", "es03"]
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
节点 3(192.168.1.103)
cluster.name: es-cluster
node.name: es03
node.roles: [master, data, ingest]
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["es01", "es02", "es03"]
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
每台机器:启动 ES
# 创建用户
useradd esuser
chown -R esuser:esuser /usr/local/elasticsearch
# 启动
su – esuser
/usr/local/elasticsearch/bin/elasticsearch -d
集群状态检查
curl http://192.168.1.101:9200/_cluster/health?pretty
- status: green 健康
- number_of_nodes: 3
- number_of_data_nodes: 3
五、集群常用命令(必须收藏)
# 查看集群健康
GET /_cluster/health
# 查看所有节点
GET /_cat/nodes?v
# 查看索引
GET /_cat/indices?v
# 查看分片
GET /_cat/shards?v
# 查看集群设置
GET /_cluster/settings
六、生产集群最佳实践
七、我可以继续为你提供
你想要我继续提供以下生产级配套吗?
四、核心可视化工具:Kibana、Head、Cerebro 安装与使用
最实用、无坑、直接复制运行的三大 ES 可视化工具:
全部支持 Docker 一键启动,兼容 ES 7.x/ 8.x。
一、Kibana(官方首选)
Docker 一键启动
docker run -d \\
–name kibana \\
-p 5601:5601 \\
-e ELASTICSEARCH_HOSTS=http://你的ES地址:9200 \\
-e TZ=Asia/Shanghai \\
docker.elastic.co/elasticsearch/kibana:8.15.0
访问
http://localhost:5601
核心用途(必用)
- Dev Tools(控制台):执行 DSL 查询、集群命令
- 索引管理、数据搜索、可视化报表
- 监控集群状态
常用操作
- 左侧菜单 → Management → Dev Tools
- 测试命令:
GET /_cluster/health
二、ElasticSearch-Head(最直观的索引管理工具)
俗称 ES Head,最适合查看索引、分片、数据、增删改查索引。
Docker 一键启动
docker run -d \\
–name es-head \\
-p 9100:9100 \\
mobz/elasticsearch-head:5
访问
http://localhost:9100
连接 ES
在页面顶部输入框填写 ES 地址:
http://你的ES地址:9200
点击 Connect
解决 ES 跨域问题(ES 必须配置)
修改 elasticsearch.yml,添加:
http.cors.enabled: true
http.cors.allow-origin: "*"
重启 ES 即可连接。
核心功能
- 查看索引、文档数量
- 增删改索引
- 数据浏览、复合查询
- 分片状态展示
三、Cerebro(集群分片运维神器,生产必装)
比 Head 更专业,分片可视化、索引迁移、集群监控最强。
Docker 一键启动
docker run -d \\
–name cerebro \\
-p 9000:9000 \\
lmenezes/cerebro
访问
http://localhost:9000
连接 ES
输入:
http://你的ES地址:9200
核心功能(生产运维必备)
- 集群节点状态
- 分片分配可视化(红色 / 黄色分片一键解决)
- 索引设置、副本数调整
- 分片迁移、取消分配
- 集群性能监控
四、三大工具对比(快速选择)
表格 还在加载中,请等待加载完成后再尝试复制
五、一键启动所有三个工具(Docker Compose)
新建 docker-compose.yml:
version: '3.8'
services:
kibana:
image: docker.elastic.co/elasticsearch/kibana:8.15.0
ports:
– "5601:5601"
environment:
– ELASTICSEARCH_HOSTS=http://es地址:9200
– TZ=Asia/Shanghai
restart: always
es-head:
image: mobz/elasticsearch-head:5
ports:
– "9100:9100"
restart: always
cerebro:
image: lmenezes/cerebro
ports:
– "9000:9000"
restart: always
启动:
docker-compose up -d
六、我可以为你提供
你需要我继续提供:
五、ES8.x 安全认证配置(账号密码、HTTPS、访问权限)
ES8.x 全链路安全配置:账号密码 + 集群传输 TLS+HTTP-HTTPS+RBAC 权限管控(单机 / 集群通用,生产落地版)
ES8默认自动开启 Xpack 安全、TLS 加密,区别 ES7;分为三块:①内置账号初始化 ②证书 & HTTPS 全量配置(节点间传输加密 + 客户端 https 访问)③Kibana 对接安全 ④RBAC 自定义用户权限 ⑤Head/Cerebro 带密码连接 ES。环境:Linux Tar 包部署 ES8.x(8.10~8.15 通用),3 节点集群示例 IP:192.168.1.101/102/103
一、前置说明内置 5 个系统账号(ES 原生内置,不可删除)
表格 还在加载中,请等待加载完成后再尝试复制
第一部分:SSL 证书生成(集群 + HTTP 共用一套 CA,统一自签证书)
证书只在 ** 主节点 es01 (192.168.1.101)** 生成,之后把证书全量分发其余节点,路径统一:config/certs/
# 1.创建证书目录
cd /usr/local/elasticsearch/config
mkdir certs && cd certs
# 2.生成CA根证书(有效期10年,无密码,生产建议设置密码)
../bin/elasticsearch-certutil ca –out certs/elastic-stack-ca.p12 –pass "" –days 3650
# 3.生成集群节点间传输证书(transport.p12,节点通信9300加密)
../bin/elasticsearch-certutil cert –ca certs/elastic-stack-ca.p12 –ca-pass "" –out certs/transport.p12 –pass "" –name es-node
# 4.生成HTTP客户端证书http.p12(9200 HTTPS加密,Kibana/Head访问用)
../bin/elasticsearch-certutil http
交互式 http 证书生成选项(一路回车,关键配置)
Generate a CSR? [y/n] n
Use an existing CA? [y/n] y
CA Path: 填写全路径:/usr/local/elasticsearch/config/certs/elastic-stack-ca.p12
Password for CA: 回车(空密码)
For how long should your certificate be valid? [5y] 10y
Generate a certificate per node? n
Enter all the hostnames/ips(填集群所有IP):192.168.1.101,192.168.1.102,192.168.1.103,localhost
Do you want to change any of these options? [y/n] n
生成后解压 zip 包,取出http.p12放到certs/目录。
证书分发至另外 2 台节点
# 在es01执行,推送证书
scp -r certs root@192.168.1.102:/usr/local/elasticsearch/config/
scp -r certs root@192.168.1.103:/usr/local/elasticsearch/config/
# 所有节点修改证书权限
chown -R esuser:esuser /usr/local/elasticsearch/config/certs
chmod 644 /usr/local/elasticsearch/config/certs/*
第二部分:elasticsearch.yml 安全完整配置(全节点统一配置)
# 集群基础配置
cluster.name: es-cluster
node.name: es01 # 各节点改为es01/es02/es03
node.roles: [master,data,ingest]
network.host: 0.0.0.0
http.port:9200
discovery.seed_hosts: ["192.168.1.101","192.168.1.102","192.168.1.103"]
cluster.initial_master_nodes: ["es01","es02","es03"]
# ==========Xpack安全总开关==========
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# ==========1.节点间9300传输层TLS加密(集群内网通信加密,必开)==========
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/transport.p12
xpack.security.transport.ssl.truststore.path: certs/transport.p12
# ==========2.HTTP 9200开启HTTPS(客户端访问加密)==========
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/http.p12
# 客户端证书认证:optional可选(客户端可选携带证书,只用账号密码即可访问)
xpack.security.http.ssl.client_authentication: optional
若单机单节点,增加:discovery.type: single-node
第三部分:初始化内置用户密码(二选一)
方式 1:交互式手动设置(推荐,逐个自定义密码)
# 任意一个节点bin目录执行,所有内置账号逐个输入密码
./elasticsearch-setup-passwords interactive
依次设置:elastic、kibana_system、logstash_system、beats_system、remote_monitoring_user 密码,记录保存。
方式 2:自动随机生成密码(自动输出密码)
./elasticsearch-setup-passwords auto
单独重置某账号密码(忘记密码使用)
# 重置elastic超级管理员密码
./elasticsearch-reset-password -u elastic -i
# 重置kibana_system密码(Kibana连接ES必填)
./elasticsearch-reset-password -u kibana_system -i
验证 ES HTTPS + 密码生效
# https访问,账号elastic+密码
curl -u elastic:你的密码 https://192.168.1.101:9200 –insecure
# –insecure:忽略自签证书告警
返回集群信息即配置成功。
第四部分:Kibana 安全配置(Kibana 开启 HTTPS + 带密码对接 ES)
从 ES 节点拷贝 CA 证书 http_ca.crt 到 Kibana config/certs
# ES主机导出http_ca.crt,传到kibana服务器
scp root@192.168.1.101:/usr/local/elasticsearch/config/certs/http_ca.crt /usr/local/kibana/config/certs/
kibana.yml 完整配置
# Kibana服务配置
server.host: "0.0.0.0"
server.port:5601
# Kibana自身开启HTTPS(可选,生产必开)
server.ssl.enabled: true
server.ssl.certificate: config/certs/kibana.crt
server.ssl.key: config/certs/kibana.key
# ES连接配置(HTTPS+账号密码)
elasticsearch.hosts: ["https://192.168.1.101:9200","https://192.168.1.102:9200","https://192.168.1.103:9200"]
# kibana_system账号密码(第二步设置的密码)
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibana设置的密码"
# ES证书校验CA
elasticsearch.ssl.certificateAuthorities: [ "config/certs/http_ca.crt" ]
elasticsearch.ssl.verificationMode: certificate
# 汉化
i18n.locale: zh-CN
访问地址:https://IP:5601,使用elastic 账号密码登录 Kibana 前端
第五部分:RBAC 精细化权限管控(自定义用户 / 角色,生产多账号隔离)
核心逻辑:角色 (权限集合)→绑定用户,分集群权限 + 索引权限
常用权限关键字
- 集群权限:monitor(查看集群)、manage(集群配置)、cluster_all(全集群)
- 索引权限:read(只读)、write(写入)、delete(删除)、create_index(建索引)、all(索引全权限)
示例 1:创建只读角色 read-log(仅读取 log-* 索引,无集群修改权限)
# elastic账号调用API创建角色
curl -u elastic:密码 -XPOST https://192.168.1.101:9200/_security/role/read-log -H "Content-Type:application/json" -d '{
"cluster":["monitor"],
"indices":[{"names":["log-*"],"privileges":["read","view_index_metadata"]}]
}' –insecure
示例 2:创建用户 user01,绑定 read-log 角色
curl -u elastic:密码 -XPUT https://192.168.1.101:9200/_security/user/user01 -H "Content-Type:application/json" -d '{
"password":"Abc@123456",
"roles":["read-log"]
}' –insecure
user01 登录后只能查询 log – 开头索引,无法删改其他索引。
Kibana 可视化配置权限(图形化)
Stack 管理→安全→角色 / 用户,可视化创建角色、分配权限、创建用户,不用写 API。
第六部分:Head、Cerebro 带密码 + HTTPS 连接 ES
ES-Head 连接配置
访问http://IP:9100,连接地址填写格式:
https://elastic:密码@192.168.1.101:9200
ES 已开跨域(安全模式无需额外配置跨域,Xpack 自带鉴权)
Cerebro 连接配置
填写连接地址:
https://elastic:密码@192.168.1.101:9200
第七部分:Docker 一键安全集群补充(可选)
docker-compose 部署 ES 集群自动生成证书,环境变量开启安全:
environment:
– xpack.security.enabled=true
– xpack.security.http.ssl.enabled=true
容器内证书路径:/usr/share/elasticsearch/config/certs/
第八部分:生产安全优化要点
六、环境常见报错解决:内存溢出、端口占用、跨域、权限不足
一、内存溢出(OOM / Java heap space / 进程被杀死)
报错特征
Java heap space
max virtual memory areas vm.max_map_count [65530] is too low
max file descriptors [4096] for elasticsearch process is too low
根本原因
- JVM 堆内存给太小 / 太大
- 系统内核参数不满足 ES 要求
- 文件句柄数不足
终极解决方案
① 修改 JVM 内存(config/jvm.options)
# 推荐配置
-Xms2g
-Xmx2g
# 规则:
# 1. Xms = Xmx 必须相等
# 2. 不超过机器内存的 50%
# 3. 不超过 32G(超过会失效)
② Linux 必改内核参数(解决 vm.max_map_count 报错)
# root 执行
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
③ Linux 提高文件句柄数
vim /etc/security/limits.conf
# 添加 4 行
* soft nofile 65535
* hard nofile 65535
* soft memlock unlimited
* hard memlock unlimited
④ Windows 闪退 / 内存不足
- 解压路径不能有中文、空格
- 调低内存:-Xms1g -Xmx1g
- 管理员身份运行
二、端口占用(9200 / 9300 / 5601 被占用)
报错特征
bind to 0.0.0.0:9200 failed
Port already in use
快速解决(全平台杀进程命令)
Windows
# 查找占用 9200 进程
netstat -ano | findstr ":9200"
# 杀掉 PID
taskkill /F /PID 进程号
Linux/Mac
# 查找端口
lsof -i :9200
# 杀掉进程
kill -9 进程号
不杀进程 → 直接换端口(elasticsearch.yml)
http.port: 9201
transport.port: 9301
三、跨域问题(Head / Cerebro / 前端连接 ES 失败)
报错特征
No 'Access-Control-Allow-Origin' header
CORS error
Head 连接显示 集群健康值:未连接
100% 解决(elasticsearch.yml 添加两行)
# 开启跨域
http.cors.enabled: true
# 允许所有来源(生产可改为具体IP)
http.cors.allow-origin: "*"
重启 ES 生效
四、权限不足(Permission denied / 只能 root 启动)
报错特征
Permission denied
elasticsearch can not run as root
access denied (/data dir)
解决方案
① Linux 不能用 root 启动,必须建专用用户
# 创建用户
useradd esuser
# 授权目录
chown -R esuser:esuser /usr/local/elasticsearch
# 切换用户启动
su esuser
./bin/elasticsearch
② 文件 / 目录权限不足
chmod -R 755 你的ES目录
③ Windows 右键 → 以管理员身份运行
五、一键排查命令(收藏)
# 查看内存使用
GET /_nodes/jvm?pretty
# 查看端口监听
netstat -tulpn | grep java
# 查看集群健康
GET /_cluster/health
# 查看所有配置
GET /_cluster/settings
六、4 大报错总结
|
报错类型 |
关键解决 |
最快操作 |
|
内存溢出 |
修改 jvm.options + 内核参数 |
Xms=Xmx,不超 50% 内存 |
|
端口占用 |
杀进程 / 换端口 |
直接换 9201/9202 |
|
跨域失败 |
elastic.yml 开 cors |
加两行配置重启 |
|
权限不足 |
新建普通用户 + 授权目录 |
禁止 root 启动 |



