1. 集群API
??“curl -iXGET "http://192.168.127.100:9200/_cluster/health?pretty=true"”這樣的命令可能大家在日常工作中會(huì)經(jīng)常使用,它用來顯示當(dāng)前集群的健康程度,在返回結(jié)果中,包含當(dāng)前集群有關(guān)的一些關(guān)鍵信息(文獻(xiàn)2提到了一個(gè)使用“wait_for_status”的小技巧)。
??ES提供了類似上面命令的集群API用于獲取集群即時(shí)狀態(tài)與信息滥壕。根據(jù)API的URI可分為幾類API,如下圖所示:
??請(qǐng)注意金踪,“_cluster”API與“_cat”API提供的功能大部分重復(fù)胡岔,不同的是“_cat”API的輸出結(jié)果非JSON格式,對(duì)于熟悉*nux的系統(tǒng)管理員來說更加親切屋剑。
2. 應(yīng)用客戶端訪問
??除了可使用顯式地HTTP rest請(qǐng)求訪問ES集群,ES還提供了基于java的兩種客戶端開發(fā)包供ES用戶在應(yīng)用代碼中調(diào)用:
- Transport Client:可用于向遠(yuǎn)程集群發(fā)送請(qǐng)求的輕量級(jí)傳輸客戶機(jī)芋簿。它本身并不是ES集群的一部分与斤,只承擔(dān)向集群發(fā)送請(qǐng)求的職責(zé)。
- Node client:使用該客戶端的應(yīng)用節(jié)點(diǎn)作為一個(gè)非數(shù)據(jù)節(jié)點(diǎn)加入ES集群齐唆。這個(gè)非數(shù)據(jù)節(jié)點(diǎn)并不保存數(shù)據(jù)锭弊,但它知道集群中所存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù)味滞,可以直接將請(qǐng)求發(fā)送到對(duì)應(yīng)數(shù)據(jù)節(jié)點(diǎn)。
??TC客戶端是應(yīng)用程序與ES集群之間的橋梁钮呀,它了解ES的API并可在發(fā)送請(qǐng)求時(shí)實(shí)現(xiàn)對(duì)集群節(jié)點(diǎn)訪問的輪轉(zhuǎn)(round-robin)剑鞍。NC客戶端則直接是ES集群的一部分,對(duì)索引爽醋、分片信息都更為了解蚁署,這樣在發(fā)送請(qǐng)求時(shí)更為精準(zhǔn)。
??TC客戶端實(shí)現(xiàn)了應(yīng)用程序與ES集群的解耦蚂四,而NC客戶端在效率上更有優(yōu)勢(shì)光戈。應(yīng)該根據(jù)適用場(chǎng)景來選擇:當(dāng)有多個(gè)客戶端(如上千個(gè))需要訪問ES時(shí)哪痰,建議使用TC客戶端,這樣集群中不需要增加多個(gè)節(jié)點(diǎn)久妆;若應(yīng)用只需要少量的晌杰,且長(zhǎng)時(shí)間與ES集群保持的連接,可以考慮使用NC客戶端(注意這樣應(yīng)用程序也可能會(huì)綁定在集群中)筷弦。
3. 生產(chǎn)環(huán)境的監(jiān)控
??系統(tǒng)運(yùn)維是生產(chǎn)環(huán)境需要解決的首要問題肋演。文獻(xiàn)3強(qiáng)烈建議使用單獨(dú)的監(jiān)控集群。使用單獨(dú)的監(jiān)控集群:即使在生產(chǎn)集群故障的情況下仍可訪問歷史監(jiān)控?cái)?shù)據(jù)奸笤;并且不會(huì)影響生產(chǎn)集群的性能(典型的CQRS思路)惋啃。
??ES使用采集器(Collectors)采集數(shù)據(jù)哼鬓,并在生產(chǎn)集群中作一些配置监右,這些配置可控制采集數(shù)據(jù)的頻率、配置超時(shí)以及在本地存儲(chǔ)的監(jiān)控?cái)?shù)據(jù)保存周期异希。ES使用導(dǎo)出器(exporters)來發(fā)送監(jiān)控?cái)?shù)據(jù)健盒。默認(rèn)情況下,監(jiān)控?cái)?shù)據(jù)使用本地導(dǎo)出器( local exporter)存儲(chǔ)在同一個(gè)生產(chǎn)集群中称簿,若要將監(jiān)控?cái)?shù)據(jù)發(fā)送到監(jiān)控集群扣癣,需要使用http導(dǎo)出器( http exporter),并配置好監(jiān)控集群的地址與安全憑證(credential)。
??在6.5和更高版本中憨降,可以使用Metricbeat來收集和發(fā)送關(guān)于Elasticsearch的數(shù)據(jù)父虑。Metricbeat是需要單獨(dú)下載和安裝的工具(https://www.elastic.co/downloads/beats/metricbeat)。在這種方式下授药,Metricbeat可視為一個(gè)嵌入ES生產(chǎn)集群的運(yùn)維agent士嚎。
??下圖展示了一個(gè)Elasticsearch使用對(duì)elastic棧的監(jiān)控體系結(jié)構(gòu)。
4. 數(shù)據(jù)備份與恢復(fù)
??信息系統(tǒng)的最大災(zāi)難恐怕就是數(shù)據(jù)丟失了悔叽。ES提供snapshot API莱衩,可將集群中的當(dāng)前狀態(tài)和數(shù)據(jù)保存到共享存儲(chǔ)庫(kù)(shared repository)中。這個(gè)備份過程是“智能的”:第一個(gè)快照保存數(shù)據(jù)的完整副本娇澎,所有后續(xù)快照將保存現(xiàn)有快照和新數(shù)據(jù)之間的增量笨蚁。因而隨著時(shí)間的推移,數(shù)據(jù)會(huì)隨著快照數(shù)據(jù)的改變而增加和刪除趟庄。后續(xù)備份因?yàn)閭鬏敂?shù)據(jù)減少括细,將大大加快速度。
??要使用此功能戚啥,必須首先創(chuàng)建一個(gè)存儲(chǔ)庫(kù)來保存數(shù)據(jù)奋单,可用的存儲(chǔ)庫(kù)可以為:本地文件系統(tǒng)(或掛載設(shè)備);HDFS虑鼎;Amazon S3等辱匿。
??使用如下命令建立本地文件系統(tǒng)名為“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"
}
}
'
??下面我們定義第一個(gè)快照的名字為“snapshot_20190301” 键痛,使用下面命令開始數(shù)據(jù)備份(備份集群中所有的索引,若備份指定索引請(qǐng)?jiān)谙Ⅲw中指定):
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
??使用快照恢復(fù)集群數(shù)據(jù)的命令也可簡(jiǎn)單匾七,如下所示(若恢復(fù)指定索引請(qǐng)?jiān)谙Ⅲw中指定):
curl –iXPOST 'localhost:9200/_snapshot/zk_backup/snapshot_20190301/ _restore?pretty'
??需要注意的是絮短,如果當(dāng)前集群中存在于快照同名的索引,系統(tǒng)會(huì)報(bào)錯(cuò)昨忆。解決方法是刪除當(dāng)前集群中同名索引丁频,或使用rename模式修改恢復(fù)到集群中的索引名字(在消息體中定義)。
5. 參考文獻(xiàn)
- 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
本系列文章:
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(1):全景
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(2):分布式架構(gòu)
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(3):映射
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(4):搜索
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(5):聚合
編程隨筆-ElasticSearch知識(shí)導(dǎo)圖(6):管理