Elasticsearch-集羣的原理

空集羣

啓動了一個單獨的節點,裏面不包含任何的數據和 索引,那咱們的集羣看起來以下:
clipboard.pngnode

一個運行中的 Elasticsearch 實例稱爲一個 節點
而集羣是由一個或者多個擁有相同 cluster.name 配置的節點組成,
它們共同承擔數據和負載的壓力。當有節點加入集羣中或者從集羣中移除節點時,集羣將會從新平均分佈全部的數據。elasticsearch

當一個節點被選舉成爲 主節點 時, 它將負責管理集羣範圍內的全部變動,例如增長、刪除索引,或者增長、刪除節點等。
而主節點並不須要涉及到文檔級別的變動和搜索等操做,因此當集羣只擁有一個主節點的狀況下,即便流量的增長它也不會成爲瓶頸。 任何節點均可以成爲主節點。咱們的示例集羣就只有一個節點,因此它同時也成爲了主節點。性能

集羣健康

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
}

status 字段指示着當前集羣在整體上是否工做正常。它的三種顏色含義以下:大數據

  • green 全部的主分片和副本分片都正常運行。
  • yellow 全部的主分片都正常運行,但不是全部的副本分片都正常運行。
  • red 有主分片沒能正常運行。

添加索引

往 Elasticsearch 添加數據時須要用到 索引 —— 保存相關數據的地方。
索引其實是指向一個或者多個物理 分片 的 邏輯命名空間 。搜索引擎

一個 分片 是一個底層的 工做單元 ,一個分片是一個 Lucene 的實例,以及它自己就是一個完整的搜索引擎。
咱們的文檔被存儲和索引到分片內,可是應用程序是直接與索引而不是與分片進行交互。spa

Elasticsearch 是利用分片將數據分發到集羣內各處的。
分片是數據的容器,文檔保存在分片內,分片又被分配到集羣內的各個節點裏。 code

一個分片能夠是 主分片或者 副本分片。 索引內任意一個文檔都歸屬於一個主分片,因此主分片的數目決定着索引可以保存的最大數據量。blog

在索引創建的時候就已經肯定了主分片數,可是副本分片數能夠隨時修改。索引

索引在默認狀況下會被分配5個主分片, 可是爲了演示目的,咱們將分配3個主分片和一份副本(每一個主分片擁有一個副本分片):ip

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

故障轉移

若是咱們啓動了第二個節點,如今的集羣會像下面展現的那樣:

clipboard.png
當第二個節點加入到集羣后,3個 副本分片 將會分配到這個節點上——每一個主分片對應一個副本分片。 這意味着當集羣內任何一個節點出現問題時,咱們的數據都無缺無損。

全部新近被索引的文檔都將會保存在主分片上,
而後被並行的複製到對應的副本分片上。這就保證了咱們既能夠從主分片又能夠從副本分片上得到文檔

水平擴展

若是咱們啓動了第三個節點,那麼集羣可能會像以下所示的那樣從新組織自身的結構:

clipboard.png

Node 1 和 Node 2 上各有一個分片被遷移到了新的 Node 3 節點,如今每一個節點上都擁有2個分片,而不是以前的3個。 這表示每一個節點的硬件資源(CPU, RAM, I/O)將被更少的分片所共享,每一個分片的性能將會獲得提高。

分片是一個功能完整的搜索引擎,它擁有使用一個節點上的全部資源的能力。 咱們這個擁有6個分片(3個主分片和3個副本分片)的索引能夠最大擴容到6個節點,每一個節點上存在一個分片,而且每一個分片擁有所在節點的所有資源。

在運行中的集羣上是能夠動態調整副本分片數目的 ,咱們能夠按需伸縮集羣。
讓咱們把副本數從默認的 1 增長到 2

clipboard.png

應對故障

關閉一個節點後的集羣

clipboard.png

咱們關閉的節點是一個主節點。而集羣必須擁有一個主節點來保證正常工做,因此發生的第一件事情就是選舉一個新的主節點: Node 2 。

在咱們關閉 Node 1 的同時也失去了主分片 1 和 2 ,而且在缺失主分片的時候索引也不能正常工做。 若是此時來檢查集羣的情況,咱們看到的狀態將會爲 red :不是全部主分片都在正常工做。

幸運的是,在其它節點上存在着這兩個主分片的完整副本, 因此新的主節點當即將這些分片在 Node 2 和 Node 3 上對應的副本分片提高爲主分片, 此時集羣的狀態將會爲 yellow 。 這個提高主分片的過程是瞬間發生的,如同按下一個開關通常。

相關文章
相關標籤/搜索