ElasticSearch集羣介紹二

ElasticSearch集羣node

 

一個運行中的 Elasticsearch 實例稱爲一個 節點,而集羣是由一個或者多個擁有相同 cluster.name 配置的節點組成, 它們共同承擔數據和負載的壓力。當有節點加入集羣中或者從集羣中移除節點時,集羣將會從新平均分佈全部的數據。curl

當一個節點被選舉成爲 主 節點時, 它將負責管理集羣範圍內的全部變動,例如增長、刪除索引,或者增長、刪除節點等。 而主節點並不須要涉及到文檔級別的變動和搜索等操做,因此當集羣只擁有一個主節點的狀況下,即便流量的增長它也不會成爲瓶頸。 任何節點均可以成爲主節點。咱們的示例集羣就只有一個節點,因此它同時也成爲了主節點。elasticsearch

做爲用戶,咱們能夠將請求發送到 集羣中的任何節點 ,包括主節點。 每一個節點都知道任意文檔所處的位置,而且可以將咱們的請求直接轉發到存儲咱們所需文檔的節點。 不管咱們將請求發送到哪一個節點,它都能負責從各個包含咱們所需文檔的節點收集回數據,並將最終結果返回給客戶端。 Elasticsearch 對這一切的管理都是透明的。fetch

ElasticSearch集羣健康狀態:url

查看集羣狀態:spa

curl -XGET http://localhost:9200/_cluster/health

顯示結果以下:code

{
   "cluster_name":          "elk-cluster",
   "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字段記錄了當前集羣的健康狀態,共有三種類型:blog

green:全部的主分片和副本分片都運行正常。索引

yellow:全部的主分片運行正常,但有副本分片運行不正常。文檔

red:有主分片沒有正常運行。

 

查看但節點的集羣健康狀態,"status"字段的值是"yellow"。"unassigned_shards"字段記錄了有多少個副本分片沒有被分配到任何節點中。

由於集羣中只有一個節點,若是主分片和副本分片都在該節點上是沒有任何意義的。

{
  "cluster_name": "elasticsearch",
  "status": "yellow", 
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 3,
  "active_shards": 3,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 3, 
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

 

爲了試驗,咱們在一個節點上運行兩個elasticsearch實例:

將已經運行的es目錄拷貝一份,修改配置文件:

cluster.name: elk-cluster
node.name: node-2
path.data: /data/local/elasticsearch-node2/data
path.logs: /data/local/elasticsearch-node2/logs
http.port: 9201

注意,要保持cluster.name的值一致。

同時,因爲node2目錄是從node1複製過來的,須要刪除data目錄下的數據。

修改完成後,就能夠啓動es實例了。啓動成功後,副本分片自動轉移到了node2上,此時再查看集羣健康狀態:

curl -XGET http://localhost:9200/_cluster/health

結果以下:

{
  "cluster_name": "elk-cluster",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 16,
  "active_shards": 32,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}

能夠看到,"status"字段已經變成了"green"。經過elasticsearch-head查看:

 

在水平擴容時,若是節點的數量多於如今的主分片和副本分片數量的和該怎麼辦?

因爲主分片的數量在建立索引的時候就已肯定了。此時能夠經過增長副本分片的數量,來水平擴容集羣節點數量。

curl -XPUT http://localhost:9200/people/_settings -d'
{
   "number_of_replicas" : 3
}'

上例中,將副本分片的數量設置爲3(默認爲1)。

讀操做——搜索和返回數據——能夠同時被主分片或副本分片所處理,因此當集羣總擁有越多的副本分片時,也將擁有越高的吞吐量。

相關文章
相關標籤/搜索