对官方文档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
。