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容器裡面做持久化儲存。
3.3 啟動
準備好了之後就可以啟動ES叢集了。
docker-compose -f docker-compose-es-cluster.yml up -d
檢視節點狀态。
curl 'http://localhost:9200/_cat/nodes'
檢視叢集健康狀态。
curl 'http://localhost:9200/_cluster/health?pretty=true'
檢視主節點狀态,預設情況下叢集hosts的第一個節點會被ES選為主節點。
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'
4.3 檢視分片資訊
檢視分片清單資訊可以看到test索引的5個分片被分散到多個節點裡面去了。
curl 'http://localhost:9200/_cat/shards'
4.4 查詢
通過主節點對test索引進行查詢。
根據id進行查詢。
curl -X POST -H 'Content-Type: application/json' -d '{"query": {"terms": {"id": [2]}}}' 'http://localhost:9200/test/_search?pretty=true'
根據name進行查詢。
curl -X POST -H 'Content-Type: application/json' -d '{"query": {"match_phrase": {"name": "叔叔"}}}' 'http://localhost:9200/test/_search?pretty=true'
5. 總結
今天福哥帶着大家學習了使用Docker基于ES6搭建ES叢集的方法,ES叢集在高可用方面和擴容方面要比ES單機要強太多了。
不過,ES叢集的維護也需要更多的知識和技巧,後面福哥會陸續将ES叢集的各種維護技巧教給大家,敬請期待~~
https://tongfu.net/home/35/blog/513851.html