green:
所有的主分片和副本分片都正常运行
yellow:
所有的主分片都正常运行,但不是所有的副本分片都正常运行。
red:
有主分片没能正常运行。
往 Elasticsearch 添加数据时需要用到 索引 —— 保存相关数据的地方。 索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间
一个 分片 是一个底层的 工作单元 ,它仅保存了 全部数据中的一部分
文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量
一个副本分片只是一个主分片的拷贝。 副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。
索引在默认情况下会被分配5个主分片, 但可以在创建索引时指定分配3个主分片和一份副本(每个主分片拥有一个副本分片)
例如下面建立了一个索引名叫: blogs ,设置了3个主分片,1个副本分片
1 2 3 4 5 6 7
curl -XPUT 'localhost:9200/blogs?pretty' -H 'Content-Type: application/json' -d' { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } } '
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[root@ES-100 ~]# curl -XGET 'localhost:9200/_cluster/health?pretty' { "cluster_name" : "elasticsearch", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 8, "active_shards" : 8, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 8, "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.0 }
megacorp 有 5个 主分片, blogs 有3个主分片 ,
现在集群有8个主分片 , 8个副本分片,现在集群只有一个节点。
所有集群中8个副本分片都是 unassigned —— 它们都没有被分配到任何节点。 在同一个节点上既保存原始数据又保存副本是没有意义的,因为一旦失去了那个节点,我们也将丢失该节点上的所有副本数据。
当前我们的集群是正常运行的,但是在硬件故障时有丢失数据的风险
当第二个节点加入到集群后,3个 副本分片 将会分配到这个节点上——每个主分片对应一个副本分片。 这意味着当集群内任何一个节点出现问题时,我们的数据都完好无损。
所有新近被索引的文档都将会保存在主分片上,然后被并行的复制到对应的副本分片上。这就保证了我们既可以从主分片又可以从副本分片上获得文档。
5.1 搭建ES集群 host IP linux version es versionES-100 10.0.0.100 CentOS-7.2 es-6.5.1
ES-101 10.0.0.101 centos-7.2 es-6.5.1
在两台机器分别安装好elasticsearch
在两个节点的elasticsearch.yml上设置相同的cluster_name,但不同的node_name
在两个节点上设置相互发现的配置:discovery.zen.ping.unicast.hosts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
ES-100的机器配置: [root@ES-100 ~]# egrep -v '^#|^$' /etc/elasticsearch/elasticsearch.yml cluster.name: es-test node.name: es-test01 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 127.0.0.1,10.0.0.100 discovery.zen.ping.unicast.hosts: ["10.0.0.100", "10.0.0.101"] discovery.zen.minimum_master_nodes: 2 ES-101的机器配置: [root@ES-101 ~]# egrep -v '^#|^$' /etc/elasticsearch/elasticsearch.yml cluster.name: es-test node.name: es-test02 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 127.0.0.1,10.0.0.101 discovery.zen.ping.unicast.hosts: ["10.0.0.100", "10.0.0.101"] discovery.zen.minimum_master_nodes: 2 两台机器重启ES: service elasticsearch restart
重启之后查看集群整体节点数量:
5.2 查看集群的状态信息1. 查看集群状态
1 2 3
[root@ES-100 ~]# curl 'localhost:9200/_cat/health?v' 或者 [root@ES-101 ~]# curl 'localhost:9200/_cluster/health?pretty'