Docker 部署 Elasticsearch
Elasticsearch 是分布式搜索和分析引擎,常用于全文搜索、日志分析。
快速开始
基础部署
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:8.10.0
使用配置文件
1. 创建配置文件
mkdir -p /etc/elasticsearch
cat > /etc/elasticsearch/elasticsearch.yml << EOF
cluster.name: freekit-cluster
node.name: node-1
network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: false
EOF
2. 启动容器
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-v /etc/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v elasticsearch-data:/usr/share/elasticsearch/data \
-v elasticsearch-logs:/usr/share/elasticsearch/logs \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
docker.elastic.co/elasticsearch/elasticsearch:8.10.0
Docker Compose 部署
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: elasticsearch
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
- xpack.security.enabled=false
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
- elasticsearch-logs:/usr/share/elasticsearch/logs
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
elasticsearch-data:
elasticsearch-logs:
高级配置
集群模式
version: '3.8'
services:
elasticsearch1:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: elasticsearch1
ports:
- "9200:9200"
- "9300:9300"
environment:
- cluster.name=freekit-cluster
- node.name=elasticsearch1
- discovery.seed_hosts=elasticsearch2,elasticsearch3
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- elasticsearch1-data:/usr/share/elasticsearch/data
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: elasticsearch2
ports:
- "9201:9200"
- "9301:9300"
environment:
- cluster.name=freekit-cluster
- node.name=elasticsearch2
- discovery.seed_hosts=elasticsearch1,elasticsearch3
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- elasticsearch2-data:/usr/share/elasticsearch/data
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: elasticsearch3
ports:
- "9202:9200"
- "9302:9300"
environment:
- cluster.name=freekit-cluster
- node.name=elasticsearch3
- discovery.seed_hosts=elasticsearch1,elasticsearch2
- cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- elasticsearch3-data:/usr/share/elasticsearch/data
volumes:
elasticsearch1-data:
elasticsearch2-data:
elasticsearch3-data:
常用命令
# 查看集群状态
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/myindex"
# 删除索引
curl -X DELETE "localhost:9200/myindex"
运维建议
| 建议 | 说明 |
|---|---|
| 内存限制 | 设置合理的 JVM 内存 |
| 持久化 | 使用数据卷持久化 |
| 监控 | 监控集群健康状态 |
| 备份 | 定期备份索引数据 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 启动失败 | 检查 JVM 内存设置 |
| 集群状态异常 | 检查网络和配置 |
| 性能问题 | 检查查询和索引配置 |
| 磁盘空间不足 | 清理旧索引或增加磁盘 |