跳到主要内容

Elasticsearch 安装配置

本章介绍如何安装和配置 Elasticsearch 及其配套工具 Kibana。

系统要求

硬件要求

资源最低要求推荐配置
CPU1 核2 核以上
内存2 GB8 GB 以上
磁盘10 GBSSD,50 GB 以上

软件要求

  • 操作系统:Linux、macOS、Windows
  • Java:Elasticsearch 8.x 内置 JDK,无需单独安装
  • 浏览器:用于访问 Kibana(Chrome、Firefox、Edge)

安装 Elasticsearch

使用 Docker 安装(推荐)

# 拉取 Elasticsearch 镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 创建网络
docker network create elastic

# 启动 Elasticsearch(单节点模式)
docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 启动成功后,会输出:
# ✅ Elasticsearch security features have been automatically configured!
# ✅ Password is: xxxxxxxxxx
# ✅ HTTP CA certificate: /usr/share/elasticsearch/config/certs/http_ca.crt

解释

  • --net elastic:创建专用网络,用于与其他 Elastic Stack 组件通信
  • -p 9200:9200:映射 HTTP API 端口
  • -m 1GB:限制内存使用(Docker Desktop 需要分配足够内存)

在 Linux 上安装

# 下载并安装 GPG 密钥
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

# 添加 APT 仓库
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

# 安装 Elasticsearch
sudo apt-get update && sudo apt-get install elasticsearch

# 启动服务
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

# 检查状态
sudo systemctl status elasticsearch

在 macOS 上安装(Homebrew)

# 添加 Elastic 仓库
brew tap elastic/tap

# 安装 Elasticsearch
brew install elastic/tap/elasticsearch-full

# 启动服务
brew services start elastic/tap/elasticsearch-full

# 或前台运行
elasticsearch

在 Windows 上安装

# 使用 Chocolatey 安装
choco install elasticsearch

# 或下载 ZIP 包手动安装
# 1. 下载:https://www.elastic.co/downloads/elasticsearch
# 2. 解压到指定目录
# 3. 运行 bin\elasticsearch.bat

安装 Kibana

Kibana 是 Elasticsearch 的可视化工具,提供数据探索、仪表盘等功能。

使用 Docker 安装

# 拉取 Kibana 镜像
docker pull docker.elastic.co/kibana/kibana:8.12.0

# 启动 Kibana
docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.0

Linux/macOS 安装

# Linux
sudo apt-get install kibana
sudo systemctl start kibana

# macOS
brew install elastic/tap/kibana-full
brew services start elastic/tap/kibana-full

验证安装

检查 Elasticsearch 状态

# 使用 curl 访问(需要用户名密码)
curl -k -u elastic:your_password https://localhost:9200

# 响应示例
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "xxx",
"version" : {
"number" : "8.12.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "xxx",
"build_date" : "2024-01-01T00:00:00.000000000Z",
"lucene_version" : "9.8.0"
},
"tagline" : "You Know, for Search"
}

解释

  • -k:忽略 SSL 证书验证(自签名证书)
  • -u elastic:password:使用基本认证
  • 返回 JSON 格式的集群信息表示安装成功

检查集群健康状态

curl -k -u elastic:your_password https://localhost:9200/_cluster/health?pretty

# 响应示例
{
"cluster_name" : "elasticsearch",
"status" : "green", # green=健康, yellow=警告, red=错误
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0
}

访问 Kibana

  1. 打开浏览器访问 http://localhost:5601
  2. 输入 Elasticsearch 生成的 enrollment token
  3. 使用 elastic 用户和密码登录

基本配置

配置文件位置

  • Elasticsearchconfig/elasticsearch.yml
  • JVM 配置config/jvm.options
  • Kibanaconfig/kibana.yml

Elasticsearch 配置

# config/elasticsearch.yml

# 集群名称
cluster.name: my-application

# 节点名称
node.name: node-1

# 数据和日志目录
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

# 网络配置
network.host: 0.0.0.0
http.port: 9200

# 发现配置(单节点)
discovery.type: single-node

# 安全配置(生产环境必须开启)
xpack.security.enabled: true

# 跨域配置(允许 Kibana 连接)
http.cors.enabled: true
http.cors.allow-origin: "*"

JVM 配置

# config/jvm.options

# 堆内存大小(建议设置为物理内存的 50%,不超过 32GB)
-Xms4g
-Xmx4g

# GC 日志
-XX:+UseG1GC

解释

  • 堆内存太小会影响性能,太大会导致 GC 暂停过长
  • 不要超过物理内存的 50%,剩余内存留给文件系统缓存
  • 不要超过 32GB,否则会禁用压缩指针

Kibana 配置

# config/kibana.yml

# 服务端口
server.port: 5601

# 服务主机
server.host: "0.0.0.0"

# Elasticsearch 地址
elasticsearch.hosts: ["https://localhost:9200"]

# Elasticsearch 用户名密码
elasticsearch.username: "kibana_system"
elasticsearch.password: "your_password"

# 中文界面
i18n.locale: "zh-CN"

安全配置

Elasticsearch 8.x 默认开启安全功能,包括:

  • 认证:用户名密码认证
  • 授权:基于角色的访问控制
  • 加密:TLS/SSL 加密通信

重置密码

# 在 Elasticsearch 容器内或安装目录执行
bin/elasticsearch-reset-password -u elastic

# 输出新的密码

创建用户

# 创建用户
bin/elasticsearch-users useradd zhangsan -p password -r superuser

# 查看用户
bin/elasticsearch-users list

# 删除用户
bin/elasticsearch-users userdel zhangsan

Docker Compose 一键部署

创建 docker-compose.yml

version: '3.8'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false # 开发环境可关闭安全
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
networks:
- elastic

kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- I18N_LOCALE=zh-CN
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elastic

volumes:
es_data:
driver: local

networks:
elastic:
driver: bridge

启动服务:

# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止
docker-compose down

常见问题

1. 内存不足

错误:Java heap space

解决:增加堆内存或减少分片数量:

# jvm.options
-Xms2g
-Xmx2g

2. 虚拟内存不足

错误:max virtual memory areas vm.max_map_count [65530] is too low

解决:增加虚拟内存限制:

# Linux
sudo sysctl -w vm.max_map_count=262144

# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

3. 启动超时

错误:Elasticsearch did not exit normally

解决:检查日志文件,通常位于 /var/log/elasticsearch/ 目录。

小结

本章我们学习了:

  1. Elasticsearch 和 Kibana 的安装方法
  2. 使用 Docker 快速部署
  3. 基本配置和 JVM 调优
  4. 安全配置和用户管理
  5. Docker Compose 一键部署
  6. 常见问题排查

练习

  1. 使用 Docker 安装 Elasticsearch 8.x 和 Kibana
  2. 使用 curl 验证 Elasticsearch 是否正常运行
  3. 访问 Kibana 并创建第一个索引
  4. 配置 JVM 堆内存为 2GB

参考资源