Docker Compose 启动ES集群

168 阅读3分钟

Compose

Docker Compose 是一个基于命令行的工具,用于定义和管理多容器应用程序的部署。它使用 YAML 文件来描述应用程序的组件、服务依赖关系和配置信息。

通过编写 docker-compose.yml 文件,您可以在其中定义多个服务,并指定每个服务所需的镜像、环境变量、网络设置等。这样,您可以将整个应用程序的各个组件统一地定义在一个文件中,方便管理和维护。

Docker Compose 提供了一组命令行工具,使您能够轻松地启动、停止和重启应用程序的服务。例如,使用 docker-compose up 命令,可以根据配置文件启动所有服务。而使用 docker-compose down 命令,则可以停止并删除已启动的容器。

另外,Docker Compose 还支持自定义网络和卷,以满足多容器应用程序的网络通信和数据持久化需求。您可以在配置文件中定义新的网络,并将服务连接到该网络上,实现容器之间的相互通信。同时,您也可以将主机文件系统中的目录与容器内的目录进行映射,以实现数据在容器之间的共享和持久化存储。

使用 Docker Compose,您可以更加高效地管理和部署复杂的多容器应用程序。它提供了一种可扩展和可重复的方式,使得开发、测试和生产环境之间的部署过程更加简化和一致。通过定义整个应用程序的架构和配置信息,您可以实现快速部署、自动化管理和可靠性保证。

我们在使用es的时候,总是没有好用的环境,可以使用docker部署一个集群,用来验证和测试,方便快捷,简单易食用

image.png

准备集群

  1. 准备配置目录及文件

    • 新建 E:\dockerFile\elasticsearch\01、02、03 文件夹

    • 分别在其下建 data、plugins 文件夹

    • 分别在其下建文件 elasticsearch.yml

    • elasticsearch.yml 文件内容分别为:

      • 01

        # 集群名称
        cluster.name: es-cluster
        # 节点名称
        node.name: es-node-1
        # 绑定host,0.0.0.0代表当前节点的ip
        network.host: 0.0.0.0
        # 表示这个节点是否可以充当主节点
        node.master: true
        # 是否充当数据节点
        node.data: true
        # 所有主从节点
        discovery.seed_hosts: ["es-master", "es-slave1", "es-slave2"]
        # 这个参数决定了在选主过程中需要 有多少个节点通信  预防脑裂 N/2+1
        discovery.zen.minimum_master_nodes: 3
        #初始化主节点
        cluster.initial_master_nodes: es-node-1
        # 单节点上可以开启的ES存储实例的个数,没配置的话会报一个错误
        node.max_local_storage_nodes: 3
        
      • 02

        cluster.name: es-cluster
        node.name: es-node-2
        network.host: 0.0.0.0
        node.master: true
        node.data: true
        discovery.seed_hosts: ["es-master", "es-slave1", "es-slave2"]
        discovery.zen.minimum_master_nodes: 3
        cluster.initial_master_nodes: es-node-1
        node.max_local_storage_nodes: 3
        
      • 03

        cluster.name: es-cluster
        node.name: es-node-3
        network.host: 0.0.0.0
        node.master: true
        node.data: true
        discovery.seed_hosts: ["es-master", "es-slave1", "es-slave2"]
        discovery.zen.minimum_master_nodes: 3
        cluster.initial_master_nodes: es-node-1
        node.max_local_storage_nodes: 3
        
  2. 新建一个文件,docker-compose.yml

    version: '3'
    networks:
      es-net:
        external: true
    services:
     elasticsearch1:
      image: elasticsearch:7.6.2
      container_name: es-master
      volumes:
        - E:\dockerFile\elasticsearch\01\data:/usr/share/elasticsearch/data
        - E:\dockerFile\elasticsearch\01\plugins:/usr/share/elasticsearch/plugins
        - E:\dockerFile\elasticsearch\01\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ulimits:
        memlock:
          soft: -1
          hard: -1
      ports:
        - '19210:9200'
        - '19310:9300'
      privileged: true
    
     elasticsearch2:
      image: elasticsearch:7.6.2  
      container_name: es-slave1
      volumes:
        - E:\dockerFile\elasticsearch\02\data:/usr/share/elasticsearch/data
        - E:\dockerFile\elasticsearch\02\plugins:/usr/share/elasticsearch/plugins
        - E:\dockerFile\elasticsearch\02\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ulimits:
        memlock:
          soft: -1
          hard: -1
      ports:
        - '19220:9200'
        - '19320:9300'
      privileged: true
    
     elasticsearch3:
      image: elasticsearch:7.6.2
      container_name: es-slave2
      volumes:
        - E:\dockerFile\elasticsearch\03\data:/usr/share/elasticsearch/data
        - E:\dockerFile\elasticsearch\03\plugins:/usr/share/elasticsearch/plugins
        - E:\dockerFile\elasticsearch\03\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      networks:
        - es-net
      environment:
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ulimits:
        memlock:
          soft: -1
          hard: -1
      ports:
        - '19230:9200'
        - '19330:9300'
      privileged: true
    
  3. 创建网络 es-net

    docker network create es-net
    
  4. windows 上解决:vm.max_map_count 65530 is too low

    $ wsl -d docker-desktop
    $ sysctl -w vm.max_map_count=262144
    

    参考链接:www.cnblogs.com/xiao2shiqi/…

  5. 启动容器

    docker compose up -d
    
  6. 访问页面

    http://localhost:19210/_cat/nodes