1. 程式人生 > >【ES】ElasticSearch 叢集

【ES】ElasticSearch 叢集

ES(ElasticSearch)叢集基礎知識02


叢集結構

節點:

一個執行中的 Elasticsearch 例項稱為一個 節點

 

叢集:

是由一個或者多個擁有相同 cluster.name 配置的節點組成, 它們共同承擔資料和負載的壓力

當有節點加入叢集中或者從叢集中移除節點時,叢集將會重新平均分佈所有的資料。

 

單節點叢集:

僅啟動一個單獨的節點,構成一個單節點叢集

 

空節點叢集:

叢集中至於一個節點,且裡面沒有任何資料和索引

 

上圖只有一個節點,節點內沒有資料和索引

上圖有一個節點,但是節點內有一個索引(3個主分片)

 

主節點:

被選中用來管理叢集內所有變更(索引的增加、刪除,節點的增加刪除)的節點。

主節點不需要涉及文件級別的變更和搜尋等操作。所以當叢集只擁有一個主節點的情況下,即使流量的增加它也不會成為瓶頸。

請求可以傳送到叢集中的任何節點(含主節點)每個節點都知道任意文件儲存的位置,能夠將我們的請求直接轉發到儲存我們所需文件的節點

 

啟動多個節點

啟動單個節點方式一致。

統一機器:只要cluster.name 配置相同就可以自動識別加入叢集並平衡資源

不同機器:需要配置

單播主機列表

 

分片與索引

分片:

ES的底層物理工作單元,資料儲存的容器,全部資料可以有多個分片儲存。

一個分片是一個 Lucene 的例項,以及它本身就是一個完整的搜尋引擎

分片是一個功能完整的搜尋引擎,它擁有使用一個節點上的所有資源的能力

應用程式通過索引與其間接打交道

 

索引:

儲存相關資料的地方,當需要新增資料時會用到。

本質為物理分片的邏輯名稱空間

應用程式直接與其打交道

 

主分片:

主分片簡單解釋為已儲存文件的源,索引內任意文件都屬於某一個主分片。

主分片個數決定了索引能夠儲存的文件最大數,而單個主分片能夠儲存的最大文件數由Integer.MAX_VALUE - 128 決定,具體值需要參考使用場景。

 

副分片:

副分片是主分片的一個拷貝,用於資料容災以及平衡負載,可提供搜尋和返回文件等讀操作的服務。

一般情況下副分片的個數要比主分片多(倍數增加),個別情況(叢集亞健康yellow)下存在部分主分片無副分片的情形。

當主分片故障後,副分片可以轉換成主分片(因此主分片副分片無本質的差異)

上圖一個叢集3個節點,6個分片(3主3副)

 

建立索引與分片設定:

在索引建立的時候就已經確定了主分片數(預設5個主分片),但是副本分片數可以隨時修改。

讓我們在包含一個空節點的叢集內建立名為 blogs 的索引。我們將分配3個主分片和一份副本(每個主分片擁有一個副本分片):

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

 


叢集健康狀態

Elasticsearch 的叢集監控資訊中包含了許多的統計資料,其中最為重要的一項就是叢集健康

它在 status 欄位中展示為 green 、 yellow 或者 red 

檢視方式:

GET /_cluster/health

返回如下:

{
   "cluster_name":          "elasticsearch",
   "status":                "green",
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 0,
   "active_shards":         0,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     0
}

Green

所有的主分片和副本分片都正常執行。

Yellow

所有的主分片都正常執行,但不是所有的副本分片都正常執行。

Red

有主分片沒能正常執行。


叢集擴容與容災

擴容方式:

垂直擴容:通過提升效能的擴容方式

水平擴容:通過增加更多的裝置擴容方式

真正的擴容能力:水平擴容,而ES天生分散式的可以有效的支援水平擴容

 

水平擴容:

單一節點的狀態,3個分片

{
  "cluster_name": "elasticsearch",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 3,
  "active_shards": 3,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 3,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

unassigned_shards:沒有被分配到任何節點的副本數。

啟動第二個節點後的狀態,6個分片

{
  "cluster_name": "elasticsearch",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 3,
  "active_shards": 6,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}

啟動三個節點的狀態,6個分片

 

增加副本擴容

PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

兩倍副本擴容後狀態,9個分片

 

故障容災

刪除一個主節點後,重新分配主節點node2,以及副分片轉換成主分片(R1->P1,R2->P2)

 


參考連結