天天看點

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

簡介

在我們的實際部署中,我們的各個 node(節點)的能力是不一樣的。比如有的節點的計算能力比較強,而且配有高性能的存儲,速度也比較快,同時我們可能有一些 node 的能力稍微差一點,比如計算能力及存儲器的速度都比較差一點。針對這兩種情況,我們其實可以把這兩種節點用來做不同的用途:運算能力較強的節點可以用來做 indexing(建立索引表格)的工作,而那些能力較差一點的節點,我們可以用來做搜尋用途。我們可以把這兩種節點分别叫做:

• hot node:用于支援索引并寫入新文檔

• warm node:用于處理不太頻繁查詢的隻讀索引

這種架構在 Elasticsearch 中,我們稱之為 hot/warm 架構。

Hot node

我們可以使用 hot node 來做 indexing:

• indexing 是 CPU 和 IO 的密集操作,是以熱節點應該是功能強大的伺服器

• 比 warm node 更快的存儲

Warm node

對較舊的隻讀索引使用熱節點:

• 傾向于利用大型附加磁盤(通常是旋轉磁盤)

• 大量資料可能需要其他節點才能滿足性能要求

Shard filtering

Shard filtering 在 Elasticsearch 中,我們可以利用這個能力來把我們想要的 index 放入到我們想要的 node 裡。我們可以使用在 elasticsearch.yml 配置檔案中的:

node.attr 來指定我們 node 屬性:hot 或是 warm。

在 index 的 settings 裡通過 index.routing.allocation 來指定索引(index)到一個滿足要求的 node

為節點配置設定索引有三種規則:

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

就像上面的表格說明的一樣:include 指的是至少包含其中的一個值;exclude 指的是不包含任何值;require 指的是必須包含裡面索引的值。這些值實際上我們用來辨別 node 的 tag。針對自己的配置這些 tag 可以由廠商自己辨別。

辨別 node

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

在上面的圖中,我們辨別 my_temp 屬性為 hot 或是 warm,表明我們的 cluster 中分為兩類:hot 或是 warm。在這裡特别指出:這裡的 my_temp,hot 及 warm 都是我們任意取的可以讓我們記住的屬性及名稱。隻要在使用時和 index.routing.allocation.include index.routing.allocation.exclude 及 index.routing.allocation.require 中的值相對應即可。

配置 index 的 settings

我們可以通過配置在 Index 中的 settings 來配置設定我們的index 到相應的具有哪些屬性的 node 裡,比如:

PUT logs-2019-03
{
  "settings": {
    "index.routing.allocation.require.my_temp": "hot"
  }
}           

在上面我們通過 logs-2019-03 的這個 index 的 settings 來控制這個 index 必須配置設定到具有 hot 屬性的 node裡。

假如我們上面的 index logs-2019-03 由于一些原因不再是目前的用來做 indexing 的 index,比如我們可以通過rollover API 接口來自動滾動我們的 index 名字。我們可以通過如下的指令把該 index 移動到 warm node 裡:

PUT logs-2019-03
{
  "settings": {
    "index.routing.allocation.require.my_temp": "warm"
  }
}           

這樣 Elasticsearch 會自動幫我們把 logs-2019-03 索引移動到 warm node 中,以便直供搜尋之用。

例子

首先,我們我們按照如下的方式來做一個實驗,雖然不能應用于實際的生産環境中:

1、按照“

如何在 Linux,MacOS 及 Windows 上進行安裝 Elasticsearch

”安裝好自己的 Elasticsearh,但是不要運作 Elasticsearch

2、按照“

如何在 Linux 及 MacOS 上安裝 Elastic 棧中的 Kibana

”安裝好自己的 Kibana

3、或者免安裝,一鍵配置

“阿裡雲 Elasticsearch”

,并直接進入

Kibana

在我們完成上面的兩個安裝後,我們分别打開兩個 terminal,然後分别在兩個 terminal 中運作如下的指令:

./bin/elasticsearch -E node.name=node1 -E node.attr.data=hot -Enode.max_local_storage_nodes=2           

上面的指令運作一個名字叫做 node1 的,data 屬性為 hot 的 node。

./bin/elasticsearch -E node.name=node2 -E node.attr.data=warm -Enode.max_local_storage_nodes=2           

上面的指令運作一個名字叫做 node2 的,data 屬性為 hot 的 warm。

我們可以在 Kibana 裡檢視我們的 nodes:

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

我們可以看出來有兩個 node 正在運作:node1 及 node2。如果我們想了解這兩個 node 的更多屬性,我們可以打入如下的指令:

GET _cat/nodeattrs?v&s=name

顯示的結果為:

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

我們可以看到 node 被辨別為 hot node,而 node2 被辨別為 warm node。

接下來,我們運用我們上面指令來把我們的 logs-2019-03 置于我們的 hot node 裡。我們可以通過如下的指令:

PUT logs-2019-03
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0, 
    "index.routing.allocation.require.data": "hot"
  }
}           

運作上面的結果後,可以通過如下的指令來檢視:

GET _cat/shards/logs-*?v&h=index,shard,prirep,state,node&s=index,shard,prirep           
【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

從上面我們可以看出來我們的 logs-2019-03 是配置設定到 node1 上面的。

假如我們由于某種原因,想把 logs-2019-03 配置設定到 node2 上面,那麼該怎麼做呢?我們可以通過如下的指令來實作:

PUT logs-2019-03/_settings
{
  "index.routing.allocation.require.data": "warm"
}           

運作上面的指令顯示的結果是:

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

顯然我們 logs-2019-03 已經成功地移到 node2 了。

針對硬體的 shard filtering

上面我們說了,對于 node.attr 來說,我們可以添加任意的屬性。在上面的我們已經使用 hot / warm 來辨別我們的 my_temp 屬性。其實我們也可以同時定義一些能辨別硬體的屬性 my_server,這個屬性值可以為 small,medium及 large。有多個屬性組成的叢集就像是如下的結構:

【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

那麼這樣的叢集裡的每個 node 可能具有不同的屬性。我們可以通過如下的方法來配置設定 index 到同時具有兩個或以上屬性的 node 裡:

PUT my_index1 
 {
   "settings": {
      "number_of_shards": 2,
       "number_of_replicas": 1, 
       "index.routing.allocation.include.my_server": "medium",             
       "index.routing.allocation.require.my_temp": "hot"
   }
 }           

如上所示,我們把我們的 my_index1 配置設定到這麼一個 node:這個 node 必須具有 hot 屬性,同時也具有 medium 的屬性。針對我們上面顯示的圖檔,隻有 node1 滿足我們的要求。

總結

在今天的這篇文章中,我們介紹了如何使用 shard filtering 來控制我們的 index 的配置設定。在實際的操作中,可能大家會覺得麻煩一點,因為這個需要我們自己來管理這個。這個技術可以和我之前的文章“ Elasticsearch: rollover API ”一起配合使用。Elasticsearch 實際已經幫我做好了。在接下來的文章裡,我會來介紹如何使用 Index life cycle policy 來自動管理我們的 Index。

聲明:本文由原文作者“ Elastic 中國社群布道師——劉曉國”授權轉載,對未經許可擅自使用者,保留追究其法律責任的權利。

出處連結:

https://elasticstack.blog.csdn.net/.
【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

阿裡雲Elastic Stack

】100%相容開源ES,獨有9大能力,提供免費 X-pack服務(單節點價值$6000)

相關活動

更多折扣活動,請

通路阿裡雲 Elasticsearch 官網 阿裡雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費 阿裡雲 Logstash 2核4G首月免費
【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定
【最佳實踐】Elasticsearch 運用 shard filtering 實作冷熱節點索引配置設定

繼續閱讀