Elasticsearch 2.2.0 節點類型詳解

KatieSingle 10年前發布 | 48K 次閱讀 ElasticSearch 搜索引擎

來自: http://my.oschina.net/secisland/blog/618911


    當我們啟動Elasticsearch的實例,就會啟動至少一個節點。相同集群名的多個節點的連接就組成了一個集群,在默認情況下,集群中的每個節點都可以處理http請求,和集群節點的數據傳輸,集群中所有的節點都知道集群中其他所有的節點,可以將客戶端請求轉發到適當的節點。節點有以下類型:

主(master)節點:在一個節點上當node.master設置為True(默認)的時候,它有資格被選作為主節點,控制整個集群。

數據(data)節點:在一個節點上node.data設置為True(默認)的時候。該節點保存數據和執行數據相關的操作,如增刪改查,搜索,和聚合。

客戶端節點:當一個節點的node.master和node.data都設置為false的時候,它既不能保持數據也不能成為主節點,該節點可以作為客戶端節點,可以響應用戶的情況,并把相關操作發送到其他節點。

部落節點: 當一個節點配置tribe.*的時候,它是一個特殊的客戶端,它可以連接多個集群,在所有連接的集群上執行搜索和其他操作。

默認情況下,節點配置是一個主節點和一個數據節點。這是非常方便的小集群,但隨著集群的發展,分離主節點和數據節點將變得非常重要。

節點協調,搜索請求或批量增加索引請求等可能涉及在不同的數據節點上操作。在這些請求會分成兩個階段,一是接收客戶端的請求?,二是協調節點執行相關操作。當數據分散在不同的節點上的時候,協調節點將請求轉發到數據節點,每個數據節點在本地執行請求并把結果傳輸給協調節點,然后協調節點收集各個數據節點的結果轉換成一個單一的請求結果返回。所以需要客戶端有足夠的內存和cpu來處理各個節點的返回結果。

資格節點說明

    主資格節點的主要職責是和集群操作相關的內容,如創建或刪除索引,跟蹤哪些節點是群集的一部分,并決定哪些分片分配給相關的節點。穩定的主節點對集群的健康是非常重要的。默認情況下任何一個集群中的節點都有可能被選為主節點。索引數據和搜索查詢等操作會占用大量的cpu,內存,io資源,為了確保一個集群的穩定,分離主節點和數據節點是一個比較好的選擇。

    雖然主節點也可以協調節點,路由搜索和從客戶端新增數據到數據節點,但最好不要使用這些專用的主節點。一個重要的原則是,盡可能做盡量少的工作。創建一個獨立的主節點的配置為:

node.master: true 
node.data: false

    為了防止數據丟失,配置discovery.zen.minimum_master_nodes設置是至關重要的(默認為1),每個主節點應該知道形成一個集群的最小數量的主資格節點的數量。解析一下:

    假設我們有一個集群。有3個主資格節點,當網絡發生故障的時候,有可能其中一個節點不能和其他節點進行通信了。這個時候,當discovery.zen.minimum_master_nodes設置為1的時候,就會分成兩個小的獨立集群,當網絡好的時候,就會出現數據錯誤或者丟失數據的情況。當discovery.zen.minimum_master_nodes設置為2的時候,一個網絡中有兩個主資格節點,可以繼續工作,另一部分,由于只有一個主資格節點,則不會形成一個獨立的集群,這個時候當網絡回復的時候,節點又會從新加入集群。設置這個值的原則是:

(master_eligible_nodes / 2)+ 1。

這個參數也可以動態設置:

PUT _cluster/settings

{
  "transient": {
    "discovery.zen.minimum_master_nodes": 2
  }
}

本文由賽克 藍德(secisland)原創,轉載請標明作者和出處。

數據節點

    數據節點主要是存儲索引數據的節點,主要對文檔進行增刪改查操作,聚合操作等。數據節點對cpu,內存,io要求較高,在優化的時候需要監控數據節點的狀態,當資源不夠的時候,需要在集群中添加新的節點。數據節點的配置如下:

node.master: false 
node.data: true

客戶端節點

    當主節點和數據節點配置都設置為false的時候,該節點只能處理路由請求,處理搜索,分發索引操作等,從本質上來說該客戶節點表現為智能負載平衡器。獨立的客戶端節點在一個比較大的集群中是非常有用的,他協調主節點和數據節點,客戶端節點加入集群可以得到集群的狀態,根據集群的狀態可以直接路由請求。

警告:添加太多的客戶端節點對集群是一種負擔,因為主節點必須等待每一個節點集群狀態的更新確認!客戶節點的作用不應被夸大?,?數據節點也可以起到類似的作用。配置如下:

node.master: false 
node.data: false

數據節點路徑設置:

    每一個主節點和數據節點都需要知道分片,索引,元數據的物理存儲位置,path.data默認位為 $ES_HOME/data,可以通過配置文件 elasticsearch.yml進行修改,例如:

path.data:  /var/elasticsearch/data

這個設置也可以在命令行上執行,例如:

elasticsearch --path.data /var/elasticsearch/data

這個路徑最好進行單獨配置,這樣Elasticsearch的目錄和數據的目錄就會分開。當刪除了Elasticsearch主目錄的時候,不會影響到數據。通過rpm安裝默認是分來的。

    數據目錄可以被多個節點共享,甚至可以屬于不同的集群,為了防止多個節點共享相同的數據路徑,可以在配置文件elasticsearch.yml中添加:node.max_local_storage_nodes: 1

注意:在相同的數據目錄不要運行不同類型的節點(例如:master, data, client)這會導致意外的數據丟失。

部落節點

    部落節點可以跨越多個集群,它可以接收每個集群的狀態,然后合并成一個全局集群的狀態,它可以讀寫所有節點上的數據,部落節點在elasticsearch.yml中的配置如下:

tribe:
    t1: 
        cluster.name:   cluster_one
    t2: 
        cluster.name:   cluster_two

T1和T2是任意的名字代表連接到每個集群。上面的示例配置兩集群連接,名稱分別是T1和T2。默認情況下部落節點通過廣播可以做為客戶端連接每一個集群。大多數情況下,部落節點可以像單節點一樣對集群進行操作。

注意:以下操作將和單節點操作不同,

如果兩個集群的名稱相同,部落節點只會連接其中一個。

由于沒有主節點,當設置local為true的是,主節點的讀操作會被自動的執行,例如:集群統計,集群健康度。

主節點級別的寫操作將被拒絕,這些應該是在一個集群進行。

部落節點可以通過塊(block)設置所有的寫操作和所有的元數據操作,例如:

tribe:
    blocks:
        write:    true
        metadata: true

部落節點可以也可以在選中的索引塊中進行配置,例如:

tribe:
    blocks:
        write.indices:    hk*,ldn*
        metadata.indices: hk*,ldn*

    當多個集群有相同的索引名的時候,默認情況下,部落的節點將選擇其中一個。這可以通過tribe.on_conflict setting進行配置,可以設置排除那些索引或者指定固定的部落名稱。

    賽克藍德(secisland)后續會逐步對Elasticsearch的最新版本的各項功能進行分析,近請期待。也歡迎加入secisland公眾號進行關注


 本文由用戶 KatieSingle 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!