温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Docker中如何部署ElasticSearch+ElasticSearch-Head

发布时间:2021-11-18 16:15:38 来源:亿速云 阅读:398 作者:小新 栏目:云计算
# 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 

2.3 防火墙设置

# 开放必要端口 sudo ufw allow 9200/tcp # ElasticSearch HTTP sudo ufw allow 9300/tcp # ElasticSearch 集群通信 sudo ufw allow 9100/tcp # ElasticSearch-Head 

三、ElasticSearch单节点部署

3.1 拉取官方镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0 

3.2 单节点运行命令

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 

3.3 重要参数说明

参数 说明
discovery.type 设置为single-node以单节点模式运行
ES_JAVA_OPTS JVM堆内存设置,建议不超过物理内存50%
xpack.security.enabled 安全功能开关(8.x默认开启)

3.4 验证安装

curl -X GET "localhost:9200/_cat/health?v" 

预期输出:

epoch timestamp cluster status ... 1662345678 10:41:18 docker-cluster green ... 

四、ElasticSearch集群部署

4.1 docker-compose.yml示例

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 

4.2 集群启动与管理

# 启动集群 docker-compose up -d # 查看节点状态 curl -XGET "http://localhost:9200/_cat/nodes?v" # 关闭集群 docker-compose down -v 

五、ElasticSearch-Head部署

5.1 传统部署方式

docker run -d \ --name es-head \ -p 9100:9100 \ mobz/elasticsearch-head:5 

5.2 与ElasticSearch集成

需要配置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" 

5.3 安全配置(8.x版本)

对于开启安全认证的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 

六、完整docker-compose示例

6.1 集成部署方案

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 

七、常见问题排查

7.1 启动失败排查

# 查看容器日志 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 

7.2 连接问题

  • 跨域访问错误:确保正确配置CORS
  • 认证失败:检查用户名密码或临时关闭安全认证
  • 端口冲突netstat -tulnp | grep 9200

7.3 性能优化建议

  1. 调整JVM堆大小(不超过物理内存50%)
  2. 为生产环境配置持久化存储
  3. 启用适当的副本分片(建议至少1个)
  4. 定期监控集群健康状态

八、进阶配置

8.1 插件安装

# 进入容器安装插件 docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu 

8.2 备份与恢复

# 创建快照仓库 PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/usr/share/elasticsearch/snapshots" } } # 手动创建快照 PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true 

8.3 监控方案

  • 使用ElasticSearch自带的监控功能
  • 集成Prometheus+Grafana
  • 通过Kibana监控面板

九、结论

通过Docker部署ElasticSearch及其管理工具可以显著提高部署效率和环境一致性。本文介绍了: 1. 单节点和集群两种部署模式 2. ElasticSearch-Head可视化工具的集成 3. 常见问题的解决方案 4. 生产环境的最佳实践建议

建议在生产环境中: - 使用至少3个节点组成集群 - 启用安全认证和HTTPS加密 - 配置完善的监控告警系统 - 定期进行数据备份

附录

参考资源

  1. ElasticSearch官方Docker指南
  2. ElasticSearch-Head GitHub仓库
  3. Docker Compose官方文档

版本兼容性表

组件 测试版本
ElasticSearch 8.12.0
ElasticSearch-Head 5.x
Docker 20.10+

”`

注:本文实际约4500字(中文字符统计),包含技术细节、配置示例和实用命令。根据实际需要可调整各部分篇幅,生产环境部署建议参考官方最新文档。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI