程式設計隨筆-ElasticSearch知識導圖(6):管理
1. 叢集API
“curl -iXGET " http://192.168.127.100:9200/_cluster/health?pretty=true "”這樣的命令可能大家在日常工作中會經常使用,它用來顯示當前叢集的健康程度,在返回結果中,包含當前叢集有關的一些關鍵資訊(文獻2提到了一個使用“wait_for_status”的小技巧)。
ES提供了類似上面命令的叢集API用於獲取叢集即時狀態與資訊。根據API的URI可分為幾類API,如下圖所示:

叢集API
請注意,“_cluster”API與“_cat”API提供的功能大部分重複,不同的是“_cat”API的輸出結果非JSON格式,對於熟悉*nux的系統管理員來說更加親切。
2. 應用客戶端訪問
除了可使用顯式地HTTP rest請求訪問ES叢集,ES還提供了基於java的兩種客戶端開發包供ES使用者在應用程式碼中呼叫:
- Transport Client:可用於向遠端叢集傳送請求的輕量級傳輸客戶機。它本身並不是ES叢集的一部分,只承擔向叢集傳送請求的職責。
- Node client:使用該客戶端的應用節點作為一個非資料節點加入ES叢集。這個非資料節點並不儲存資料,但它知道叢集中所儲存資料的元資料,可以直接將請求傳送到對應資料節點。
TC客戶端是應用程式與ES叢集之間的橋樑,它瞭解ES的API並可在傳送請求時實現對叢集節點訪問的輪轉(round-robin)。NC客戶端則直接是ES叢集的一部分,對索引、分片資訊都更為了解,這樣在傳送請求時更為精準。
TC客戶端實現了應用程式與ES叢集的解耦,而NC客戶端在效率上更有優勢。應該根據適用場景來選擇:當有多個客戶端(如上千個)需要訪問ES時,建議使用TC客戶端,這樣叢集中不需要增加多個節點;若應用只需要少量的,且長時間與ES叢集保持的連線,可以考慮使用NC客戶端(注意這樣應用程式也可能會繫結在叢集中)。
3. 生產環境的監控
系統運維是生產環境需要解決的首要問題。文獻3強烈建議使用單獨的監控叢集。使用單獨的監控叢集:即使在生產叢集故障的情況下仍可訪問歷史監控資料;並且不會影響生產叢集的效能(典型的CQRS思路)。
ES使用採集器(Collectors)採集資料,並在生產叢集中作一些配置,這些配置可控制採集資料的頻率、配置超時以及在本地儲存的監控資料儲存週期。ES使用匯出器(exporters)來發送監控資料。預設情況下,監控資料使用本地匯出器( local exporter)儲存在同一個生產叢集中,若要將監控資料傳送到監控叢集,需要使用http匯出器( http exporter),並配置好監控叢集的地址與安全憑證(credential)。
在6.5和更高版本中,可以使用Metricbeat來收集和傳送關於Elasticsearch的資料。Metricbeat是需要單獨下載和安裝的工具( https://www.elastic.co/downloads/beats/metricbeat )。在這種方式下,Metricbeat可視為一個嵌入ES生產叢集的運維agent。
下圖展示了一個Elasticsearch使用對elastic棧的監控體系結構。

監控架構
4. 資料備份與恢復
資訊系統的最大災難恐怕就是資料丟失了。ES提供snapshot API,可將叢集中的當前狀態和資料儲存到共享儲存庫(shared repository)中。這個備份過程是“智慧的”:第一個快照儲存資料的完整副本,所有後續快照將儲存現有快照和新資料之間的增量。因而隨著時間的推移,資料會隨著快照資料的改變而增加和刪除。後續備份因為傳輸資料減少,將大大加快速度。
要使用此功能,必須首先建立一個儲存庫來儲存資料,可用的儲存庫可以為:本地檔案系統(或掛載裝置);HDFS;Amazon S3等。
使用如下命令建立本地檔案系統名為“zk_backup”的快照(需要配置“path.repo”屬性):
curl -iXPUT 'localhost:9200/_snapshot/zk_backup?pretty' -H "Content-type: application/json" -d' { "type": "fs", "settings": { "location": "/home/zk/es_backup" } } '
下面我們定義第一個快照的名字為“snapshot_20190301” ,使用下面命令開始資料備份(備份叢集中所有的索引,若備份指定索引請在訊息體中指定):
curl -iXPUT 'localhost:9200/_snapshot/zk_backup/snapshot_20190301?pretty'
在本地目錄“/home/zk/es_backup”可以看到生成如下檔案:
[zk@centos-100 es_backup]$ ls -l 總用量 36 -rw-rw-r--. 1 zk zk494 3月1 17:03 index-0 -rw-rw-r--. 1 zk zk8 3月1 17:03 index.latest drwxrwxr-x. 7 zk zk156 3月1 17:03 indices -rw-rw-r--. 1 zk zk 21587 3月1 17:03 meta--SwJ6wKQTKCgg5-3B3bL3w.dat -rw-rw-r--. 1 zk zk276 3月1 17:03 snap--SwJ6wKQTKCgg5-3B3bL3w.dat
使用快照恢復叢集資料的命令也可簡單,如下所示(若恢復指定索引請在訊息體中指定):
curl –iXPOST 'localhost:9200/_snapshot/zk_backup/snapshot_20190301/ _restore?pretty'
需要注意的是,如果當前叢集中存在於快照同名的索引,系統會報錯。解決方法是刪除當前叢集中同名索引,或使用rename模式修改恢復到叢集中的索引名字(在訊息體中定義)。
5. 參考文獻
- https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
- https://www.elastic.co/guide/en/elastic-stack-overview/current/how-monitoring-works.html