【ES专题】ElasticSearch集群架构剖析_es集群

+ 请求量提升/数据的不断增长(将数据分布到所有节点上)

上面所说的正是集群架构的优势所在。对ES集群架构来说,则体现在:

  • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • 存储的水平扩容

在这里插入图片描述

1.2 ES集群核心概念

ES集群中有2个比较核心的概念需要理解一下。分别是:节点、分片。在聊这些概念之前,我们先重新梳理一下,ES的集群是什么。
ES的集群,亦上图所示,它通常由如下特征:

  • 集群中有一个或者多个节点
  • 不同的集群通过不同的名字来区分,默认名字【elasticsearch】

注意:ES在实际生产环境中,还会部署多个集群一起工作

  • 通过配置文件修改,或者在命令行中 -E cluster.name=es-cluster进行设定
1.2.1 节点

ES中的节点本质上是一个Elasticsearch的实例,一个Java进程。通常,我们建议生产环境中,一台机器只运行一个ES实例。(一台机器部署多个节点,其实是违背【高可用】原则的)
ES节点有如下特性:

  • 每一个节点都有名字,通过配置文件配置,或者启动时候 -E node.name=node1指定
  • 每一个节点在启动之后,会分配一个UID,保存在data目录下
  • 节点有多种角色(类型),不同角色通常有不同的功能,它们分别是:
    • Master Node:主节点,负责索引的删除创建
    • Master eligible nodes:【直译:符合条件的节点】。可以参与选举的合格节点
    • Data Node:数据节点,负责文档的写入、读取。节点保存数据并执行与数据相关的操作,如CRUD、搜索和聚合
    • Coordinating Node:协调节点
    • 其他节点

通过ES多角色定义可以看的出来,ES的集群架构非常成熟,它也是我目前见过的角色最丰富的架构。如此丰富的角色定义,肯定是为了拓展集群架构而生的,单一职责嘛。不过有一点我没想通的是,如果节点太多了,做一次CRUD的速度能快吗?会不会在通信上就花费了很多时间。

节点类型,可以通过如下配置参数禁用/启用
在这里插入图片描述

关于Master eligible nodes和Master Node

  • 每个节点启动后,默认就是一个Master eligible节点,即都可以参与集群选举,成为Master节点。可以通过node.mater=false禁止
  • 当第一个节点启动时候,它会将自己选举成Master节点
  • 每个节点上都保存了集群的状态,但是只有Master节点才能修改集群的状态信息。集群状态信息(Cluster State) 维护了一个集群中所有必要的信息。比如:
    • 所有节点信息
    • 所有的索引和其他相关的Mapping与Setting信息
    • 分片的路由信息

关于Data Node 和 Coordinating Node

  • Data Node:
    • 可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用
    • 节点启动后,默认就是数据节点。可以设置node.data: false禁止
    • 由Master Node决定如何把分片分发到数据节点上
    • 通过增加数据节点可以解决数据水平扩展和解决数据单点问题
  • Coordinating Node:
    • 负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起
    • 每个节点默认都起到了Coordinating Node的职责

其他节点类型

  • Hot & Warm Node:冷热节点。不同硬件配置 的Data Node,用来实现Hot & Warm架构,降低集群部署的成本

不同硬件配置,通常是CPU跟硬盘。硬盘根据冷热数据类型,可以选择固态或者机械硬盘

  • Ingest Node:数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作
  • Machine Learning Node:负责跑机器学习的Job,用来做异常检测
  • Tribe Node:Tribe Node连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理

以下是一个多集群业务架构图:
在这里插入图片描述

你可能感兴趣的:(程序员,elasticsearch,架构,java)