docker swarm 搭建ES集群
docker swarm 部署ES集群
0. 环境准备
修改系统配置,在所有主机中,编辑 /etc/sysctl.conf,追加以下内容:
vm.max_map_count=262144
保存后,执行sysctl -p
创建专用网络:
docker network create --driver overlay elastic
1. docker-compose文件准备
docker-compose-es-cluster.yml
version: '3.3'
services:
kibana:
image: kibana:7.10.1
environment:
- ELASTICSEARCH_URL=http://es01:9200
- ELASTICSEARCH_HOSTS=http://es01:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=vsUZGKNvjWRtTKPmDG
ports:
- "5601:5601"
networks:
- elastic
deploy:
mode: replicated
replicas: 1
resources:
limits:
memory: 800M
placement:
constraints:
- node.labels.es.replica==1 # 部署位置
es01:
image: elasticsearch:7.10.1
hostname: es01
environment:
- network.publish_host=es01
- network.host=0.0.0.0
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- path.repo=/usr/share/elasticsearch/backups
- xpack.security.enabled=false
- xpack.security.audit.enabled=false
- xpack.security.transport.ssl.enabled=false
- ELASTIC_PASSWORD=vsUZGKNvjWRtTKPmDG
volumes:
- es01_data:/usr/share/elasticsearch/data
- es01_logs:/usr/share/elasticsearch/logs
ports:
- "9200:9200"
networks:
- elastic
deploy:
mode: replicated
replicas: 1
resources:
limits: # 资源使用上限
cpus: "0.50"
memory: 1G
reservations: # 随时可以使用的资源
cpus: "0.25"
memory: 1G
placement:
constraints:
- node.labels.es.replica==1 # 部署位置
es02:
image: elasticsearch:7.10.1
hostname: es02
environment:
- network.publish_host=es02
- network.host=0.0.0.0
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- path.repo=/usr/share/elasticsearch/backups
volumes:
- es02_data:/usr/share/elasticsearch/data
- es02_logs:/usr/share/elasticsearch/logs
networks:
- elastic
deploy:
mode: replicated
replicas: 1
resources:
limits: # 资源使用上限
cpus: "0.50"
memory: 1G
reservations: # 随时可以使用的资源
cpus: "0.25"
memory: 1G
placement:
constraints:
- node.labels.es.replica==2 # 部署位置
es03:
image: elasticsearch:7.10.1
hostname: es03
environment:
- network.publish_host=es03
- network.host=0.0.0.0
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- path.repo=/usr/share/elasticsearch/backups
volumes:
- es03_data:/usr/share/elasticsearch/data
- es03_logs:/usr/share/elasticsearch/logs
networks:
- elastic
deploy:
mode: replicated
replicas: 1
resources:
limits: # 资源使用上限
cpus: "0.50"
memory: 1G
reservations: # 随时可以使用的资源
cpus: "0.25"
memory: 1G
placement:
constraints:
- node.labels.es.replica==3 # 部署位置
volumes:
es01_data:
driver: local
es01_logs:
driver: local
es02_data:
driver: local
es02_logs:
driver: local
es03_data:
driver: local
es03_logs:
driver: local
networks:
elastic:
external: true # 用已经创建好的网络
2. 部署服务
部署服务使用 docker stack deploy,其中 -c 参数指定 compose 文件名。
$ docker stack deploy -c docker-compose-es-cluster.yml es
验证ES服务:打开浏览器输入 任一节点IP:9200 即可看到各节点运行状态。如下图所示:

此时ES已成功启动,但是还需要验证集群是否搭建成功。
验证集群:打开浏览器输入 任一节点IP:9200/_cluster/health 即可看到集群状态。如下图所示:

验证Kibana:打开浏览器输入 任一节点IP:5601 能看到kibana的登录页则表示成功。
3. 查看服务
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ou62f7ff0ast es_es_master replicated 1/1 docker.elastic.co/elasticsearch/elasticsearch:7.17.8 *:9200->9200/tcp, *:9300->9300/tcp
6pyqh40a2jox es_es_node replicated 2/2 docker.elastic.co/elasticsearch/elasticsearch:7.17.8
kpc66kphr4mb es_kibana replicated 1/1 docker.elastic.co/kibana/kibana:7.6.2 *:5601->5601/tcp
4. 常见问题解决
1. 找不到master节点
报错信息摘要:master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes ...
解决方案:这种情况一般可以在服务down掉之后,删除相关的volume,然后重新部署。但是生产环境慎用down操作。服务启动之后如果需要重启可以通过重新执行docker stack deploy -c docker-compose-es-cluster.yml es来使得配置生效。
好记性不如烂笔头!
浙公网安备 33010602011771号