1. 程式人生 > >Elasticsearch叢集管理

Elasticsearch叢集管理

ES通過設定【節點的名字】和【叢集的名字】,就能自動的組織相同叢集名字的節點加入到叢集中,並使很多的技術對使用者透明化。

如果使用者想要管理檢視叢集的狀態,可以通過一些REST API來實現。

REST API用途

ES提供了很多全面的API,大致可以分成如下幾種:

1 檢查叢集、節點、索引的健康情況

2 管理叢集、節點,索引資料、元資料

3 執行CRUD,建立、讀取、更新、刪除 以及 查詢

4 執行高階的查詢操作,比如分頁、排序、指令碼、聚合等

檢視叢集狀態

可以通過CURL命令傳送REST命令,查詢叢集的健康狀態:

curl 'localhost:9200/_cat/health?v
'

Localhost是主機的地址,9200是監聽的埠號,ES預設監聽的埠號就是9200.

這裡需要注意的是,windows下安裝的CURL有可能不支援單引號,如果有報錯,還請改成雙引號,內部使用轉義字元轉義。

得到的相應結果:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign
1394735289 14:28:09  elasticsearch green           1         1      0   0    0    0        0

可以看到叢集的名字是預設的"elasticsearch",叢集的狀態時"green"。這個顏色之前也有說過:

1 綠色,最健康的狀態,代表所有的分片包括備份都可用

2 黃色,基本的分片可用,但是備份不可用(也可能是沒有備份)

3 紅色,部分的分片可用,表明分片有一部分損壞。此時執行查詢部分資料仍然可以查到,遇到這種情況,還是趕快解決比較好。

上面的結果還可以看到,目前有一個節點,但是沒有分片,這是因為我們的ES中還沒有資料,一次也就沒有分片。

當使用elasticsearch作為叢集名字時,會使用單播,查詢本機上是否還執行著其他的節點。如果有,則組成一個叢集。

(如果使用其他的名字作為叢集名字,那麼就可能採用多播了!這個在工作中,經常會遇到,大家使用的是一個叢集名字,分片總是被搞在一起,導致有人的機器下線後,自己的也無法使用)

通過下面的命令,可以查詢節點的列表:

curl 'localhost:9200/_cat/nodes?v'

得到的結果如下:

curl 'localhost:9200/_cat/nodes?v'
host         ip        heap.percent ram.percent load node.role master name
mwubuntu1    127.0.1.1            8           4 0.00 d         *      New Goblin

檢視所有的索引

在ES中索引有兩個意思:

1 動詞的索引,表示把資料儲存到ES中,提供搜尋的過程;這期間可能正在執行一個建立搜尋的過程。

2 名字的索引,它是ES中的一個儲存型別,與資料庫類似,內部包含type欄位,type中包含各種文件。

通過下面的命令可以檢視所有的索引:

curl 'localhost:9200/_cat/indices?v'

得到的結果如下:

curl 'localhost:9200/_cat/indices?v'
health index pri rep docs.count docs.deleted store.size pri.store.size

由於叢集中沒有任何的資料,上面的結果中也就只包含列的資訊了。

建立索引

下面是建立索引,以及查詢索引的例子:

curl -XPUT 'localhost:9200/customer?pretty'
{
  "acknowledged" : true
}

curl 'localhost:9200/_cat/indices?v'
health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b

上面的結果中,customer索引的狀態是yellow,這是因為此時雖然有5個主分片和一個備份。但是由於只是單個節點,我們的分片還在執行中,無法動態的修改。因此當有其他的節點加入到叢集中,備份的節點會被拷貝到另一個節點中,狀態就會變成green。

索引和搜尋文件

之前說過,索引裡面還有型別的概念,在索引文件之前要先設定型別type。

執行的命令如下:

curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'

執行成功後會得到如下的資訊:

{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "created" : true
}

注意2.0版本的ES在同一索引下,不同的型別,相同的欄位名字,是不允許欄位型別不一致的。

上面的例子中,為我們建立了一個文件,並且id自動設定為1.

ES不需要再索引文件前,不需要明確的建立索引,如果執行上面的命令,索引不存在,也會自動的建立索引。

執行下面的命令查詢,返回資訊也如下:

curl -XGET 'localhost:9200/customer/external/1?pretty'
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "found" : true, "_source" : { "name": "John Doe" }
}

這裡會新增兩個欄位:

1 found 描述了請求資訊

2 _source 為之前索引時的資料

刪除索引

執行下面的命令就可以刪除索引:

curl -XDELETE 'localhost:9200/customer?pretty'

返回結果:

{
    "acknowledged": true
}

總結

總結上面涉及到的命令大致如下:

curl -XPUT 'localhost:9200/customer'//建立索引
//插入資料 curl -XPUT 'localhost:9200/customer/external/1'-d ' { "name": "John Doe" }' curl 'localhost:9200/customer/external/1'//查詢資料 curl -XDELETE 'localhost:9200/customer'//刪除索引

參考