天天看點

Docker搭建Elasticsearch6.8.15叢集環境

作者:同福程式設計

1. 介紹

1.1 介紹

使用Docker搭建伺服器運作環境是非常友善的,這一塊Elasticsearch就做了非常友好,基本上通過環境變量就可以完成大部配置設定置。

今天福哥就帶着大家使用Docker搭建一個ES的叢集環境,别掉隊哦~~

2. 叢集

2.1 分片shard

ES索引會将資料分散到不同的shard當中存儲,這樣做可以實作多個節點資料的分布式搜尋,避免單個節點的故障。一個索引的分片數量在建立之初就必須設計好,後期就不能修改了。

2.2 副本replica

ES索引的分片可以設定副本,每一個分片可以設定多個副本,副本可以提高索引的容錯性,當某個節點上的某個索引的分片出現了損壞,可以通過副本來進行恢複。

3. 安裝

3.1 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           

3.2 目錄

福哥為每個ES節點建立了一個資料目錄,授權目錄所有者為1000這是容器裡的es使用者ID,這些目錄會映射到ES容器裡面做持久化儲存。

Docker搭建Elasticsearch6.8.15叢集環境

3.3 啟動

準備好了之後就可以啟動ES叢集了。

docker-compose -f docker-compose-es-cluster.yml up -d           
Docker搭建Elasticsearch6.8.15叢集環境

檢視節點狀态。

curl 'http://localhost:9200/_cat/nodes'           
Docker搭建Elasticsearch6.8.15叢集環境

檢視叢集健康狀态。

curl 'http://localhost:9200/_cluster/health?pretty=true'           
Docker搭建Elasticsearch6.8.15叢集環境

檢視主節點狀态,預設情況下叢集hosts的第一個節點會被ES選為主節點。

Docker搭建Elasticsearch6.8.15叢集環境

4. 測試

4.1 插入資料

福哥往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'           

4.2 檢視索引資訊

檢視索引清單資訊可以看到test索引的狀态是green,文檔數量是3個。

curl 'http://localhost:9200/_cat/indices'           
Docker搭建Elasticsearch6.8.15叢集環境

4.3 檢視分片資訊

檢視分片清單資訊可以看到test索引的5個分片被分散到多個節點裡面去了。

curl 'http://localhost:9200/_cat/shards'           
Docker搭建Elasticsearch6.8.15叢集環境

4.4 查詢

通過主節點對test索引進行查詢。

根據id進行查詢。

curl -X POST -H 'Content-Type: application/json' -d '{"query": {"terms": {"id": [2]}}}' 'http://localhost:9200/test/_search?pretty=true'           
Docker搭建Elasticsearch6.8.15叢集環境

根據name進行查詢。

curl -X POST -H 'Content-Type: application/json' -d '{"query": {"match_phrase": {"name": "叔叔"}}}' 'http://localhost:9200/test/_search?pretty=true'           
Docker搭建Elasticsearch6.8.15叢集環境

5. 總結

今天福哥帶着大家學習了使用Docker基于ES6搭建ES叢集的方法,ES叢集在高可用方面和擴容方面要比ES單機要強太多了。

不過,ES叢集的維護也需要更多的知識和技巧,後面福哥會陸續将ES叢集的各種維護技巧教給大家,敬請期待~~

https://tongfu.net/home/35/blog/513851.html