CentOS7 Docker安装Elasticsearch完整教程

目录

前言

环境准备

系统要求

检查系统环境

内存要求说明

系统内核参数优化

修改虚拟内存参数

修改文件描述符限制

禁用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
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容