iT邦幫忙

0

ELK node 主從寫入問題

  • 分享至 

  • xImage

各位好:

最近再搭 ELK8.10.1 cluster,但是碰到了主從上的問題。
當我在 172.31.19.160 上把 kibana UI打開後,
使用 dev tool 創建 index,
不懂的是 Kibana 這時候還是可以寫入,
但是我從我的 cluster info 找到的主 es 是 172.31.24.34 這一台機器。

照理來說現在 172.31.19.160 是從機,而 kibana 也是綁 172.31.19.160,
不知道為甚麼資料可以"寫"入從機當中。

kibana.yml 
elasticsearch.hosts: ['http://172.31.19.160:9200']

cluster Info
[root@ip-172-31-24-34 ~]# curl -X GET "https://localhost:9200/_cat/nodes?v"  -u elastic:$ES_PASSWORD -k
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
172.31.19.160           14          93  43    0.72    0.33     0.14 cdfhilmrstw -      ip-172-31-19-160.ap-northeast-1.compute.internal
172.31.26.48            29          95   2    0.00    0.00     0.03 cdfhilmrstw -      ip-172-31-26-48.ap-northeast-1.compute.internal
172.31.24.34            23          97   4    0.14    0.21     0.20 cdfhilmrstw *      ip-172-31-24-34.ap-northeast-1.compute.internal
173.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
blank
iT邦新手 3 級 ‧ 2023-09-23 19:01:38
最佳解答

抱歉我編輯一下我剛剛的留言
發現可能誤會你問的問題

client發送請求到任一node時,他們都能進行資料的轉發
不是只有master node能處理

我是用 mysql 跟 redis 下去想的。
也沒說寫到 mysql-slave 跟 redis-slave 可以轉發。
如果 es 比較不一樣的話,可以用跟從機溝通後轉發到主結點,那為什麼需要分主從呢?

blank iT邦新手 3 級 ‧ 2023-09-23 20:03:03 檢舉

應該說,會看請求的類型來決定是否要轉發到master node或是其他特定node
master node有他獨有的任務要處理
甚至也可以在設定中分派不同的node來進行不同的任務
例如data node等等
任何node都可以接收請求不代表處理這些請求都是在這個node完成
並且這樣的設計也能提高併發性~

好的,謝謝你。

2
Ray
iT邦大神 1 級 ‧ 2023-09-23 22:07:45

這件事有點複雜, 因為 ELK 的 Master, 跟你以為的 Master 不一樣.

首先, Elasticsearch 的 Node 類型, 總共有下面這幾種角色 (8.10 版):

master
data
data_content
data_hot
data_warm
data_cold
data_frozen
ingest
ml
remote_cluster_client
transform

Elasticsearch 要求每一個 Cluster 最少必須要有這兩種 Node 角色: Master 和 Data, 其他的都是選項, 可有可無.(或依照任務需求來配置)

但要注意幾個原則:

  1. 在不考慮效能前提下, 一個 Node 可以同時兼任多種角色
  2. 每一個 Node 都可以提供 HTTP 和 Transport 服務. 其中 HTTP 服務指的是: 接收來自 Client 端的 RESTful API 請求; 而 Transport 服務則是: 處理各 Node 之間的互相通訊請求.

接下來就要看 Node 角色 (Role) 的定義了;
Master 只負責以下的工作:

  • 管理 Cluster 內部的關鍵訊息傳遞
  • 建立或刪除 Index 檔案
  • 追蹤每個 Node 成員的狀態並更新到 Cluster
  • 將 Shard 分配到合適的 Node 主機

他比較像是台鐵的行控中心, 負責調度軌道上所有火車的行進與時刻, 含鐵軌的轉接; 但是調度中心並不會處理來自乘客的要求: 買票/查空位/退票/換票...等工作, 這些都不是 Master 在處理的. 這點跟你過往所認知的 Master 功能有很大差異.

Master 還分兩種: Dedicated Master 和 Master-eligible node.
身上沒有兼任多種任務角色的 Master Node 就被稱為: Dedicated Master; 若他同時兼任其他角色的話, 就被稱為 Master-eligible node. 但是....

Elasticsearch 官方並沒有設計 Slave 這個角色,(這裡是官方的名詞定義, 裡面完全找不到 Slave 這個字: https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html ), 他也只把自己稱為 Cluster, 而非 Master-Slave 架構.

所以不要以為: 當某個 Node 不是 Master 的時候, 他就會變成 Slave 角色. 相反的, 當他不是 Master 的時候, 他只會變成 Master-eligible node, 去做別的事情 (Elasticsearch 內部是很忙的...), 而不是變成 Slave 來等待備援 Master 的工作.

如果 Master 掛掉, 所有 Master-eligible node 會進行選舉, 重新推派一個 Node 出來當 Master.

至於你平常對 Index 內容進行的各種 CRUD 操作, 則是由 Data node 負責處理.(就像前面舉例的台鐵客服窗口, 負責處理客戶來的需求, 但他們不負責調度火車) 前面也提過: 一個 node 可以有多種角色. 所以一個 Node 有可能是 Master+Data, 也有可能是 Master-eligible+Data, 也可能只有單一的 Data 或只有 Master 角色, 要看架構師如何規劃與定義每一台 Node 用途.

對 Elasticsearch 來說, Kibana 就是某種 Client, 透過 REST API 來跟他要資料; 前面也提過: 任何一個 Node 都可以對 Client 提供 HTTP REST 的服務, 所以她並不像你過去所學的那些 DB: 一定要從 Master 連線進來才能處理資料的 CRUD;

相反的, 他每一個 Node 都可以接受 Client 要求, 但是收到 Query 之後, 有些工作會需要轉給特定的 Node 去執行, 這時候就由 Master 負責分派這些工作.

/images/emoticon/emoticon06.gif

感謝雷神,這樣講確實清楚多了,就是我以前認知的 Master 不是我現在面對 Es 的 Master 概念。

補充所提到的關於 Node 腳色的官方文檔連結,
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

原本確實有讀到 Node 腳色定位這一章,只是沒看到文件對於 cluster 的解釋。

我要發表回答

立即登入回答