可搜索快照功能改變了我們對備份數據的查詢方式。以往要查詢備份數據時,要先找到備份數據所在的快照,然後在一個合適的環境中恢復快照,最後再發起請求查詢數據。這個處理路徑很長,而且很消耗時間。可搜索快照功能將大大簡化該處理路徑,節約時間。
角色設置
相信你對節點角色的概念已經有所熟悉。要啓用可搜索快照功能,Easysearch 集羣中必須至少有一個節點擁有 search 角色。參考設置如下。
node.roles: ["search"]
node.search.cache.size: 500mb
- node.roles: 指定節點角色,只有 search 角色的節點才能去搜索快照中的數據。
- node.search.cache.size: 執行快照搜索時,數據緩存大小。
混合角色設置,參考如下。
node.roles: ["master","data","search","ingest"]
node.search.cache.size: 500mb
創建快照
可搜索快照功能使用普通快照作為基礎,創建快照命令不變。比如我創建且備份個 infini 索引。
# 創建 infini 索引
POST infini/_doc
{
"test":"Searchable snapshots"
}
# 創建快照備份 infini 索引
PUT _snapshot/my-fs-repository/1
{
"indices": "infini",
"include_global_state": false
}
創建快照索引
可搜索快照功能的核心是搜索快照中的索引,這一步是通過快照索引實現的。為了和集羣中的普通索引區別開來,我們將實際存儲在快照中的索引稱為快照索引。通過使用 Easysearch 的 \_restore API 並指定 remote_snapshot 存儲類型來創建快照索引。
創建快照索引時,注意名稱不能與當前索引名稱重複。通常我們備份完索引後,可刪除索引釋放節點磁盤空間,創建快照索引時默認使用原來的名稱。
# 刪除 infini 索引釋放磁盤空間
DELETE infini
# 創建快照索引,使用原索引名稱
POST /_snapshot/my-fs-repository/1/_restore
{
"indices": "infini",
"include_global_state": false,
"include_aliases": false,
"storage_type": "remote_snapshot"
}
創建快照索引的命令和還原快照的命令非常相似,關鍵在於 storage_type 參數指定 remote_snapshot 存儲類型。
如果要將快照中的全部索引都創建快照索引,可省略 indices 參數。
如果想在創建快照索引時指定不同的名字,參考下面的命令。
POST /_snapshot/my-fs-repository/1/_restore
{
"indices": "infini",
"include_global_state": false,
"include_aliases": false,
"storage_type": "remote_snapshot",
"rename_pattern": "(infini)",
"rename_replacement": "snapshot-$1"
}
- rename_pattern: 使用此選項指定索引匹配的正則表達式。使用捕獲組重用索引名稱的部分。
- rename_replacement: 使用 $0 包括整個匹配索引名稱,使用 $1 包括第一個捕獲組的內容,等等。
上述命令創建出來的快照索引名稱是 snapshot-infini 。
經過上面一系列的操作,我已經擁有了兩個快照索引。
搜索快照索引
我們通過搜索快照索引達到搜索快照數據的目的,令人開心的是搜索快照索引和搜索普通索引的語法完全一樣。😀
常見問題
如何區分普通索引和快照索引呢?
我們可以通過索引的 settings 信息區分,快照索引的 settings 信息中有 store.type: remote_snapshot 信息,普通索引沒有此信息。
快照索引能寫入數據嗎?
快照索引無法寫入,數據仍然保持在快照格式中存儲在存儲庫中,因此可搜索快照索引本質上是隻讀的。 任何嘗試寫入可搜索快照索引的操作都會導致錯誤。
快照索引不想要了怎麼辦?
直接刪除,需要時再執行創建快照索引流程。此外快照在創建快照索引後,無法直接刪除快照,要先刪除快照索引。
如果您對上述內容有任何疑問,歡迎與我討論。