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