ElasticSearch之集群中的节点

对官方文档Node的阅读笔记。
ES集群由一个或者多个ES节点组成。
ES集群中的节点,支持处理两类通信平面,见文档

  • 集群内节点之间的通信,官方文档称之为transport layer。
  • 集群外的通信,处理客户端下发的请求,比如数据的CRUD,检索等,官方文档称之为HTTP layer。

通过集群内节点的通信,节点可以获取到集群内所有节点的信息,比如通信地址、健康状态、承载的索引和shard等信息。
当集群中某节点处理客户端下发的请求时,可以将业务请求转发至数据相关的节点,处理业务请求。
接收到客户端下发的请求的节点,依据官方文档,可以称之为接入节点或者the coordinating node。默认情况下,集群中所有的节点都可以接入客户端的业务,因此都具备接入节点的角色。
作为接入节点,处理业务请求的过程可以划分为如下阶段:

  • 转发阶段即scatter phase
    • 接入节点分析业务请求,获取索引和shard的归属节点。
    • 接入节点将请求转发至归属节点。
    • 归属节点处理请求,将处理结果返回至接入节点。
  • 收集阶段即gather phase
    • 接入节点处理各归属节点返回的数据。
    • 接入节点将数据组装为最终的结果。
    • 接入节点将结果返回客户端。

因此,作为接入节点,需要具备足够的硬件资源,比如CPU、内存等,否则无法正常处理各归属节点返回的数据。

ES节点,简单而言,可以理解为ES进程,比如一台主机上运行一个ES进程,或者在一台物理主机上,运行多个ES进程。对于前述ES进程,均可以理解为不同的ES节点。
在ES集群中,存在多种角色或者职责,因此从分工或者职责唯一的角度,可以为节点指定其角色,限定其职责,专业化分工,提升集群的可用性。
ES集群中,通常包含如下角色:

  • master
  • data
  • data_content
  • data_hot
  • data_warm
  • data_cold
  • data_frozen
  • ingest
  • ml
  • remote_cluster_client
  • transform

在ES的配置文件elasticsearch.yml中增加配置项node.roles,可以指定该节点的角色。配置样例,如下:

node.roles: [ master ]

对于专职的接入节点,可以做如下配置:

node.roles: [ ]

数据的生命周期、访问频率、重要性、访问数据时的时延、存储成本等存在差异,比如

  • 从生命周期角度讲
    • 有些数据需要长期保留。
    • 有些数据可能使用完毕后即可删除。
  • 从访问频率角度讲
    • 有些数据会被经常访问。
    • 有些数据可能经历一段时间的高频访问之后,访问频率逐步下降。
    • 有些数据可能初期的访问频率不高,但在某些场景下,访问频率可能会突然上升,然后再次下降。
    • 有些数据可能保持低频访问。
    • 有些数据可能基本没有访问,比如归档数据、备份数据。
  • 从重要性角度讲
    • 有些数据是关键数据,需要长期保留,不允许丢失,假如丢失,则需要具备恢复手段。
    • 有些数据虽然重要,但丢失之后重新获取的成本比较低。
    • 有些数据则可有可无,丢失也不影响最终结果。
  • 从访问时延角度讲
    • 应用场景为高带宽、高时延,比如大数据业务。
    • 应用场景为低时延、高OPS,比如检索业务。
  • 从存储成本角度讲,按照存储介质来划分
    • 磁带,访问时延大、存储成本低,适用于数据量大,长期归档,访问频率极低的数据。
    • HDD盘,访问时延相对低一些,存储成本相对高一些,存储容量小,适用于归档、备份,访问频率一般的数据。
    • SSD盘,访问时延低,支持的OPS高,存储成本更高,存储容量低,适用于数据量相对不大,但访问频率相对要高一些的数据。
    • 内存,访问时延极低,成本更高,存储容量更低,适用于数据量很小,但访问频率极高的数据。

基于数据的差异,ES提供了如下角色的选项:

  • data_content,适用于高频检索的数据,ES针对这个角色,提供了必要的优化。
  • data_hot,适用于热数据,可以配置比较好的硬件、支撑高速访问的存储介质,保存访问频率高的数据。
  • data_warm,适用于温数据,硬件、介质可以选择成本低一点,保存访问频率相对没有那么高的数据。
  • data_cold,适用于冷数据,硬件、介质可以选择相对更低一点,保存访问频率比较低的数据。
  • data_frozen,适用于极冷数据,选择容量大,成本低的硬件和介质,保存访问频率非常低的数据。

假如很难从业务场景区分数据的差异,则可以直接使用角色data

参考资料

posted @ 2024-10-05 21:14  jackieathome  阅读(7)  评论(0编辑  收藏  举报