集群健康
GET /_cluster/health
在一個不包含任何索引的空集群中,它將會有一個類似于如下所示的返回內(nèi)容:
{
"cluster_name": "elasticsearch",
"status": "green",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}
status 字段指示著當(dāng)前集群在總體上是否工作正常。它的三種顏色含義如下:
- green
所有的主分片和副本分片都正常運行。 - yellow
所有的主分片都正常運行,但不是所有的副本分片都正常運行。 - red
有主分片沒能正常運行。
分片(shards)與副本(replica)
- 一個 分片 是一個底層的 工作單元 ,它僅保存了 全部數(shù)據(jù)中的一部分。 在分片內(nèi)部機制中,一個分片是一個 Lucene 的實例,以及它本身就是一個完整的搜索引擎。 我們的文檔被存儲和索引到分片內(nèi),但是應(yīng)用程序是直接與索引而不是與分片進行交互。
- Elasticsearch 是利用分片將數(shù)據(jù)分發(fā)到集群內(nèi)各處的。分片是數(shù)據(jù)的容器,文檔保存在分片內(nèi),分片又被分配到集群內(nèi)的各個節(jié)點里。 當(dāng)你的集群規(guī)模擴大或者縮小時, Elasticsearch 會自動的在各節(jié)點中遷移分片,使得數(shù)據(jù)仍然均勻分布在集群里。
- 一個分片可以是 主 分片或者 副本 分片。 索引內(nèi)任意一個文檔都歸屬于一個主分片,所以主分片的數(shù)目決定著索引能夠保存的最大數(shù)據(jù)量。
- 一個副本分片只是一個主分片的拷貝。 副本分片作為硬件故障時保護數(shù)據(jù)不丟失的冗余備份,并為搜索和返回文檔等讀操作提供服務(wù)。
- 在索引建立的時候就已經(jīng)確定了主分片數(shù),但是副本分片數(shù)可以隨時修改。
- 讓我們在包含一個空節(jié)點的集群內(nèi)創(chuàng)建名為 blogs 的索引。 索引在默認情況下會被分配5個主分片, 但是為了演示目的,我們將分配3個主分片和一份副本(每個主分片擁有一個副本分片):
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
- 所有新近被索引的文檔都將會保存在主分片上,然后被并行的復(fù)制到對應(yīng)的副本分片上。這就保證了我們既可以從主分片又可以從副本分片上獲得文檔。
更多擴容
主分片的數(shù)目在索引創(chuàng)建時 就已經(jīng)確定了下來。實際上,這個數(shù)目定義了這個索引能夠 存儲 的最大數(shù)據(jù)量。(實際大小取決于你的數(shù)據(jù)、硬件和使用場景。) 但是,讀操作——搜索和返回數(shù)據(jù)——可以同時被主分片 或 副本分片所處理,所以當(dāng)你擁有越多的副本分片時,也將擁有越高的吞吐量。
在運行中的集群上是可以動態(tài)調(diào)整副本分片數(shù)目的 ,我們可以按需伸縮集群。讓我們把副本數(shù)從默認的 1 增加到 2 :
PUT /blogs/_settings
{
"number_of_replicas" : 2
}
blogs 索引現(xiàn)在擁有9個分片:3個主分片和6個副本分片。 這意味著我們可以將集群擴容到9個節(jié)點,每個節(jié)點上一個分片。相比原來3個節(jié)點時,集群搜索性能可以提升 3 倍。