Docker实现ElasticSearch集群搭建

2,165 阅读4分钟

先赞后看,养成习惯 🌹
欢迎微信关注:Java编程之道
每天进步一点点,沉淀技术分享知识。

Docker搭建ElasticSearch集群

鉴于网上很多ES集群搭建方式十分繁琐且ES版本较低,所以梳理出一套基于Docker的测试环境下的ES集群搭建流程,也不一定说Docker搭建一定就是最好的方法,但是Docker搭建集群一定是最快的方法。来吧,自己动手试一试。

世间方式千万种,今天给大家介绍一种一键启动的ES集群的搭建方式--使用docker-compose(负责实现对Docker容器集群的快速编排)。废话不多说上干货!

前置操作

创建各个ES节点的文件挂载路径,本文配置路径保持和前文一样,懒得去动了。Docker搭建ES+Head+Kibana,如果你有其他需要请自行了断!

[root@localhost home]# ll
总用量 4
-rw-r--r--.  1 root     root     2557 9月   8 20:22 docker-compose.yml
drwx------. 12 xianglei xianglei  202 8月  30 17:18 xianglei
drwxr-xr-x.  5 xianglei root       45 9月   7 21:49 xianglei1
drwx------. 12 xianglei root      202 9月   3 20:15 xianglei2
drwx------. 12 xianglei root      202 9月   3 20:14 xianglei3
[root@localhost home]# 

赋予ES节点挂载路径非Root用户权限

chown -R xianglei /文件夹路径

避免不必要的问题,修改vm.max_map_count

# 直接执行
sysctl -w vm.max_map_count=262144 
# 在/etc/sysctl.conf文件最后添加一行 永久生效
vm.max_map_count=262144

无脑CV操作

可以直接把我的docker-compose.yml文件拷贝过去,就上面的配置信息的含义,我相信大家用排查法可以自己类比。

version: '3.3'
services:
  ESmaster:
    image: elasticsearch:7.6.2
    container_name: ESmaster
    environment:
      - node.name=ESmaster
      - cluster.name=EScluster
      - discovery.seed_hosts=my_elastcsearch2,my_elastcsearch3
      - cluster.initial_master_nodes=ESmaster,my_elastcsearch2,my_elastcsearch3
      - bootstrap.memory_lock=true
      - http.port=9201
      - node.master=true
      - node.data=true
      - http.cors.allow-origin=*
      - http.cors.enabled=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /home/xianglei1/data/data:/usr/share/elasticsearch/data
      - /home/xianglei1/logs:/usr/share/elasticsearch/logs
      - /home/xianglei1/plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9201:9201
    networks:
      - mynet
  my_elastcsearch2:
    image: elasticsearch:7.6.2
    container_name: my_elastcsearch2
    environment:
      - node.name=my_elastcsearch2
      - cluster.name=EScluster
      - discovery.seed_hosts=ESmaster,my_elastcsearch3
      - cluster.initial_master_nodes=ESmaster,my_elastcsearch2,my_elastcsearch3
      - bootstrap.memory_lock=true
      - http.port=9202
      - node.master=true
      - node.data=true
      - http.cors.allow-origin=*
      - http.cors.enabled=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /home/xianglei2/data/data:/usr/share/elasticsearch/data
      - /home/xianglei2/logs:/usr/share/elasticsearch/logs
      - /home/xianglei2/plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9202:9202
    networks:
      - mynet
  my_elastcsearch3:
    image: elasticsearch:7.6.2
    container_name: my_elastcsearch3
    environment:
      - node.name=my_elastcsearch3
      - cluster.name=EScluster
      - discovery.seed_hosts=ESmaster,my_elastcsearch2
      - cluster.initial_master_nodes=ESmaster,my_elastcsearch2,my_elastcsearch3
      - bootstrap.memory_lock=true
      - http.port=9203
      - node.master=true
      - node.data=true
      - http.cors.allow-origin=*
      - http.cors.enabled=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /home/xianglei3/data/data:/usr/share/elasticsearch/data
      - /home/xianglei3/logs:/usr/share/elasticsearch/logs
      - /home/xianglei3/plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9203:9203
    networks:
      - mynet
networks:
  mynet:
    driver: bridge

对于这里的Kibana和head容器,大家可以参考前文配置即可Docker搭建ES+Head+Kibana

需要注意的一点:

  • 我的集群使用的是一个新的network,具体细节可以查看得知,目前的叫做home_mynet,所以你在启动Kibana的时候需要修改配置信息中ES节点地址,以及启动时--net 修改为--net home_mynet
[root@localhost home]# docker network list
NETWORK ID          NAME                DRIVER              SCOPE
58436ed85c2d        bridge              bridge              local
2398670cf8e3        home_mynet          bridge              local
d1bd2ce47aa8        host                host                local
692d4bd9fbfd        mynetwork           bridge              local
478f5a96a153        none                null                local
[root@localhost home]# 

执行docker-compose.yml

# 在你自定义写有docker-compose.yml的路径下执行(会打印日志信息)
docker-compose up
# 后台方式启动
docker-compose up -d

查看集群容器启动情况

[root@localhost home]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                        NAMES
9c8255a53173        kibana:7.6.2                "/usr/local/bin/dumb…"   22 minutes ago      Up 22 minutes       0.0.0.0:5601->5601/tcp                       kibana
783c863324f8        elasticsearch:7.6.2         "/usr/local/bin/dock…"   34 minutes ago      Up 34 minutes       9200/tcp, 9300/tcp, 0.0.0.0:9202->9202/tcp   my_elastcsearch2
ab54ac7515f3        elasticsearch:7.6.2         "/usr/local/bin/dock…"   34 minutes ago      Up 34 minutes       9200/tcp, 9300/tcp, 0.0.0.0:9201->9201/tcp   ESmaster
180536eda65b        elasticsearch:7.6.2         "/usr/local/bin/dock…"   34 minutes ago      Up 34 minutes       9200/tcp, 9300/tcp, 0.0.0.0:9203->9203/tcp   my_elastcsearch3
3d18a3b987e1        mobz/elasticsearch-head:5   "/bin/sh -c 'grunt s…"   9 days ago          Up 33 minutes       0.0.0.0:9100->9100/tcp                       elasticsearch-head
[root@localhost home]# 

查看一下效果

在这里插入图片描述

Head

在这里插入图片描述

至此ES集群搭建就完成了!

但是我还是需要强调的是目前的环境只适合测试环境学习使用。严格意义上来讲并不算是个集群,同时生产环境的ES配置信息将会更加复杂。

但是呢,万事开头难!搭建集群这种经历本不应该浪费我们大量的学习时间,对于一个开发者来说如何利用高性能的ES集群去实现业务才是最终的目的。


下期预告:ELK环境搭建