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)。
读操做——搜索和返回数据——能够同时被主分片或副本分片所处理,因此当集群总拥有越多的副本分片时,也将拥有越高的吞吐量。