1. 程式人生 > >Elasticsearch 分片叢集原理、搭建、與SpringBoot整合

Elasticsearch 分片叢集原理、搭建、與SpringBoot整合

單機es可以用,沒毛病,但是有一點我們需要去注意,就是高可用是需要關注的,一般我們可以把es搭建成叢集,2臺以上就能成為es叢集了。叢集不僅可以實現高可用,也能實現海量資料儲存的橫向擴充套件。

新的閱讀體驗地址: http://www.zhouhong.icu/post/138

一、Elasticsearch分片機制:

  • 每個索引可以被分片,每個主分片都包含索引的資料。
  • 副本分片是主分片的備份,主掛了,備份還是可以訪問,這就需要用到叢集了。
  • 同一個分片的主與副本是不會放在同一個伺服器裡的,因為一旦宕機,這個分片就沒了。

如下圖:左邊每個索引主備分片都會分配在三臺伺服器上的不同節點上面,右圖粗方框表示主分片,細節點表示備節點。

二、搭建Elasticsearch叢集

1、前置操作
  • ​ES中之前的data目錄,一定要清空,這裡麵包含了原先的索引庫資料。
  • 使用三臺伺服器:
  • 192.168.1.184(主), 192.168.1.185(從), 192.168.1.186(從)
  • 關於Elasticsearch單機的簡介、安裝配置請轉到:http://www.zhouhong.icu/post/128
2、配置叢集
  • 修改每臺伺服器上ES的elasticsearch.yml這個配置檔案如下,每臺伺服器node.name不一樣分別為es-node1、es-node2、es-node3.

# 配置叢集名稱,保證每個節點的名稱相同,如此就能都處於一個叢集之內了
cluster.name: es-cluster
# 每一個節點的名稱,必須不一樣
node.name: es-node1
# http埠(使用預設即可)
http.port: 9200
# 主節點,作用主要是用於來管理整個叢集,負責建立或刪除索引,管理其他非master節點(相當於企業老總)
node.master: true
# 資料節點,用於對文件資料的增刪改查
node.data: true
# 叢集列表
discovery.seed_hosts: ["192.168.1.184", "192.168.1.185", "192.168.1.186"]
# 啟動的時候使用一個master節點,未指定ES會進行選舉
cluster.initial_master_nodes: ["es-node1"]
3、最後可以通過如下命令檢視配置檔案的內容:(過濾掉“#”後面的註釋)

more elasticsearch.yml | grep ^[^#]
4、切換到esuser後啟動,訪問叢集各個節點,檢視資訊:
  • http://192.168.1.184:9200/
  • http://192.168.1.185:9200/
  • http://192.168.1.186:9200/

主節點宕機之後會從生下的兩個從節點選舉新的主節點,主節點恢復後成為從節點。

三、Elasticsearch叢集腦裂現象

1、什麼是腦裂
  • 如果發生網路中斷或者伺服器宕機,那麼叢集會有可能被劃分為兩個部分,各自有自己的master來管理,那麼這就是腦裂。

2、腦裂解決方案
  • master主節點要經過多個master節點共同選舉後才能成為新的主節點。就跟班級裡選班長一樣,並不是你1個人能決定的,需要班裡半數以上的人決定。
  • 解決實現原理:半數以上的節點同意選舉,節點方可成為新的master。

discovery.zen.minimum_master_nodes=(N/2)+1
  • N為叢集的中master節點的數量,也就是那些 node.master=true 設定的那些伺服器節點總數。
3、ES 7.X
  • 在最新版7.x中,minimum_master_node這個引數已經被移除了,這一塊內容完全由es自身去管理,這樣就避免了腦裂的問題,選舉也會非常快。‘’

四、Elasticsearch叢集的文件讀寫原理

  • 文件寫原理:p1,p2,p0是主節點,r0,r1,r2是副本節點
  • 如果客戶端選擇了中間節點進行寫資料,那這個節點就會變成協調節點,接受使用者請求,會對文件進行路由,計算這個文件會寫入到哪個主分片中,有主分片把資料同步到副本分片,都寫入完成之後,在跳回到協調節點,由協調節點相應請求。

  • 文件讀原理:p1,p2,p0是主節點,r0,r1,r2是副本節點
  • 如果客戶端請求到了第一個節點,那第一個節點也會變成協調節點,然後根據文件的資料進行路由,然後從主分片或者副本分片輪詢讀資料。不管從主分片還是副本分片讀取資料,最後都會跳回到協調節點,由協調節點相應客戶端

五、Elasticsearch叢集與SpringBoot整合

1、建立工程,引入依賴