Elasticsearch總體介紹
Elasticsearch就是為高可用和高可擴展而生,可以通過添加更多的服務器來水平擴展。
空集群
-
主節點(Master Node):集群中的一個結點會被選為主節點,它 負責整個集群的變化 ,比如創建索引或者刪除索引,以及對集群中結點的增加和刪除。主節點不需要參與到文檔級別的變化或者搜索中,這就意味著主節點不會因為流量的增大而成為瓶頸。任何結點都可以成為主節點。
</li> -
我只啟動了一個節點,所以自然這個結點就成為了主節點,因此現在所構建的集群就是一個單節點集群。作為用戶,我可以與集群中的任意一個節點通信,包括主節點。 每個節點都知道文檔在那個節點上,并且它可以轉發請求到相應的結點。我們訪問的結點負責收集各個節點返回的數據,最后一起返回給客戶端 。這一切都由Elasticsearch處理。
</li> </ul>集群健康 (Cluster Health)
我們在Elasticsearch集群中可以監控很多信息,其中最重要的一項就是集群的健康,集群健康有三種狀態:green,yello,red。
curl -XGET localhost:9200/_cluster/health?pretty
如果一個集群中沒有任何索引,返回一下信息:
{ "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 }
當我在集群是上建立了索引后,返回如下信息:
{ "cluster_name" : "elasticsearch", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 5, "active_shards" : 5, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 5 }
-
green:所有的主要分片(Primary Shard)和復制分片(Replica Shard)都可用
</li> -
yellow:所有的主分片都可用,但是并不是所有的復制分片都可用
</li> -
red:不是所有的主要分片都可用
</li> </ul>下面介紹分片,包括主分片和復制分片。
分片 (Shards)
-
為了將數據添加到ES,我們需要索引(index),在邏輯上,index是存儲數據的地方,而在實際上,index是一個用來 指向一個或者多個分片的的邏輯命名空間 。
</li> -
一個分片是一個最小級別的“工作單元”,它保存了索引中所有數據的一部分,一個分片是一個Lucene實例,并且 它本身就是一個完整的搜索引擎 。 我們的文檔存儲在分片中,并且在分片中被索引。我們的應用程序不會直接和分片通信,取而代之的是直接和索引通信 。
</li> -
分片是Elasticsearch在集群中分發數據的關鍵。把分片想象成數據的容器, 文檔存儲在分片中,然后分片分配到你集群中的節點上 。當集群擴容或者縮小,Elasticsearch會自動在節點間遷移分片,使得集群可以保持平衡。
</li> -
分片可以分為 主分片 (primary shard)和 復制分片 (replica shard), 索引中的每個文檔屬于一個單獨的主分片 ,所以主分片的數量決定了索引中最多能夠存儲多少數據。
</li> -
復制分片是主分片的一個副本,用來防止硬件故障導致的數據丟失,同時可以提供讀請求,比如搜索或者從別的shards取回文檔。
</li> -
當索引創建的時候,主分片的數量就確定了,但是復制分片可以隨時調整。
</li> </ul>參考 : https://github.com/looly/elasticsearch-definitive-guide-cn
原文 http://segmentfault.com/a/1190000003499675
-
-