ES通常以集羣方式工作,這樣做不僅能夠提高 ES的搜索能力還可以處理大數據搜索的能力,同時也增加了系統的 容錯能力及高可用,ES可以實現PB級數據的搜索。 下圖是ES集羣結構的示意圖:
從上圖總結以下概念:
1、結點
ES集羣由多個服務器組成,每個服務器即爲一個Node結點(該服務只部署了一個ES進程)。
2、分片
當我們的文檔量很大時,由於內存和硬盤的限制,同時也爲了提高ES的處理能力、容錯能力及高可用能力,我們將 索引分成若干分片,每個分片可以放在不同的服務器,這樣就實現了多個服務器共同對外提供索引及搜索服務。
一個搜索請求過來,會分別從各各分片去查詢,後將查詢到的數據合併返回給用戶。
3、副本
爲了提高ES的高可用同時也爲了提高搜索的吞吐量,我們將分片複製一份或多份存儲在其它的服務器,這樣即使當 前的服務器掛掉了,擁有副本的服務器照常可以提供服務。
4、主結點
一個集羣中會有一個或多個主結點,主結點的作用是集羣管理,比如增加節點,移除節點等,主結點掛掉後ES會重 新選一個主結點。
5、結點轉發
每個結點都知道其它結點的信息,我們可以對任意一個結點發起請求,接收請求的結點會轉發給其它結點查詢數據。
搭建集羣
下邊的例子實現創建一個2結點的集羣,並且索引的分片我們設置2片,每片一個副本。
結點的三個角色
主結點:master節點主要用於集羣的管理及索引 比如新增結點、分片分配、索引的新增和刪除等。 數據結點: data 節點上保存了數據分片,它負責索引和搜索操作。 客戶端結點:client 節點僅作爲請求客戶端存在,client的 作用也作爲負載均衡器,client 節點不存數據,只是將請求均衡轉發到其它結點。
通過下邊兩項參數來配置結點的功能:
node.master: #是否允許爲主結點 node.data: #允許存儲數據作爲數據結點 node.ingest: #是否允許成爲協調節點,
四種組合方式:
master=true,data=true:即是主結點又是數據結點
master=false,data=true:僅是數據結點 master=true,data=false:僅是主結點,不存儲數據 master=false,data=false:即不是主結點也不是數據結點,此時可設置ingest爲true表示它是一個客戶端。
創建結點1
解壓elasticsearch-6.2.1.zip 到 F:\devenv\elasticsearch\es-cloud-1\elasticsearch-6.2.1 結點1對外服務的http端口是:9200
集羣管理端口是9300 配置elasticsearch.yml 結點名:my-elasticesearch
elasticsearch.yml內容如下
cluster.name: my-elasticesearch
node.name: node_1
network.host: 127.0.0.1
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
啓動結點1
創建結點2
cluster.name: my-elasticesearch
node.name: node_2
network.host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
node.master: true
node.data: true
啓動結點2
注意:每個結點安裝IK分詞器
這樣就完了了集羣,對其他一個結點ip請求,相對對集羣請求。
集羣的健康
通過訪問 GET /_cluster/health 來查看Elasticsearch 的集羣健康情況。 用三種顏色來展示健康狀態: green 、 yellow 或者 red 。 green:所有的主分片和副本分片都正常運行。 yellow:所有的主分片都正常運行,但有些副本分片運行不正常。 red:存在主分片運行不正常。