安装Docker和Docker Compose
确保系统已安装Docker和Docker Compose。可通过以下命令检查版本:
bash
docker --version
docker-compose --version
若未安装,参考官方文档安装:
- Docker: https://docs.docker.com/engine/install/
- Docker Compose: https://docs.docker.com/compose/install/
拉取Elasticsearch镜像
拉取官方Elasticsearch 9.0+镜像:
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:9.0.0
单节点部署(开发环境)
创建单节点Elasticsearch容器:
bash
docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:9.0.0
参数说明:
-p 9200:9200:暴露HTTP API端口-p 9300:9300:暴露集群通信端口discovery.type=single-node:单节点模式ES_JAVA_OPTS:JVM堆内存配置xpack.security.enabled=false:禁用安全功能(仅测试环境)
生产环境多节点部署
使用docker-compose.yml部署集群:
yaml
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0
environment:
- cluster.name=es-cluster
- node.name=es-node1
- discovery.seed_hosts=es-node1,es-node2
- cluster.initial_master_nodes=es-node1,es-node2
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms2g -Xmx2g
- xpack.security.enabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es-data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- es-net
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0
environment:
- cluster.name=es-cluster
- node.name=es-node2
- discovery.seed_hosts=es-node1,es-node2
- cluster.initial_master_nodes=es-node1,es-node2
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms2g -Xmx2g
- xpack.security.enabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es-data2:/usr/share/elasticsearch/data
networks:
- es-net
volumes:
es-data:
es-data2:
networks:
es-net:
启动集群:
bash
docker-compose up -d
验证安装
检查Elasticsearch是否运行:
bash
curl -X GET "localhost:9200/"
安全模式下获取密码:
bash
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
配置文件持久化
将配置文件挂载到宿主机:
bash
docker run -d --name elasticsearch \
-v ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:9.0.0
性能优化建议
-
设置
vm.max_map_count:bashsysctl -w vm.max_map_count=262144 -
永久生效需写入
/etc/sysctl.conf -
禁用交换分区:
bashswapoff -a -
在
elasticsearch.yml中添加:yamlbootstrap.memory_lock: true
常见问题解决
权限问题:
bash
chmod -R 777 /path/to/data
启动失败检查日志:
bash
docker logs elasticsearch
内存不足 : 调整ES_JAVA_OPTS环境变量,例如:
bash
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g"