使用Docker安装Elastic Stack组件可以大幅简化部署流程
一、环境准备
安装Docker
Linux(CentOS 7):
sudo yum install -y docker sudo systemctl start docker sudo systemctl enable dockerWindows/Mac:
下载并安装Docker Desktop,确保启用Linux容器支持。
安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
二、单节点部署(开发测试环境)
unsetunset1. 创建Docker Compose配置文件unsetunset
在任意目录下创建docker-compose.yml文件,内容如下:
services:
elasticsearch:
image: elasticsearch:7.17.10
container_name: es-single
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 调整内存大小
- ELASTIC_PASSWORD=admin # 设置密码(7.17+版本需要)
volumes:
- es_data:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 30s
timeout: 10s
retries: 3
kibana:
image: kibana:7.17.10
container_name: kibana-single
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USER=elastic
- ELASTICSEARCH_PASSWORD=admin
ports:
- 5601:5601
depends_on:
elasticsearch:
condition: service_healthy
networks:
- es-network
volumes:
es_data:
networks:
es-network:
unsetunset2. 启动服务unsetunset
docker-compose up -d
unsetunset3. 验证安装unsetunset
访问Elasticsearch:
http://localhost:9200,使用账号elastic和密码admin(7.17+版本需认证)。访问Kibana:
http://localhost:5601,首次登录使用相同账号密码。
三、集群部署(生产环境示例)
unsetunset1. 集群架构说明unsetunset
3节点Elasticsearch集群(1主2从)
单节点Kibana(可扩展为集群)
使用Docker Swarm或Compose管理服务
unsetunset2. Docker Compose配置文件unsetunset
services:
es-master:
image: elasticsearch:7.17.10
container_name: es-master
environment:
- cluster.name=es-cluster
- node.name=es-master
- node.master=true
- node.data=true
- discovery.seed_hosts=es-slave1,es-slave2
- cluster.initial_master_nodes=es-master
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- ELASTIC_PASSWORD=admin
volumes:
- es_master_data:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 30s
timeout: 10s
retries: 3
es-slave1:
image: elasticsearch:7.17.10
container_name: es-slave1
environment:
- cluster.name=es-cluster
- node.name=es-slave1
- node.master=false
- node.data=true
- discovery.seed_hosts=es-master,es-slave2
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- ELASTIC_PASSWORD=admin
volumes:
- es_slave1_data:/usr/share/elasticsearch/data
networks:
- es-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 30s
timeout: 10s
retries: 3
es-slave2:
image: elasticsearch:7.17.10
container_name: es-slave2
environment:
- cluster.name=es-cluster
- node.name=es-slave2
- node.master=false
- node.data=true
- discovery.seed_hosts=es-master,es-slave1
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- ELASTIC_PASSWORD=admin
volumes:
- es_slave2_data:/usr/share/elasticsearch/data
networks:
- es-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 30s
timeout: 10s
retries: 3
kibana:
image: kibana:7.17.10
container_name: kibana-cluster
environment:
- ELASTICSEARCH_HOSTS=http://es-master:9200,http://es-slave1:9200,http://es-slave2:9200
- ELASTICSEARCH_USER=elastic
- ELASTICSEARCH_PASSWORD=admin
ports:
- 5601:5601
depends_on:
es-master:
condition: service_healthy
es-slave1:
condition: service_healthy
es-slave2:
condition: service_healthy
networks:
- es-network
volumes:
es_master_data:
es_slave1_data:
es_slave2_data:
networks:
es-network:
driver: bridge
unsetunset3. 启动集群unsetunset
docker-compose up -d
unsetunset4. 验证集群状态unsetunset
访问Kibana的Stack Management > Cluster Overview,查看节点健康状态。
使用Elasticsearch API查看集群状态:
curl -u elastic:admin http://localhost:9200/_cluster/health?pretty正常情况下应返回
status: "green"或status: "yellow"(无副本时)。
四、高级配置与优化
持久化存储
上述配置已通过
volumes声明数据卷,Docker会自动管理数据持久化。生产环境建议将数据卷挂载到本地磁盘:
volumes: - /data/elasticsearch/master:/usr/share/elasticsearch/data # 本地路径替换
内存优化
Elasticsearch默认分配2GB内存,可通过
ES_JAVA_OPTS调整,但需遵循"不超过物理内存50%"且"不超过32GB"的原则(避免超出JVM堆内存寻址效率峰值)。
安全配置
启用TLS加密:
生成证书:
docker run --rm elasticsearch:7.17.10 bin/elasticsearch-certutil cert -out /tmp/elastic-certificates.p12 -pass ""挂载证书到容器并配置
elasticsearch.yml:xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /path/to/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /path/to/elastic-certificates.p12
配置Kibana访问认证:
xpack.security.enabled: true xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/elastic-certificates.p12 xpack.security.http.ssl.truststore.path: /path/to/elastic-certificates.p12
性能调优
调整Docker资源限制(避免OOM):
resources: limits: memory: 4g reservations: memory: 2g启用Elasticsearch节点角色分离(master/data/ingest):
node.master: true # 仅主节点 node.data: true # 数据节点 node.ingest: true # ingest节点
五、常见问题与解决方案
端口冲突
检查本地9200/5601端口是否被占用,修改
docker-compose.yml中的ports映射(如9201:9200)。
内存不足
Linux系统需调整
vm.max_map_count(Elasticsearch要求至少262144):sudo sysctl -w vm.max_map_count=262144或在Docker Compose中添加内核参数:
sysctls: - vm.max_map_count=262144
Kibana连接失败
确认
elasticsearch.hosts配置是否正确(使用服务名而非IP,如http://elasticsearch:9200)。检查Elasticsearch密码是否正确(7.17+版本需配置
ELASTIC_PASSWORD)。
集群脑裂
确保
discovery.seed_hosts配置正确,生产环境建议至少3个主节点。
评论区