欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch 集群Docker Compose部署

程序员文章站 2022-06-04 12:22:52
...

Elasticsearch 集群Docker Compose部署

官方网站:
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html
本教程适用于三台不同服务器的 Elasticsearch 集群,使用 Docker Compose 方式搭建

  • 环境信息

     IP地址         访问端口    集群节点间通讯端口   节点描述
     10.1.10.241     9201        9301            主节点
     10.1.10.242     9200        9300            从节点1
     10.1.10.188     9200        9300            从节点2
    
  • 操作步骤

    • 拉取镜像

      • 拉取ES镜像

        docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2
        

        等待后,查看是否拉取成功

        #查看镜像是否拉取成功
        docker images
        

        成功如下,未成功则无此镜像
        Elasticsearch 集群Docker Compose部署

      • 下载安装 Docker Compose

        参考网址:https://docs.docker.com/compose/install/

        1. 下载

          sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
          

          如上命令执行不成功,可选择下方命令进行安装,再次安装前需删除原失败下载相关文件

          sudo curl -L --fail https://github.com/docker/compose/releases/download/1.26.2/run.sh -o /usr/local/bin/docker-compose
          
          sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
          
          pip install docker-compose
          
          sudo pip install docker-compose
          
        2. 删除

          如果使用 curl 进行安装

          sudo rm /usr/local/bin/docker-compose
          

          如果使用 pip 进行安装的

          pip uninstall docker-compose
          
        3. 权限设置

          sudo chmod +x /usr/local/bin/docker-compose
          
        4. 查看是否安装成功

          docker-compose -version
          

          Elasticsearch 集群Docker Compose部署

      • 创建容器挂载目录、配置文件

        1. 查看硬盘使用占比,使用磁盘空间充足的路径进行挂载点创建

          df -h
          

          选择磁盘空间充足的路径进行创建,否则启动会产生硬盘容量不足,无法创建索引或分片的情况

          原因:官方默认磁盘已用空间不可超过85%。解决方案:后期可以通过命令对默认值进行修改

          Elasticsearch 集群Docker Compose部署

        2. 创建挂载目录

          在三台服务器磁盘空间充足的路径上分别创建目录,名称随意

          mkdir es       
          cd es
          mkdir config    #用于存放配置文件
          mkdir data		  #用于存放数据
          mkdir logs			#用于存放日志
          mkdir plugins		#用于存放插件
          
        3. 创建配置文件

          在三台服务器的 config 目录下创建配置文件

          • 10.1.10.241 主节点

            • docker-compose.yml(注意:三台服务器上的此文件名不可变)

              version: "3"
              services:
              	#服务名称
                es-master:
                	#容器名称
                  container_name: es-master
                  #镜像名称:版本号
                  image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
                  #节点名称
                  hostname: es-master
                  #如遇到问题是否尝试自动重启
                  restart: always
                  #服务端口、通讯端口
              		ports:
                    - 9201:9201
                    - 9301:9301
                  #挂载路径
                  volumes:
              			#冒号前的路径改为自己创建的目录,后面的路径不变
                    - /mnt/disk2/es-data/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml
                    - /mnt/disk2/es-data/data:/usr/share/elasticsearch/data
                    - /mnt/disk2/es-data/logs:/usr/share/elasticsearch/logs
                    - /mnt/disk2/es-data/plugins:/usr/share/elasticsearch/plugins
                  #内存配置
                  environment:
                    - "ES_JAVA_OPTS=-Xms4g -Xmx4g
              
            • config.yml

              #集群名称-三节点的集群名称必须一致,否则启动集群后,互相通讯时进行的校验不通过
              cluster.name: es-cluster
              #节点名称
              node.name: es-node1
              #是否可以被选举为主节点
              node.master: true
              #用于外网访问,不可更改
              network.host: 0.0.0.0
              #本机IP地址
              network.publish_host: 10.1.10.241
              #此容器节点端口号
              http.port: 9201
              #此容器节点通讯端口号
              transport.port: 9301
              #集群中所有节点的通讯地址
              discovery.seed_hosts:
                - 10.1.10.241:9301
                - 10.1.10.242:9300
                - 10.1.10.188:9300
              #集群初始化时,成为主节点的节点名称名称
              cluster.initial_master_nodes:
                - es-node1
              #跨域
              http.cors.enabled: true
              http.cors.allow-origin: "*"
              
          • 10.1.10.242 从节点1

            • docker-compose.yml

              version: "3"
              services:
                es-slave1:
                  container_name: es-slave1
                  image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
                  restart: always
                  ports:
                    - 9200:9200
                    - 9300:9300
                  volumes:
                    - /home/es/node2/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml
                    - /home/es/node2/data:/usr/share/elasticsearch/data
                    - /home/es/node2/logs:/usr/share/elasticsearch/logs
                    - /home/es/node2/plugins:/usr/share/elasticsearch/plugins
                  environment:
                    - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
              
            • config.yml

              cluster.name: es-cluster
              node.name: es-node2
              node.master: true
              network.host: 0.0.0.0
              network.publish_host: 10.1.10.242
              http.port: 9200
              transport.port: 9300
              discovery.seed_hosts:
                - 10.1.10.241:9301
                - 10.1.10.242:9300
                - 10.1.10.188:9300
              cluster.initial_master_nodes:
                - es-node1
              http.cors.enabled: true
              http.cors.allow-origin: "*"
              
          • 10.1.10.188 从节点2

            • docker-compose.yml

              version: "3"
              services:
                es-slave2:
                  container_name: es-slave2
                  image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
                  restart: always
                  ports:
                    - 9200:9200
                    - 9300:9300
                  volumes:
                    - /home/es/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml
                    - /home/es/data:/usr/share/elasticsearch/data
                    - /home/es/logs:/usr/share/elasticsearch/logs
                    - /home/es/plugins:/usr/share/elasticsearch/plugins
                  environment:
                    - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
              
            • config.yml

              cluster.name: es-cluster
              node.name: es-node3
              node.master: true
              network.host: 0.0.0.0
              network.publish_host: 10.1.10.188
              http.port: 9200
              transport.port: 9300
              discovery.seed_hosts:
                - 10.1.10.241:9301
                - 10.1.10.242:9300
                - 10.1.10.188:9300
              cluster.initial_master_nodes:
                - es-node1
              http.cors.enabled: true
              http.cors.allow-origin: "*"
              xpack.security.enabled: false
              
      • 权限设置

        给目录、配置文件设置权限,用于容器创建数据、日志等信息(三台都设置)

        chmod 777 config
        chmod 777 data
        chmod 777 logs
        chmod 777 plugins
        chmod 777 docker-compose.yml
        chmod 777 config.yml
        
    • 节点容器启动

      1. 启动,需进入到 docker-compose.yml 文件目录

        #后台启动
        docker-compose up -d
        #前台启动
        docker-compose up
        
      2. 查看节点是否启动

        docker ps
        

        如下情况,则表示启动成功

        Elasticsearch 集群Docker Compose部署

        如下情况,则表示启动未成功

        Elasticsearch 集群Docker Compose部署

        • 排查方法

          查看容器日志报错,并解决

          docker logs es-master
          
        • 如报错解决完成,并都启动成功

          1. 查看是否可以正常访问

            http://10.1.10.241:9201
            http://10.1.10.242:9200
            http://10.1.10.188:9200
            

            Elasticsearch 集群Docker Compose部署

          2. 查看集群节点状态

            #使用任意节点容器服务地址和端口号
            http://10.1.10.241:9201/_cat/nodes?pretty
            

            如下情况表示集群节点加入成功,* 代表主节点

            Elasticsearch 集群Docker Compose部署
            查看集群节点在服务器中的状态

            http://10.1.10.241:9201/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master
            

            显示如下,可以根据状态信息判断内存和磁盘报错
            Elasticsearch 集群Docker Compose部署

  • 报错异常处理

    • 内存不足

      max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
      内存不足导致报错,执行以下命令,显示 vm.max_map_count = 262144 则表示成功

      #设置
      sysctl -w vm.max_map_count=262144
      #查看
      sysctl -a|grep vm.max_map_count
      
      • 以上命令主机重启后失效,永久修改方法如下:

        在 /etc/sysctl.conf文件最后添加 vm.max_map_count=262144

    • 启动成功,节点加入不进去

      [master-a.example.com] master not discovered yet, this node has
      not previously joined a bootstrapped (v7+) cluster, and this
      node must discover master-eligible nodes [master-a, master-b] to
      bootstrap a cluster: have discovered [{master-b.example.com}{…

      1. 检查节点间的通讯地址与端口号是否正确
      2. 检查节点名称是否重复或漏写
      3. 踩坑确认9301:9300,这样的写法会导致无法发现节点,也会报此问题
  • 其余参考

    • docker-compose命令

      参考网址:https://www.cnblogs.com/ziyue7575/p/10e5e11ac09dc4bb36fff48d5ee518c3.html

      #初次启动,并后台启动
      docker-compose up -d
      #停止集群
      docker-compose stop
      #再次启动
      docker-compose start
      #列出项目中所有容器
      docker-compose ps 
      #停止并删除容器、网络、卷
      docker-compose down
      #查看日志,后面可跟容器名称
      docker-compose logs
      
    • docker 命令

      参考网址:https://www.runoob.com/docker/docker-command-manual.html

      #搜索网络中的镜像
      docker search 软件名称
      #拉取镜像
      docker pull 镜像名:版本号
      #查看已拉取到本地的镜像
      docker images
      #查看已启动容器
      docker ps
      #查看所有容器
      docker ps -a
      #查看容器日志
      docker logs 容器名
      #停止容器
      docker stop 容器名
      #删除容器
      docker rm 容器名
      #进入容器
      docker exec -it 容器名 /bin/bash
      
  • 如有问题可评论,会试验后对文档进行修改