目录
前言
环境准备
系统要求
检查系统环境
内存要求说明
系统内核参数优化
修改虚拟内存参数
修改文件描述符限制
禁用swap(推荐)
创建数据目录
创建目录结构
拉取Elasticsearch镜像
查看可用版本
拉取官方镜像
单节点安装
基本启动命令
参数详细说明
验证容器启动
开放防火墙端口
测试Elasticsearch连接
安装Kibana管理界面
拉取Kibana镜像
启动Kibana容器
参数说明
开放Kibana端口
访问Kibana界面
验证安装
检查所有容器状态
测试Elasticsearch功能
1. 创建索引
2. 添加文档
3. 搜索文档
在Kibana中验证
基本配置和使用
创建自定义配置文件
Elasticsearch配置
使用自定义配置重启
常用API操作
集群管理
索引管理
集群部署
创建Docker网络
启动第一个节点(主节点)
启动数据节点
验证集群状态
性能优化
JVM内存优化
磁盘I/O优化
网络优化
索引优化设置
常用操作命令
容器管理
日志管理
数据备份和恢复
监控命令
故障排除
常见问题及解决方案
1. 容器启动失败
2. 内存不足问题
3. 磁盘空间不足
4. 网络连接问题
5. Kibana连接失败
6. 集群脑裂问题
7. 性能问题
安全配置
启用基本安全功能
创建用户和角色
配置Kibana使用认证
总结
🎉 完成的工作
🔑 关键要点回顾
🚀 下一步建议
📋 快速参考
🛠️ 常用维护命令
前言
Elasticsearch是一个基于Apache Lucene的开源搜索引擎,提供分布式、多租户能力的全文搜索引擎。它广泛应用于日志分析、全文搜索、数据分析等场景。本教程将手把手教你在CentOS7系统上使用Docker安装Elasticsearch,包括单节点和集群的完整搭建过程。
环境准备
系统要求
CentOS7系统
Docker已安装并启动
至少4GB内存(推荐8GB以上)
至少20GB磁盘空间
CPU:2核心以上
检查系统环境
# 检查系统版本
cat /etc/redhat-release
# 检查内存大小
free -h
# 检查磁盘空间
df -h
# 检查CPU核心数
nproc
# 检查Docker状态
docker version
sudo systemctl status docker
内存要求说明
Elasticsearch是内存密集型应用,建议配置:
开发环境:最少2GB内存
测试环境:建议4GB内存
生产环境:建议8GB以上内存
系统内核参数优化
Elasticsearch对系统参数有特殊要求,必须先优化系统参数才能正常运行。
修改虚拟内存参数
# 临时修改(重启后失效)
sudo sysctl -w vm.max_map_count=262144
# 永久修改
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf
# 重新加载配置
sudo sysctl -p
# 验证修改是否生效
sysctl vm.max_map_count
为什么要修改vm.max_map_count?
Elasticsearch使用大量的内存映射文件,默认的65530太小,会导致启动失败。262144是推荐的生产环境值。
修改文件描述符限制
# 查看当前限制
ulimit -n
# 临时修改(当前会话有效)
ulimit -n 65536
# 永久修改 - 编辑limits.conf
sudo vi /etc/security/limits.conf
在文件末尾添加以下内容:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# 重新登录或重启系统使配置生效
# 验证修改
ulimit -n
禁用swap(推荐)
# 查看当前swap状态
sudo swapon --show
# 临时禁用swap
sudo swapoff -a
# 永久禁用swap - 注释掉swap行
sudo vi /etc/fstab
# 找到包含swap的行,在前面加上#注释掉
# 验证swap已禁用
free -h
为什么要禁用swap?
Elasticsearch性能对内存访问速度非常敏感,使用swap会严重影响性能。
创建数据目录
创建目录结构
# 创建Elasticsearch根目录
sudo mkdir -p /home/elasticsearch
# 创建数据目录
sudo mkdir -p /home/elasticsearch/data
# 创建日志目录
sudo mkdir -p /home/elasticsearch/logs
# 创建配置目录
sudo mkdir -p /home/elasticsearch/config
# 创建Kibana数据目录
sudo mkdir -p /home/kibana/data
# 设置目录权限(重要!)
sudo chmod -R 777 /home/elasticsearch
sudo chmod -R 777 /home/kibana
# 设置正确的所有者(Elasticsearch容器内用户UID是1000)
sudo chown -R 1000:1000 /home/elasticsearch
权限设置说明:
Elasticsearch Docker镜像内部使用UID 1000的用户运行,必须确保该用户对数据目录有读写权限。
拉取Elasticsearch镜像
查看可用版本
# 在Docker Hub查看Elasticsearch可用版本
docker search elasticsearch
# 访问官方仓库查看标签
# https://hub.docker.com/_/elasticsearch
拉取官方镜像
# 拉取最新稳定版本(推荐8.x系列)
docker pull elasticsearch:8.11.1
# 也可以拉取7.x版本(如果需要兼容性)
docker pull elasticsearch:7.17.15
# 查看已下载的镜像
docker images | grep elasticsearch
版本选择建议:
Elasticsearch 8.x:最新特性,默认启用安全功能
Elasticsearch 7.x:稳定版本,兼容性好
本教程主要使用8.11.1版本
单节点安装
基本启动命令
docker run -d
--name elasticsearch
--hostname es-node1
-p 9200:9200
-p 9300:9300
-v /home/elasticsearch/data:/usr/share/elasticsearch/data
-v /home/elasticsearch/logs:/usr/share/elasticsearch/logs
-e "discovery.type=single-node"
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g"
-e "xpack.security.enabled=false"
-e "xpack.security.http.ssl.enabled=false"
-e "xpack.security.transport.ssl.enabled=false"
elasticsearch:8.11.1
参数详细说明
| 参数 | 说明 |
|---|---|
--name elasticsearch |
容器名称 |
--hostname es-node1 |
设置主机名 |
-p 9200:9200 |
HTTP端口映射(REST API) |
-p 9300:9300 |
传输端口映射(节点间通信) |
-v /home/elasticsearch/data:/usr/share/elasticsearch/data |
数据目录挂载 |
-v /home/elasticsearch/logs:/usr/share/elasticsearch/logs |
日志目录挂载 |
-e "discovery.type=single-node" |
单节点模式 |
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" |
JVM堆内存设置 |
-e "xpack.security.enabled=false" |
禁用安全功能(简化配置) |
验证容器启动
# 查看容器状态
docker ps | grep elasticsearch
# 查看容器详细信息
docker inspect elasticsearch
# 查看容器日志
docker logs elasticsearch
# 实时查看日志
docker logs -f elasticsearch
启动成功的日志应该包含:
[INFO ][o.e.n.Node] [es-node1] started
[INFO ][o.e.l.LicenseService] [es-node1] license [] - valid
开放防火墙端口
# 开放Elasticsearch HTTP端口
sudo firewall-cmd --permanent --add-port=9200/tcp
# 开放传输端口(集群需要)
sudo firewall-cmd --permanent --add-port=9300/tcp
# 重新加载防火墙
sudo firewall-cmd --reload
# 验证端口开放
sudo firewall-cmd --list-ports
测试Elasticsearch连接
# 测试HTTP连接
curl http://localhost:9200
# 如果返回类似以下JSON,说明启动成功:
# {
# "name" : "es-node1",
# "cluster_name" : "docker-cluster",
# "cluster_uuid" : "...",
# "version" : {
# "number" : "8.11.1"
# }
# }
# 查看集群健康状态
curl http://localhost:9200/_cluster/health
# 查看节点信息
curl http://localhost:9200/_nodes
安装Kibana管理界面
Kibana是Elasticsearch的可视化管理界面,提供数据查询、分析和管理功能。
拉取Kibana镜像
# 拉取与Elasticsearch相同版本的Kibana
docker pull kibana:8.11.1
# 查看镜像
docker images | grep kibana
启动Kibana容器
docker run -d
--name kibana
--hostname kibana-server
-p 5601:5601
-v /home/kibana/data:/usr/share/kibana/data
-e "ELASTICSEARCH_HOSTS=http://你的服务器IP:9200"
-e "SERVER_NAME=kibana-server"
-e "SERVER_HOST=0.0.0.0"
kibana:8.11.1
重要提醒: 请将
你的服务器IP替换为实际的服务器IP地址! 不要使用localhost或127.0.0.1,因为容器内部无法访问宿主机的localhost。
参数说明
| 参数 | 说明 |
|---|---|
-p 5601:5601 |
Kibana Web界面端口 |
-e "ELASTICSEARCH_HOST |






















暂无评论内容