Elasticsearch 作为最流行的开源搜索引擎,在大数据搜索和日志分析领域广泛应用。结合 Docker,我们可以快速部署和管理 Elasticsearch 集群。本文将详细介绍如何使用 Docker 安装和配置 Elasticsearch。
目录
-
Elasticsearch 简介
-
环境准备
-
单节点安装
-
配置参数详解
-
数据持久化
-
集群部署
-
安全配置
-
Kibana 集成
-
常用操作
-
故障排查
Elasticsearch 简介
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,具有以下特点:
-
实时搜索和分析
-
分布式架构
-
支持多租户
-
RESTful API
-
支持结构化、非结构化数据
环境准备
系统要求
-
Docker 20.10+
-
至少 4GB 内存
-
2核 CPU
-
20GB 磁盘空间
安装 Docker
bash
# Ubuntu/Debian sudo apt update sudo apt install docker.io # CentOS/RHEL sudo yum install docker # 启动 Docker sudo systemctl start docker sudo systemctl enable docker # 验证安装 docker --version
单节点安装
快速启动
bash
# 拉取最新镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.0 # 简单运行 docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=false" \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
验证安装
bash
# 检查服务状态
curl -X GET "localhost:9200/"
# 预期输出
{
"name" : "node-1",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "abcd1234",
"version" : {
"number" : "8.11.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "abcdef123456",
"build_date" : "2023-01-01T00:00:00.000Z",
"build_snapshot" : false,
"lucene_version" : "9.8.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
配置参数详解
基础配置
bash
docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \ -e "cluster.name=my-elasticsearch-cluster" \ -e "node.name=node-1" \ -e "network.host=0.0.0.0" \ -e "http.cors.enabled=true" \ -e "http.cors.allow-origin=*" \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
环境变量说明
-
discovery.type=single-node:单节点模式 -
ES_JAVA_OPTS:JVM 内存设置 -
cluster.name:集群名称 -
node.name:节点名称 -
network.host:网络绑定地址 -
http.cors.enabled:跨域访问支持
数据持久化
使用数据卷
bash
# 创建数据卷 docker volume create es-data # 运行容器并挂载数据卷 docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=false" \ -v es-data:/usr/share/elasticsearch/data \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
使用宿主机目录
bash
# 创建本地目录
mkdir -p /docker/elasticsearch/{data,logs,config}
# 设置目录权限(重要!)
chmod -R 777 /docker/elasticsearch/
# 运行容器
docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-v /docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
docker.elastic.co/elasticsearch/elasticsearch:8.11.0
使用自定义配置文件
创建配置文件
yaml
# elasticsearch.yml cluster.name: "docker-cluster" network.host: 0.0.0.0 # 单节点配置 discovery.type: single-node # 跨域配置 http.cors.enabled: true http.cors.allow-origin: "*" # 内存设置 bootstrap.memory_lock: false # 安全配置(生产环境建议开启) xpack.security.enabled: false
运行容器
bash
docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -v /docker/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /docker/elasticsearch/data:/usr/share/elasticsearch/data \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
集群部署
使用 Docker Compose
创建 docker-compose.yml 文件:
yaml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- cluster.name=docker-cluster
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es-data:/usr/share/elasticsearch/data
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- "9200:9200"
- "9300:9300"
networks:
- es-net
volumes:
es-data:
driver: local
networks:
es-net:
driver: bridge
启动集群服务
bash
# 启动服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f elasticsearch
安全配置
启用安全功能
bash
# 运行带有安全配置的容器 docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=true" \ -e "ELASTIC_PASSWORD=your_secure_password" \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
使用安全连接
bash
# 使用密码访问 curl -u elastic:your_secure_password "localhost:9200/" # 或使用 API Key curl -H "Authorization: ApiKey your_api_key" "localhost:9200/"
Kibana 集成
安装 Kibana
bash
# 拉取 Kibana 镜像 docker pull docker.elastic.co/kibana/kibana:8.11.0 # 运行 Kibana docker run -d --name kibana \ -p 5601:5601 \ -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \ --link elasticsearch:elasticsearch \ docker.elastic.co/kibana/kibana:8.11.0
完整的 Docker Compose 配置
yaml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es-data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- elk-network
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elk-network
volumes:
es-data:
driver: local
networks:
elk-network:
driver: bridge
常用操作
容器管理命令
bash
# 启动容器 docker start elasticsearch # 停止容器 docker stop elasticsearch # 重启容器 docker restart elasticsearch # 查看日志 docker logs -f elasticsearch # 进入容器 docker exec -it elasticsearch /bin/bash # 查看资源使用 docker stats elasticsearch
Elasticsearch 基本操作
bash
# 检查集群健康状态
curl -X GET "localhost:9200/_cluster/health?pretty"
# 查看节点信息
curl -X GET "localhost:9200/_cat/nodes?v"
# 查看索引
curl -X GET "localhost:9200/_cat/indices?v"
# 创建索引
curl -X PUT "localhost:9200/my-index?pretty"
# 插入文档
curl -X POST "localhost:9200/my-index/_doc" \
-H 'Content-Type: application/json' \
-d '{
"title": "测试文档",
"content": "这是一个测试文档的内容",
"timestamp": "2023-01-01"
}'
# 搜索文档
curl -X GET "localhost:9200/my-index/_search?q=测试&pretty"
备份和恢复
bash
# 创建快照仓库
curl -X PUT "localhost:9200/_snapshot/my_backup" \
-H 'Content-Type: application/json' \
-d '{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/backups"
}
}'
# 创建快照
curl -X PUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true"
# 恢复快照
curl -X POST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore"
性能优化
JVM 内存设置
bash
docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \ -e "bootstrap.memory_lock=true" \ --ulimit memlock=-1:-1 \ docker.elastic.co/elasticsearch/elasticsearch:8.11.0
生产环境配置
yaml
# elasticsearch.yml 生产配置
cluster.name: production-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0
http.port: 9200
# 发现设置
discovery.seed_hosts: []
discovery.type: single-node
# 内存设置
bootstrap.memory_lock: true
# 网关设置
gateway.recover_after_nodes: 1
# 各种超时设置
action.destructive_requires_name: true
# 安全设置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
故障排查
常见问题解决
1. 内存不足
bash
# 查看系统内存 free -h # 调整 JVM 内存 -e "ES_JAVA_OPTS=-Xms2g -Xmx2g"
2. 权限问题
bash
# 修复数据目录权限 chown -R 1000:1000 /docker/elasticsearch/data chmod -R 755 /docker/elasticsearch/data
3. 启动失败
bash
# 查看详细日志 docker logs elasticsearch # 检查系统资源 docker system df docker system prune # 清理无用资源
4. 连接被拒绝
bash
# 检查端口是否开放 netstat -tulpn | grep 9200 # 检查防火墙设置 sudo ufw status
健康检查
bash
# 健康状态API curl -X GET "localhost:9200/_cluster/health?pretty" # 节点状态 curl -X GET "localhost:9200/_cat/health?v" # 磁盘使用情况 curl -X GET "localhost:9200/_cat/allocation?v"
监控和维护
使用 Elasticsearch API 监控
bash
# 集群状态 curl -s "localhost:9200/_cluster/stats?pretty" | jq . # 节点状态 curl -s "localhost:9200/_nodes/stats?pretty" | jq . # 索引状态 curl -s "localhost:9200/_stats?pretty" | jq .
定期维护任务
bash
# 清理旧索引(保留最近30天) curl -X DELETE "localhost:9200/logstash-$(date -d '30 days ago' +%Y.%m.%d)" # 优化索引 curl -X POST "localhost:9200/my-index/_forcemerge?max_num_segments=1" # 刷新索引 curl -X POST "localhost:9200/my-index/_refresh"
总结
通过 Docker 部署 Elasticsearch 提供了便捷的部署和管理方式。本文涵盖了从基础安装到生产环境配置的完整流程,包括:
-
✅ 单节点和集群部署
-
✅ 数据持久化配置
-
✅ 安全设置
-
✅ 性能优化
-
✅ 监控维护
-
✅ 故障排查
使用 Docker 部署 Elasticsearch 可以快速搭建搜索和分析平台,为应用程序提供强大的全文搜索能力。记得在生产环境中要特别注意安全配置、数据备份和性能监控。
1733

被折叠的 条评论
为什么被折叠?



