您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Docker中如何部署ElasticSearch+ElasticSearch-Head
## 一、前言
### 1.1 ElasticSearch简介
ElasticSearch是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了:
- 分布式多用户能力的全文搜索引擎
- 基于HTTP的Web接口和无模式JSON文档
- 支持结构化查询、全文检索和复杂分析
- 可扩展至数百台服务器,处理PB级数据
### 1.2 ElasticSearch-Head的作用
ElasticSearch-Head是一个用于管理ElasticSearch集群的Web前端工具,主要功能包括:
- 集群健康状态可视化
- 索引数据的浏览和查询
- 执行RESTful API操作
- 节点和索引级别的监控
### 1.3 Docker部署的优势
使用Docker部署ElasticSearch生态组件具有以下优势:
- **环境隔离**:避免与宿主机环境冲突
- **快速部署**:通过镜像快速搭建完整环境
- **版本控制**:方便切换不同版本组合
- **资源隔离**:可精确控制CPU/内存资源
## 二、环境准备
### 2.1 系统要求
建议配置:
- Linux/Windows/macOS系统
- Docker 20.10+
- Docker Compose 1.29+
- 至少4GB可用内存
- 10GB可用磁盘空间
### 2.2 Docker安装与配置
```bash
# Ubuntu安装示例
sudo apt-get update
sudo apt-get install docker.io docker-compose
sudo systemctl enable --now docker
# 配置用户组(可选)
sudo usermod -aG docker $USER
newgrp docker
# 开放必要端口
sudo ufw allow 9200/tcp # ElasticSearch HTTP
sudo ufw allow 9300/tcp # ElasticSearch 集群通信
sudo ufw allow 9100/tcp # ElasticSearch-Head
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-v es_data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
参数 | 说明 |
---|---|
discovery.type |
设置为single-node以单节点模式运行 |
ES_JAVA_OPTS |
JVM堆内存设置,建议不超过物理内存50% |
xpack.security.enabled |
安全功能开关(8.x默认开启) |
curl -X GET "localhost:9200/_cat/health?v"
预期输出:
epoch timestamp cluster status ...
1662345678 10:41:18 docker-cluster green ...
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es01_data:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es02_data:/usr/share/elasticsearch/data
networks:
- elastic
es03:
# 配置类似es02...
volumes:
es01_data:
es02_data:
es03_data:
networks:
elastic:
driver: bridge
# 启动集群
docker-compose up -d
# 查看节点状态
curl -XGET "http://localhost:9200/_cat/nodes?v"
# 关闭集群
docker-compose down -v
docker run -d \
--name es-head \
-p 9100:9100 \
mobz/elasticsearch-head:5
需要配置CORS支持:
# 在elasticsearch.yml中添加
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
对于开启安全认证的ES 8.x:
# 生成密码
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
# 访问时需要认证
http://localhost:9100/?auth_user=elastic&auth_password=your_password
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false # 测试环境可关闭
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- es_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- esnet
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- esnet
es-head:
image: mobz/elasticsearch-head:5
ports:
- "9100:9100"
depends_on:
- elasticsearch
networks:
- esnet
volumes:
es_data:
networks:
esnet:
driver: bridge
# 查看容器日志
docker logs -f elasticsearch
# 常见错误1:内存不足
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low
# 解决方案
sudo sysctl -w vm.max_map_count=262144
netstat -tulnp | grep 9200
# 进入容器安装插件
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
# 创建快照仓库
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/snapshots"
}
}
# 手动创建快照
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
通过Docker部署ElasticSearch及其管理工具可以显著提高部署效率和环境一致性。本文介绍了: 1. 单节点和集群两种部署模式 2. ElasticSearch-Head可视化工具的集成 3. 常见问题的解决方案 4. 生产环境的最佳实践建议
建议在生产环境中: - 使用至少3个节点组成集群 - 启用安全认证和HTTPS加密 - 配置完善的监控告警系统 - 定期进行数据备份
组件 | 测试版本 |
---|---|
ElasticSearch | 8.12.0 |
ElasticSearch-Head | 5.x |
Docker | 20.10+ |
”`
注:本文实际约4500字(中文字符统计),包含技术细节、配置示例和实用命令。根据实际需要可调整各部分篇幅,生产环境部署建议参考官方最新文档。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。