Elasticsearch基本概念:集群、节点、分片和副本

652 阅读3分钟

本文来自极客时间《Elasticsearch核心技术实战》 课程学习笔记,感兴趣的同学可以订阅该课程,本文介绍集群、节点、分片和副本的一些概念

架构

  • 高可用

    • 服务可用性 - 允许部分节点停止服务
    • 数据可用性 - 部分节点丢失数据,整个系统不会丢失数据
  • 可扩展性

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

Elasticsearch分布式架构的好处

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

Elasticsearch的分布式架构

  • 不同集群是通过集群名称来区分的,默认集群名称为“elasticsearch”
  • 可在配置文件(elasticsearch.yml)中修改集群名称,也可以在启动命令中通过 cluster.name=${clusterName} 指定
  • 一个集群可以有一个或多个节点

节点

  • 节点就是一个Elasticsearch实例
    • 本质上是一个java进程
    • 一台机器上可以多个Elasticsearch实例,在生产环境中,一般一台机器运行一个Elasticsearch实例
  • 每个节点都有自己的名字,可以在配置文件中配置,也可以在启动命令中通过 -E node.name=${nodeName} 指定
  • 每个节点启动之后,系统会分配一个全局唯一的uid,保存在data目录下。

Master-eligible节点和Master节点

  • 每个节点启动后,默认就是一个Master-eligible节点,但可通过node:master = false来禁止

  • Master-eligible节点可参加选主流程,有机会成为Master节点

  • 当第一个节点启动的时候,它会将自己选举成为Master节点

  • 每个节点都会保存集群的状态,只有Mater节点才可修改集群的状态信息

    • 集群状态,维护了一个集群中的必要信息,包括:
      • 所有的节点信息
      • 所有的索引及其相关的Mapping和Setting信息
      • 分片的路由信息
  • 任意节点都能修改信息的话,将导致数据不一致

Data节点和Coordinating节点

  • Data节点

    • 可以保存数据的节点,叫做Data Node。负责保存分片数据,在数据的水平扩展方面起到了很重要的作用。
  • Coordinating节点

    • 负责接收客户端请求,并将请求分发到合适的节点,最终又将结果进行汇总
    • 每个节点默认都起到了 Coordinating节点 的作用

其他节点

  • Hot Node & Warm Node 。又叫冷热节点,比如日志场景

  • Machine Learning node 。跑机器学习的job

  • tribe node deprecend 。开始被废弃,使用Cross Cluster Search来代替

配置节点类型

  • 开发环境,一个节点可承担多种角色
  • 生产环境,应设置单一节点角色

分片

  • 主分片,解决了数据水平扩展问题。可以将数据分布到集群内的所有节点

    • 一个分片就是一个运行的Lucene实例
    • 主分片数在创建索引时指定,后续不允许修改,除非reindex
  • 副本分片,解决了数据高可用问题

    • 副本分片数可动态调整
    • 增加副本分片数,一定程度上可提高服务可用性、读吞吐量等

一个三节点的集群,blogs索引的分片分布情况

![image-20200730083336811](/Users/book/Library/Application Support/typora-user-images/image-20200730083336811.png)

分片的设定

对于生产环境片数的设定,需要提前做好容量规划。

  • 分片数过小

    • 后续无法增加节点来实现水平扩展
    • 单个分片数据量太大,导致数据重新分配耗时
  • 分片数过大。7.0开始,默认主分片数由0更改为1,从而解决了over-sharding

    • 影响搜索结果相关性分数,影响统计结果的准确性
    • 单个节点上过多分片,资源浪费,也会影响性能

查看集群的健康状态

  • green - 主副分片都正常
  • yellow - 主分片全部正常分配,副本分片不能正常分配
  • red - 有主分片不能分配,比如:服务器磁盘容量使用超过85%时,创建一个新的索引

  • 查看集群状态:GET _cluster/health
  • 查看节点信息:GET _cat/nodes
  • 可以使用Kibana+Cerebro (之前有过课程介绍)

原文地址

cbaj.gitee.io/blog/2020/0…