ElasticSearch入門 官方文件翻譯 - 2.Exploring Your Cluster

b10l07發表於2017-09-29

叢集探索

REST API

現在,我們的節點(叢集)已經跑起來了,下一步想著怎麼跟它溝通。幸運的是,ES提供了廣泛且強大的REST API用於與叢集互動。下面是利用這個API,可以做的幾件事情:

  • 檢查你的叢集、節點和索引的健康狀態和各種統計資訊
  • 管理你的叢集、節點、索引資料和後設資料
  • 對你的索引進行CRUD(建立、讀取、更新和刪除)和搜尋操作
  • 執行高階的查詢操作,像是分頁、排序、過濾、指令碼編寫(scripting)、聚合(aggregations)和許多其它操作

叢集健康

讓我們從一個基礎的健康檢查開始,檢視我們的叢集是怎麼工作的。我們使用CURL來幹這事,當然,你也可以用其他可以發起HTTP/REST請求的工具。首先,假設我們在啟動ES的同一個節點上,然後開啟另一個SHELL視窗。

我們用_cat API來作叢集健康檢查。

curl -XGET 'localhost:9200/_cat/health?v&pretty'

響應為:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%

可以看到,我們名稱為elasticsearch的叢集是啟動的,綠色狀態。

當我們詢問叢集狀態的時候,我們要麼得到綠色、黃色或紅色。綠色代表一切正常(叢集功能齊全),黃色意味著所有的資料都是可用的,但是某些複製沒有被分配(叢集功能齊全),紅色則代表因為某些原因,某些資料不可用。注意,即使是叢集狀態是紅色的,叢集仍然是部分可用的(它仍然會利用可用的分片來響應搜尋請求),但是可能你需要儘快修復它,因為你有丟失的資料。

也是從上面的響應中,我們可以看到,一共有一個節點,由於裡面沒有資料,我們有0個分片。注意,由於我們使用預設的叢集名字(elasticsearch),並且由於ES預設使用網路單播發現同臺機器上的其它節點,如果你在你的網路中啟動了多個節點,你就已經把她們加入到一個叢集中了。在這種情形下,你可能在上面的響應中看到多個節點。

用以下命令可以獲取叢集中的節點列表:

curl -XGET 'localhost:9200/_cat/nodes?v&pretty'

響應為:

ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1           10           5   5    4.46                        mdi      *      PB2SGZY

可以看到,名為PB2SGZY的節點,是叢集中唯一的一個節點。

檢視所有的索引

讓我們看看現在有什麼索引:

curl -XGET 'localhost:9200/_cat/indices?v&pretty'

響應是:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

這代表叢集中目前還沒有索引。

建立索引

現在,我們建立一個名為customer的索引,然後再次獲取所有的索引:

curl -XPUT 'localhost:9200/customer?pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'

第一個命令使用PUT動詞建立了名為customer的索引。我們簡單地將pretty附加到呼叫的尾部,使其以美觀的形式列印出JSON響應(如果有的話)。

響應如下:

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   customer 95SQ4TSUT7mWBT7VNHH67A   5   1          0            0       260b           260b

第二個命令的結果告訴我們,我們現在有一個名為customer的索引,它有5個主分片和1個複製(預設),其中包括0個文件。

你也許發現了,customer索引的健康度被標記為黃色了。回想我們之前討論的,黃色意味著某些複製沒有(或者還未)被分配。這個索引之所以這樣,是因為ES預設為這個索引建立一份複製。由於現在我們只有一個節點在執行,那一份複製就分配不了了(為了高可用),直到當另外一個節點加入到這個叢集后,才能分配。一旦那份複製在第二個節點上被複制,這個節點的健康狀態就會變成綠色。

索引並查詢一個文件

現在讓我們放一些東西到customer索引中。首先要知道的是,為了索引一個文件,我們必須告訴ES這個文件要到這個索引的哪個型別下。

讓我們將一個簡單的客戶文件索引到customer索引,external型別中,這個文件的ID是1,操作如下:

curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}
'

響應為:

{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : true
}

從上面的響應中,我們可以看到,一個新的客戶文件在customer索引和external型別中被成功建立。文件也有一個內部id 1, 這個id是我們在索引的時候指定的。

有一個關鍵點需要注意,ES在你想將文件索引到某個索引的時候,並不強制要求這個索引被顯式地建立。在前面這個例子中,如果customer索引不存在,ES將會自動地建立這個索引。

現在,讓我們把剛剛索引的文件取出來:

curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'

響應為:

{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : { "name": "John Doe" }
}

除了一個叫做found的欄位來指明我們找到了一個ID為1的文件,和另外一個欄位_source返回我們前一步中索引的完整JSON文件之外,其它的都沒有什麼特別之處。

刪除索引

現在,讓我們刪除剛才建立的索引,然後在列出所有的索引:

curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'

響應為:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

這表明我們成功地刪除了這個索引,現在我們回到了叢集中空無所有的狀態。

在更進一步之前,我們再細看一下一些我們學過的API命令:

curl -XPUT 'localhost:9200/customer?pretty'
curl -XPUT 'localhost:9200/customer/external/1?pretty' -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}
'
curl -XGET 'localhost:9200/customer/external/1?pretty'
curl -XDELETE 'localhost:9200/customer?pretty'

如果我們仔細研究以上的命令,我們可以發現訪問Elasticsearch中資料的一個模式。這個模式可以被總結為:

 curl -<REST Verb> <Node>:<Port>/<Index>/<Type><ID>

這個REST訪問模式普遍適用於所有的API命令,如果你能記住它,你就會為掌握ES開一個好頭。

相關文章