ES通常以集群模式工作,既能提高ES的搜索能力,又能處理大數據的搜索能力。同時也增加了系統的容錯能力和高可用性,es可以搜索PB級數據。
下圖是ES集群結構的示意圖:
總結上圖中的以下概念:
1和節點
ES集群由多個服務器組成,每個服務器都是壹個節點(在此服務中只部署了壹個ES進程)。
2.分裂
當我們擁有大量文檔時,由於內存和硬盤的限制,同時為了提高ES的處理能力、容錯能力和高可用性,我們將索引分成若幹段,每段可以放在不同的服務器上,從而實現多臺服務器可以對外提供索引和搜索服務。
當壹個搜索請求到來時,會從每個片段中進行查詢,最後將查詢到的數據進行合並,返回給用戶。
3.復制
為了提高ES的高可用性和搜索的吞吐量,我們會分片復制壹個或多個副本,存儲在其他服務器上,這樣即使當前服務器掛機,有副本的服務器也能照常提供服務。
4.主網點
壹個集群中將有壹個或多個主節點。主節點的角色是集群管理,例如添加節點和刪除節點。主節點掛斷後,ES會重新選擇壹個主節點。
5.節點轉發
每個節點都知道其他節點的信息。我們可以向任何壹個節點發出請求,收到請求的節點會轉發給其他節點進行數據查詢。
以下示例實現了雙節點集群的創建,我們設置了2個索引片,每個片壹個副本。
主節點:主節點主要用於集群管理和索引,如添加節點、分配段、添加和刪除索引等。數據節點:數據節點存儲數據片段,負責索引和搜索操作。客戶端節點:客戶端節點只是作為請求客戶端而存在,客戶端的角色也是作為負載均衡器。客戶端節點不存儲數據,只是以平衡的方式將請求轉發給其他節點。
通過以下兩個參數配置節點的功能:
Node.master: #是否允許作為主節點?
Node.data: #允許將數據存儲為數據節點。
Node.ingest: #是否允許作為協作節點,
四種組合:
Master=true,data=true:它既是主節點,也是數據節點。
Master=false,data=true:僅數據節點。
Master=true,data=false:它只是主節點,不存儲數據。
Master=false,data=false:它既不是主節點,也不是數據節點。此時,可以將其設置為true,以表明它是客戶端。
解壓彈性搜索-6.2.1.zip。
節點1對外服務的http端口為9200。
集群管理端口是9300。
配置elasticsearch.yml
節點名稱:xc_node_1
Elasticsearch.yml內容如下
操作與節點1相同。
1)用head連接其中壹個節點。
上圖顯示已經成功創建了兩個節點。
2)在下面創建壹個索引庫,有***2個段,每個段壹個副本。
從上圖可以看出,* * *有四個切片,其中兩個是重復的。
3)每個節點配有IK斷字器。
通過訪問GET /_cluster/health檢查Elasticsearch的集群健康狀況。
用三種顏色表示健康狀況:綠色、黃色或紅色。
綠色:所有主切片和副本切片運行正常。
黃色:所有主切片運行正常,但壹些副本切片運行不正常。
紅色:有壹個主切片工作不正常。
1)創建壹個地圖並將其寫入文檔。
連接這些節點中的任何壹個,創建壹個地圖並將其寫入文檔。
2)搜索
向另壹個節點發起搜索請求以查詢所有數據。
3)關閉壹個節點
ES將重新選擇壹個主節點(假設在配置節點時它可以是主節點)。
這時候向活節點發起搜索請求還是正常的。