欢迎光临
我们一直在努力

【ElasticSearch从入门到架构师】第2章:ES 环境搭建与可视化工具配置

一、单机版 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 绿色部署(推荐开发)
  • 下载安装包:后缀.ziphttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-windows-x86_64.zipElastic
  • 解压规则:路径不能含中文、空格,例:D:\\soft\\elasticsearch-8.15.0
  • 修改上面elasticsearch.yml、jvm.options配置
  • 启动:CMD/PowerShell 进入 bin 目录
  • cd D:\\soft\\elasticsearch-8.15.0\\bin
    .\\elasticsearch.bat

  • 验证:浏览器访问 http://127.0.0.1:9200,返回 json 即成功
  • 方式 2:MSI 安装成 Windows 系统服务(后台开机自启)
  • 下载 msi 安装包:elasticsearch-8.15.0-windows-x86_64.msi
  • 双击安装,向导:
  • 安装路径避开中文,勾选Install as a service(安装为系统服务)
  • 安全页勾选Disable security features(关闭 xpack 安全)
  • 安装完成自动启动,服务名Elasticsearch,可在服务面板启停
  • 三、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

    六、常见启动报错速查

  • Linux vm.max_map_count 过低:上文 sysctl 修改内核参数
  • Windows/Mac 闪退:修改 JVM 内存,调低 Xmx;路径含中文则换纯英文路径
  • 8.x 访问需要密码 /ssl:yml 关闭 xpack 安全三行配置
  • 外网无法访问 9200:network.host:0.0.0.0,防火墙放行 9200 端口
  • 二、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。


    四、生产环境关键优化(已内置)

  • ​restart: always​:服务器重启、容器崩溃自动恢复
  • ​discovery.type=single-node​:单机生产模式,不选节点
  • 持久化目录:数据存在宿主机当前目录 es-data,删容器不丢数据
  • 内存固定:-Xms2g -Xmx2g 避免抖动
  • 时区统一:Asia/Shanghai
  • 关闭安全认证:开发 / 内网生产环境更易用,公网生产建议开启账号密码

  • 五、内存建议(根据你的服务器配置)

    • 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 集群方案:

  • 单机伪集群(同一台机器开 3 个节点,测试 / 学习用)
  • 真实物理机集群(3 台独立服务器,生产环境标准方案)
  • 通用版本: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


    六、生产集群最佳实践

  • 3 个主节点(防止脑裂)
  • 数据节点与主节点分离(大型集群)
  • 副本数 1(production 必须设置)
  • 内存 Xms = Xmx,不超过 32G
  • 磁盘 SSD(ES 吃 IO)
  • 禁止公网直接暴露 9200,用 Nginx 代理 + 密码

  • 七、我可以继续为你提供

    你想要我继续提供以下生产级配套吗?

  • Kibana 连接集群
  • ES 集群开启密码认证 + HTTPS(安全加固)
  • ES 集群 Nginx 负载均衡
  • ES 分片策略 + 索引模板 + 冷热分离架构
  • 四、核心可视化工具:Kibana、Head、Cerebro 安装与使用

    最实用、无坑、直接复制运行的三大 ES 可视化工具:

  • Kibana(官方标配,Dev Tools 必用)
  • ElasticSearch-Head(第三方,数据 / 索引直观管理)
  • Cerebro(第三方,集群监控 / 分片运维神器)
  • 全部支持 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


    六、我可以为你提供

    你需要我继续提供:

  • Kibana 汉化
  • ES 开启密码后,Head / Cerebro 带账号密码连接
  • Cerebro 生产集群分片故障排查教程
  • Dev Tools 高频命令大全
  • 五、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/​​

    第八部分:生产安全优化要点

  • 禁止公网直接暴露 9200,Nginx 反向代理 + IP 白名单
  • elastic 超级用户密码复杂度≥16 位,定期轮换
  • 区分用户权限:开发只读账号、运维全量账号、业务写入账号
  • 证书定期续期,生产使用权威 CA 证书替换自签证书
  • 开启 API 密钥认证替代账号密码(ES8 支持 API Key 鉴权)
  • 六、环境常见报错解决:内存溢出、端口占用、跨域、权限不足

    一、内存溢出(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 启动

    赞(0)
    未经允许不得转载:171主机测评 » 【ElasticSearch从入门到架构师】第2章:ES 环境搭建与可视化工具配置
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址