編程隨筆-ElasticSearch知識導圖(6):管理 1. 集羣API 2. 應用客戶端訪問 3. 生產環境的監控 4. 數據備份與恢復 5. 參考文獻 本系列文章:

1. 集羣API

  “curl -iXGET "http://192.168.127.100:9200/_cluster/health?pretty=true"”這樣的命令可能大家在日常工作中會經常使用,它用來顯示當前集羣的健康程度,在返回結果中,包含當前集羣有關的一些關鍵信息(文獻2提到了一個使用“wait_for_status”的小技巧)。
  ES提供了類似上面命令的集羣API用於獲取集羣即時狀態與信息。根據API的URI可分爲幾類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 zk   494 3月   1 17:03 index-0
-rw-rw-r--. 1 zk zk     8 3月   1 17:03 index.latest
drwxrwxr-x. 7 zk zk   156 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 zk   276 3月   1 17:03 snap--SwJ6wKQTKCgg5-3B3bL3w.dat

  使用快照恢復集羣數據的命令也可簡單,如下所示(若恢復指定索引請在消息體中指定):

curl –iXPOST 'localhost:9200/_snapshot/zk_backup/snapshot_20190301/ _restore?pretty'

  需要注意的是,如果當前集羣中存在於快照同名的索引,系統會報錯。解決方法是刪除當前集羣中同名索引,或使用rename模式修改恢復到集羣中的索引名字(在消息體中定義)。

5. 參考文獻

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
  2. Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
  3. https://www.elastic.co/guide/en/elastic-stack-overview/current/how-monitoring-works.html

本系列文章:

編程隨筆-ElasticSearch知識導圖(1):全景
編程隨筆-ElasticSearch知識導圖(2):分佈式架構
編程隨筆-ElasticSearch知識導圖(3):映射
編程隨筆-ElasticSearch知識導圖(4):搜索
編程隨筆-ElasticSearch知識導圖(5):聚合
編程隨筆-ElasticSearch知識導圖(6):管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章