es 集群核心概念以及实践

节点概念:

  • 节点是一个Elasticsearch的实例
    • 本质上就是一个JAVA进程
    • 一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例
  • 每一个节点都有名字,通过配置文件配置,或者启动时候 -E node.name=node1指定
  • 每一个节点在启动之后,会分配一个UID,保存在data目录下

节点类型

常用的有以下几种:

  • Master Node:主节点
  • Master eligible nodes:可以参与选举的合格节点
  • Data Node:数据节点
  • Coordinating Node:协调节点

Master eligible nodes和Master Node

1、每个节点启动后,默认就是一个 Master eligible节点,

可以通过 node.master: false 禁止成为 master eligible 节点

2、Master-eligible节点可以通过参加选主流程,成为 Master 节点

3、集群中第一个启动的节点会将自己选举成 Master 节点

4、每个节点上都保存了集群的状态,但是只有 Master 节点才能修改集群的状态信息

所有的节点信息

所有的索引和相关的 Mapping、Setting 信息

分片的路由信息

Master Node的职责

  • 处理创建,删除索引等请求,负责索引的创建与删除
  • 决定分片被分配到哪个节点
  • 维护并且更新Cluster State

选主的过程

  • 互相Ping对方,Node ld 低的会成为被选举的节点
  • 其他节点会加入集群,但是不承担Master节点的角色。一旦发现被选中的主节点丢失,就会选举出新的Master节点

Data Node & Coordinating Node

Data Node

  • 可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用
  • 节点启动后,默认就是数据节点。可以设置node.data: false 禁止
  • 由Master Node决定如何把分片分发到数据节点上
  • 通过增加数据节点可以解决数据水平扩展和解决数据单点问题

Coordinating Node

  • 负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起
  • 每个节点默认都起到了Coordinating Node的职责

可以通过命令查看集群节点信息

GET _cat/nodes?v

带 * 的表示 Master 节点

也可以通过 cerebro 工具查看

带有 实心的小星星 表示 Master 节点

分片(Primary Shard & Replica Shard)

  • 主分片(Primary Shard)
    • 用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
    • 一个分片是一个运行的Lucene的实例
    • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本分片(Replica Shard)
    • 用以解决数据高可用的问题。 副本分片是主分片的拷贝
    • 副本分片数,可以动态调整
    • 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)
    • 这里注意,副本分片并不是越多越好,es 写操作是,需要将所有副本都写完才会返回,会影响写性能,正常一个副本就够用了
    • 类似日志类的,副本分片可以设置为0

创建一个索引,设置 3 个主分片,每个分片两个副本,相当于一共有 9 个分片

# 设置三个主分片,每个分片两个副本
PUT /es_db
{
  "settings": {
    "number_of_shards": 3, 
    "number_of_replicas": 2
  }
}

通过 工具查看:

可以看到 三个实线框就是对应的三个主分片,虚线对应六个副本

这里注意:

全量数据 = 三个主分片相加 = 实线0 + 实线1 + 实线2

虚线0 = 实线0、 虚线1 = 实线1、虚线2 = 实线2

再创建一个索引,有两个主分片,每个主分片有 1 个副本

PUT /test2
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  }
}

工具查看如下:

分片的设定

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

  • 分片数设置过小
    • 导致后续无法增加节点实现水平扩展
    • 单个分片的数据量太大,导致数据重新分配耗时
  • 分片数设置过大,7.0 开始,默认主分片设置成1,解决了over-sharding(分片过度)的问题
    • 影响搜索结果的相关性打分,影响统计结果的准确性
    • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

CAT API查看集群信息

GET /_cat/nodes?v   #查看节点信息
GET /_cat/health?v    #查看集群当前状态:红、黄、绿
GET /_cat/shards?v        #查看各shard的详细情况  
GET /_cat/shards/{index}?v     #查看指定分片的详细情况
GET /_cat/master?v          #查看master节点信息
GET /_cat/indices?v         #查看集群中所有index的详细信息
GET /_cat/indices/{index}?v      #查看集群中指定index的详细信息   

#查看集群的健康状况
GET _cluster/health

感谢小伙伴们的支持,持续更新中~~~

相关推荐
赵谨言5 小时前
基于python网络爬虫的搜索引擎设计
爬虫·python·搜索引擎
神秘打工猴6 小时前
Flink 集群有哪些⻆⾊?各⾃有什么作⽤?
大数据·flink
小刘鸭!6 小时前
Flink的三种时间语义
大数据·flink
天冬忘忧6 小时前
Flink优化----FlinkSQL 调优
大数据·sql·flink
LinkTime_Cloud6 小时前
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
大数据·运维·gitlab
寒暄喆意7 小时前
智慧农业物联网传感器:开启农业新时代
大数据·人工智能·科技·物联网
运维&陈同学7 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
m0_548503037 小时前
Flink基本原理 + WebUI说明 + 常见问题分析
大数据·flink
kaoyaoyao8 小时前
小程序评论分数提高,提升用户参与感和忠诚度
大数据·小程序·seo·评论·小程序评分
乌龟跌倒10 小时前
磁盘结构、访问时间、调度算法
大数据