[ELK] Elasticsearch
鼠年全馬鐵人挑戰 - WEEK 16
前言
繼續上一篇的ELK筆記,本篇主要近一步筆記ELK中的Elasticsearch
Elasticesearch
Elasticesearch是一個基於RESTful API的架構設計,使用者所有的操作都可以透過HTTP Method如:GET/POST/PUT/DELETE
來完成。
可以簡單的把它定義成分散式叢集架構的非關聯式資料庫,回顧一下上一篇所提到的幾個重要名詞,可以簡單對照資料庫
- node : server
- index : database
- type : table
- fields : columns
- documents : rows
API幾個重要行為
- index: 針對整個
document
,既可以新增又可以更新; - create:只是新增操作,可以用PUT指定ID,或POST不指定ID;
- update:指的是部分更新,官方只是說用POST,請求body裡用script或doc裡包含
document
要更新的部分; - delete和read:就是發
delete
和get
這兩種HTTP Method了
常用的指令
進入Kibana的管理介面中,左側的導覽列找到一個名為Dev Tools
的鈕,點擊之後就可以開始下指令囉!
查看cluster狀態
如果想查看cluster的當前狀態,可以在Kibana的管理介面執行下方指令
1 |
|
會回傳一個JSON格式的資料
更多cluster health可參考官方文件
或是執行下方指令可以查看整個cluster的狀態
1 |
|
查看node狀態
如果想查看node的狀態
1 |
|
在預設情況下只會有一個Node
更多用法可以參考官方文件: Nodes info API、cat nodes API
查看Indice的相關訊息
1 |
|
上圖中的欄位細節
health
: 代表資料點的健康狀態,red
表資料有缺損無法使用;yellow
表資料只有一份沒有shard
,若單一結點壞損無法進行回復;green
表資料有shard
的備援若單點損壞依然可以正常運行檢索status
: 是否啟用index
:index
檢索名稱uuid
: 唯一識別 keypri
: 主要shards
數量rep
: 副本shards
數量docs.count
:index
下總紀錄筆數docs.deleted
: 資料被異動的次數store.size
: 儲存主要資料所佔用的空間pri.store.size
: 儲存副本所佔空間
剛才上述的指令都是在Kibana介面上去操作,不過其實也可以透過cURL的方式來取得回傳資料
到該行指令右邊有個板手的icon,點擊後會跳出下拉式選單,選擇Copy cURL,接著開啟終端機,貼上剛剛的cURL
其他補充
shards
Elasticsearch可以把一個完整的Index
分成多個切片(slice),每個切片(slice)稱作shard
,好處是可以把一個大的Index
拆分成多個,分布到不同的Node(節點)上,構成分布式搜尋,加快處理速度,透過水平擴展(horizontally scale)增加資料儲存的總量。
不過需要注意的是:
- 切分多個
shard
是在Index
的層級上運作。也就是說,slice的數量只能在Index
創建前指定,如果Index
創建後不能更改。 - 每個
shard
可看作是一個獨立的Index
shard
分兩種類型
Primary shard
: 每個Document都存在一個Primary shard
。搜尋document
時,會先在Primary shard
上加上索引值,然後在此shard
的所有副本(replicas
)上加上索引值。索引(Index
)可以包含一個或多個Primary shard
(預設值為5)。建好Index
後,便無法更改Index
中的Primary shard
數量。Replica shard
: 每個Primary shard
可擁有零到多個Replica shard
。有兩個目的: 增加系統Crash的容忍度;如果Primary shard
故障,可以將Replica shard
變更為Primary shard
。預設情況下,每個Primary shard
都有一個Replica shard
,但可以在現有Index
上動態修改Replica shard
數量
replicas
代表Index
副本,白話一點就是備份,而Elasticsearch可以建立多個Index
的副本,Elasticsearch預設就會啟用replicas
值得注意的是:replica的數量是可以動態修改的。
假設一種情況,若今天在其中一台Node server壞掉時,啟用備份的資料,用最快的速度還原原始資料,這是一種在災難復原上常用的手段。
副本的作用一是提高系統的容錯性,當個某個Node或某個Shard損壞或遺失時可以從副本中恢復。二是提高Elasticsearch的查詢效率,Elasticsearch會自動對搜尋要求進行負載平衡。
replicas
相關運作
- 在
Index
層級進行配置。在建立Index
時,可選擇每個shard
可作需要多少個replica
replicas
是根據Index
中的shard
複製的,複製出新的replica shard
- 被複製的
shard
被稱作primary shard primary shard
和replica shard
的集合稱作replication group
來看張範例架構圖
上面的架構圖將一個Index
分割出兩個primary shards
,分別做兩個replica shard
,而primary shards
與其衍生出來的replica shards
形成一個replication group,故此Index
涵蓋兩組replication group
接著來看replica shard
是如何設計來做資料還原
上圖可知,replica shard
不會被放在原始的primary shard
,而是放在不同個Node
裡面,如primary shard A
在Node A
其產生的兩個replica shards
放在Node B
,故Node A
有天突然無法運作時,Node B
中至少還有一個replica shards
可以做資料還原。