同福

Docker搭建Elasticsearch6.8.15集群环境【20220905】

介绍

介绍

使用Docker搭建服务器运行环境是非常方便的,这一块Elasticsearch就做了非常友好,基本上通过环境变量就可以完成大部分配置。

今天福哥就带着大家使用Docker搭建一个ES的集群环境,别掉队哦~~

集群

分片shard

ES索引会将数据分散到不同的shard当中存储,这样做可以实现多个节点数据的分布式搜索,避免单个节点的故障。一个索引的分片数量在创建之初就必须设计好,后期就不能修改了。

副本replica

ES索引的分片可以设置副本,每一个分片可以设置多个副本,副本可以提高索引的容错性,当某个节点上的某个索引的分片出现了损坏,可以通过副本来进行恢复。

安装

docker-compose-es-cluster.yml

为了发布,福哥使用docker-compose进行docker的配置,官方也是推荐的这种方式。

福哥设计的ES集群是三个节点的,每个ES节点JVM限制最大为512m,三个ES节点名称分别为tfes01、tfes02和tfes03。

最后的docker-compose-es-cluster.yml配置如下:

version: "3.2"

services:
  tfes01:
    image: registry.tongfu.net:5000/elasticsearch:6.8.15
    container_name: tfes01
    environment:
      - node.name=tfes01
      - cluster.name=tfes-cluster
      - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/docker.data/tfes01/data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200

  tfes02:
    image: registry.tongfu.net:5000/elasticsearch:6.8.15
    container_name: tfes02
    environment:
      - node.name=tfes02
      - cluster.name=tfes-cluster
      - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/docker.data/tfes02/data:/usr/share/elasticsearch/data

  tfes03:
    image: registry.tongfu.net:5000/elasticsearch:6.8.15
    container_name: tfes03
    environment:
      - node.name=tfes03
      - cluster.name=tfes-cluster
      - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/docker.data/tfes03/data:/usr/share/elasticsearch/data

目录

福哥为每个ES节点建立了一个数据目录,授权目录所有者为1000这是容器里的es用户ID,这些目录会映射到ES容器里面做持久化保存。

home/topic/2022/0905/17/f55f791f30c0d37b0770f0557219ce1a.png

启动

准备好了之后就可以启动ES集群了。

docker-compose -f docker-compose-es-cluster.yml up -d

home/topic/2022/0905/14/6339813081c1d2ab2d5f4e5cd7e7dfb7.png

查看节点状态。

curl 'http://localhost:9200/_cat/nodes'

home/topic/2022/0905/16/a425c04c3464470db54b28865aa42d93.png

查看集群健康状态。

curl 'http://localhost:9200/_cluster/health?pretty=true'

home/topic/2022/0905/16/681c4718b49a0b2553f48da9855642b8.png

查看主节点状态,默认情况下集群hosts的第一个节点会被ES选为主节点。

home/topic/2022/0905/14/ca4f9c4b264b1ed176d2af26adca46cb.png

测试

插入数据

福哥往test索引里面插入了三条数据。

curl -X POST -H 'Content-Type: application/json' -d '{"id":1,"name":"鬼谷子叔叔"}' 'http://localhost:9200/test/test'
curl -X POST -H 'Content-Type: application/json' -d '{"id":2,"name":"福哥"}' 'http://localhost:9200/test/test'
curl -X POST -H 'Content-Type: application/json' -d '{"id":3,"name":"tongfu.net"}' 'http://localhost:9200/test/test'

查看索引信息

查看索引列表信息可以看到test索引的状态是green,文档数量是3个。

curl 'http://localhost:9200/_cat/indices'

home/topic/2022/0905/17/1cc4effa7a9cb7a5e0dec878636263c4.png

查看分片信息

查看分片列表信息可以看到test索引的5个分片被分散到多个节点里面去了。

curl 'http://localhost:9200/_cat/shards'

home/topic/2022/0905/17/fc5801f3aafdd4e98caca050b1672ec8.png

查询

通过主节点对test索引进行查询。

根据id进行查询。

curl -X POST -H 'Content-Type: application/json' -d '{"query": {"terms": {"id": [2]}}}' 'http://localhost:9200/test/_search?pretty=true'

home/topic/2022/0905/17/8d48cc917447567300d9451b7b110def.png

根据name进行查询。

curl -X POST -H 'Content-Type: application/json' -d '{"query": {"match_phrase": {"name": "叔叔"}}}' 'http://localhost:9200/test/_search?pretty=true'

home/topic/2022/0905/17/baf1416933d54b902f4fdcfb86e148b9.png

总结

今天福哥带着大家学习了使用Docker基于ES6搭建ES集群的方法,ES集群在高可用方面和扩容方面要比ES单机要强太多了。

不过,ES集群的维护也需要更多的知识和技巧,后面福哥会陆续将ES集群的各种维护技巧教给大家,敬请期待~~