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来使得配置生效。

posted on 2023-01-12 19:58  JentZhang  阅读(986)  评论(0)    收藏  举报