ES以分布式集群的形式工作,具备高可用。可扩展的特性。集群扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务器(横向扩展(horizontal scale or scaling out))
1.集群健康
同一个集群有相同的 cluster.name,通过GET /_cluster/health查看,集群的健康状态有三种:
green - 一切都很好(集群功能齐全)
yellow - 所有数据均可用,但尚未分配一些副本(群集功能齐全)
red - 某些数据由于某种原因不可用(群集部分功能)
截图中为red,因为我停掉了一个节点,其余返回值
{ “cluster_name” : “es-syq”,
<集群名称>
“status” : “red”,<集群状态>
“number_of_nodes” : 1,<集群所有节点数>
“number_of_data_nodes” : 1,<集群所有数据节点数>
“active_primary_shards” : 29,<集群所有索引的主分片数>
“unassigned_shards” : 22,<未分配的分片数>
2.关于分片
分片是ES中最小的存储单元。数据存储在分片中,分片分配在节点上。ES会平衡分片在各节点的合理分配,无论集群扩容或缩容,ES会自动感知并移动分片,这一过程用户是无感的。
分片包括主分片和复制分片。复制分片除了具有容灾性外,还提供可读的能力。主分片的数量是固定的(创建索引完成之后),复制分片可以再进行调节。
单节点情况:存在3个主分片,此时应该有3个对应的复制分片,但由于只有1个节点存活,故复制分片未分配,此时为yellow
现在扩展1个节点,ES会感知增加了1个节点,将复制分片分配到新节点上
再扩展一个节点,ES会将主、复分片均衡分配到三个节点上,且主复分片不会在同一个节点上。
现在我们关闭第一个节点,模拟机器故障,如图已置灰。如果该节点又是master节点,那么ES首先要做的是选主,然后找到该节点上主分片S1/S2对应的复制分片C1/C2,将其升级为主分片。这一过程是瞬时完成的
此时集群也就相当于下图,只有S3分片还有复制分片,但是主分片是齐全的,不会影响查询
之后,如果故障节点恢复,集群仍会重新利用之前的分片,会从其他正常分片复制故障期间的数据变更的部分。