跳到主要内容

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 内存设置
集群状态异常检查网络和配置
性能问题检查查询和索引配置
磁盘空间不足清理旧索引或增加磁盘

相关文档