編程隨筆-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的系統管理員來講更加親切。html

2. 應用客戶端訪問

  除了可以使用顯式地HTTP rest請求訪問ES集羣,ES還提供了基於java的兩種客戶端開發包供ES用戶在應用代碼中調用:java

  • 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棧的監控體系結構。
監控架構json

4. 數據備份與恢復

  信息系統的最大災難恐怕就是數據丟失了。ES提供snapshot API,可將集羣中的當前狀態和數據保存到共享存儲庫(shared repository)中。這個備份過程是「智能的」:第一個快照保存數據的完整副本,全部後續快照將保存現有快照和新數據之間的增量。於是隨着時間的推移,數據會隨着快照數據的改變而增長和刪除。後續備份由於傳輸數據減小,將大大加快速度。
  要使用此功能,必須首先建立一個存儲庫來保存數據,可用的存儲庫能夠爲:本地文件系統(或掛載設備);HDFS;Amazon S3等。
  使用以下命令創建本地文件系統名爲「zk_backup」的快照(須要配置「path.repo」屬性):centos

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

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

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):管理curl

相關文章
相關標籤/搜索