elasticsearch学习笔记 - 集群相关术语

基本概念

  1. Cluster:集群。
    顾名思义就是好多es服务器,拜了把子成了兄弟,在一起搞事情,他们讲义气不背叛,一个有难八方支援。比如你有8台服务器,其中一台挂了,剩余的兄弟会立刻顶上。客户让然可以正常使用你的服务,从而实现高可用性

  2. Node:节点。
    集群中的每台服务器称之为一个节点。每个节点都是一个兄弟。既然拜了把子,那就有个长幼顺序(节点类型),这个看下面的节点类型小节,先看分片。

  3. Shard:分片。
    一只烤全羊,一个人肯定吃不了,怎么办呢?大家分着吃啊。所以就有了分片,大量的数据汇聚过来,一个节点可能由于内存或磁盘处理能力不足,那就把数据切成一小块一小块的(这就是分片),好几个兄弟一起处理。每个分片放到不同的服务器上。 这样处理起来就快了。
    有肉一起吃,敌人来了当然也要一起扛。当有查询过来的时候,ES会把查询发送给每个相关的分片,并将结果组合在一起,然后返回给用户。

  4. Replia:副本。
    分着吃羊肉,羊是吃完了,但每个人分到的不一样啊,有人吃羊腿,有人吃羊尾巴,显然这样长期下去也是不行的。怎么办呢,再来一只,吃羊腿的再吃羊尾巴,吃羊尾巴的再吃羊腿,这样就公平了。每个人都能说出整只羊各个部位是什么味道。
    同样的道理,数据分片,放在了不同的节点上,如果一台服务器挂掉了,那岂不是数据就丢失了,这种事是不允许发生的,因此就有了副本。每个切片复制一份,发送给其他节点。这样保证每个节点有完整的数据。集群中有一台宕机了也不影响使用。

健康状态

针对一个索引,Elasticsearch 中其实有专门的衡量索引健康状况的标志,分为三个等级:

  1. green,绿色。这代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
  2. yellow,黄色。所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的分片消失,你就会丢数据了。所以可把 yellow 想象成一个需要及时调查的警告。
  3. red,红色。至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

如果你只有一台主机的话,其实索引的健康状况也是 yellow,因为一台主机,集群没有其他的主机可以防止副本,所以说,这就是一个不健康的状态,因此集群也是十分有必要的。

节点类型

  1. 主节点:即 Master 节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。
  2. 数据节点:即 Data 节点。数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对 CPU、内存、IO 要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
  3. 负载均衡节点:也称作 Client 节点,也称作客户端节点。当一个节点既不配置为主节点,也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
  4. 预处理节点:也称作 Ingest 节点,在索引数据之前可以先对数据做预处理操作,所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个节点配置为 Ingest 节点。

参考资料

https://juejin.im/post/5bad9520f265da0afe62ed95
https://cloud.tencent.com/developer/article/1066239