您好,登录后才能下订单哦!
# Docker中怎么搭建Elasticsearch集群
## 前言
Elasticsearch作为当前最流行的分布式搜索和分析引擎,在日志分析、全文检索等领域广泛应用。使用Docker部署Elasticsearch集群可以极大简化环境配置和节点管理。本文将详细介绍如何在Docker环境中搭建一个多节点的Elasticsearch集群。
## 一、环境准备
### 1.1 基础要求
- Docker 20.10.0或更高版本
- Docker Compose 1.29.0或更高版本
- 至少4GB可用内存(建议8GB+)
- Linux/macOS/Windows(WSL2)系统
### 1.2 资源分配建议
对于开发测试环境:
- 每个节点分配1-2GB内存
- 2-3个节点组成集群
生产环境建议:
- 每个节点至少4GB内存
- 3个以上节点(奇数个)
## 二、单节点快速体验
### 2.1 运行单个节点
```bash
docker run -d --name es01 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
curl -X GET "localhost:9200/_cat/nodes?v"
创建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=-Xms1g -Xmx1g"
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=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es02-data:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es03-data:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
es01-data:
es02-data:
es03-data:
networks:
elastic:
driver: bridge
docker-compose up -d
curl -X GET "localhost:9200/_cluster/health?pretty"
期望输出:
{
"cluster_name" : "es-docker-cluster",
"status" : "green",
"number_of_nodes" : 3,
...
}
修改环境变量:
environment:
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
docker exec -it es01 /bin/bash
bin/elasticsearch-setup-passwords auto
curl -u elastic:your_password -X GET "https://localhost:9200/_cluster/health?pretty" -k
在docker-compose.yml
中添加:
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
ports:
- 5601:5601
environment:
ELASTICSEARCH_HOSTS: '["http://es01:9200"]'
ELASTICSEARCH_USERNAME: kibana_system
ELASTICSEARCH_PASSWORD: your_kibana_password
networks:
- elastic
浏览器打开:http://localhost:5601
内存设置: “`yaml environment:
”`
禁用交换分区: “`yaml environment:
”`
使用外部卷或绑定挂载:
volumes:
- /path/to/data:/usr/share/elasticsearch/data
建议使用自定义网络:
networks:
esnet:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
检查项:
- 确保所有节点cluster.name
一致
- 检查discovery.seed_hosts
配置正确
- 验证网络连通性
解决方案: - 增加JVM堆大小 - 减少分片数量 - 添加更多节点
处理方法: - 增加磁盘配额 - 设置ILM策略自动清理旧索引 - 考虑使用热温冷架构
curl -X GET "localhost:9200/_nodes/stats?pretty"
配置elasticsearch.yml
:
xpack.monitoring.collection.enabled: true
docker-compose pull
docker-compose up -d
通过Docker搭建Elasticsearch集群不仅简化了部署流程,还便于维护和扩展。本文介绍的方案适合中小规模集群,对于更大规模的部署,建议考虑Kubernetes等容器编排系统。实际生产环境中,还需要结合具体业务需求进行调优和安全加固。
注意:本文基于Elasticsearch 8.12版本编写,不同版本配置可能略有差异。 “`
这篇文章共计约1850字,采用Markdown格式编写,包含了从单节点部署到多节点集群搭建的完整流程,并涵盖了安全配置、Kibana集成、生产环境建议等实用内容。文章结构清晰,代码示例完整,可以直接用于实际部署参考。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。