Elasticsearch系列-基础入门

介绍

Elasticsearch是一个基于Apache Lucene的分布式、高扩展、近实时的搜索引擎,主要用于海量数据快速存储、实时检索、高效分析的场景。它具有以下特点:

  • 分布式存储:可以将海量数据分散存储在多台服务器上。
  • 分布式搜索:可以在分布式存储基础上实现快速搜索。
  • 分布式分析:可以对海量数据进行分布式分析。

安装与配置

系统环境:mac

elasticsearch

安装指南:

Error: elastic/tap/metricbeat-full: Calling plist_options is disabled! Use service.require_root instead.

    可参考Github Issue:Error in elasticsearch-full formula中解决。

kibana

Kibana是一个基于Web的数据可视化工具,可以用于创建、编辑、共享数据可视化,并提供强大的图表和仪表板功能。Elasticsearch和Kibana一起使用,可以实现对数据的实时搜索、分析和可视化,从而帮助用户更好地理解和解决问题。通常情况下,ES负责数据的存储、搜索和分析,而Kibana则负责将数据以图表的形式呈现给用户,并提供交互式的界面和工具,以便用户更好地理解和探索数据。

安装指南:

核心概念

基础概念

ES基础概念比对常见的关系型数据库MySQL:

概念 ES 类比MySQL 补充说明
类型 文档型 关系型
模式 Mapping Schema
Index Database 文档的集合
Type Table 每个索引(Index)下可以建立多个类型(Type),文档存储时需要指定index和type。从6.0.0开始单个索引中只能有一个类型,7.0.0以后将将不建议使用,8.0.0 以后完全不支持。

* Removal of mapping types
Document Row
Field Column

可以通俗的去理解Index比作 SQL 的 Database,Type比作SQL的Table。但这并不准确,因为如果在SQL中,Table 之间相互独立,同名的字段在两个表中毫无关系。但是在ES中,同一个Index 下不同的 Type 如果有同名的字段,他们会被 Luecence 当作同一个字段 ,并且他们的定义必须相同。所以我觉得Index现在更像一个表,

集群

ES集群实际是一个分布式系统,es集群由一个或多个节点(Node)组成,并可通过其集群名称进行标识,其具备高可用性可拓展性。

  • 高可用性:
    • 服务可用性:允许有节点停止服务;
    • 数据可用性:部分节点丢失,不会丢失数据;
  • 可扩展性:随着请求量的不断提升,数据量的不断增长,系统可以将数据分布到其他节点,实现水平扩展;

集群健康值:

  1. Green:所有主要分片和复制分片都可用
  2. Yellow:所有主要分片可用,但是不是所有复制分片可用
  3. Red:不是所有的主要分片都可用。此时仍然正常提供服务,它会在现有存活分片中执行请求,我们需要尽快修复故障分片,防止查询数据的丢失

image

节点

单个ES实例,即为一个集群中的节点。同时根据node的作用,可以分为如下几种:

  • master-eligible:可以作为主节点。一旦成为主节点,可以管理整个cluster的设置及变化,例如创建,更新,删除索引;添加或删除node;为node分配shard,应用的集群设置等。
  • data:数据node。数据节点是实际的索引、搜索、删除和其他与文档相关的操作发生的地方。这些节点托管索引文档,一旦收到搜索请求,就会调用
  • ingest:数据接入(例如:Pipeline)。ES主要目标是索引、搜索和分析,但是通常在将文档存储到ES之前对其进行修改或增强,相应节点负责支持相应操作。
  • coordinating:特殊节点,可以为上面的任何一种节点。协调节点负责端到端的处理客户端请求,在接受请求后,协调器请求集群中的其他节点处理请求,它在收集和整理结果并将它们发送回客户端之前等待响应。

分片

image

  • 主分片(Primary Shard):每个文档都存储在一个 primary shard。 索引文档时,它首先在 primary shard上编制索引,然后在此分片的所有副本上(replica)编制索引。索引可以包含一个或多个主分片。 此数字确定索引相对于索引数据大小的可伸缩性。 创建索引后,无法更改索引中的主分片数。Primary 可以同时出来读和写操作。一个索引可以由多个主分片组成,每个分片都具有索引(或写入)文档的能力。 当 Elasticsearch 试图在集群中均匀分布分片时,每个主分片都可以利用节点资源来实现写入可扩展性。。当一个文档被索引到 Elasticsearch 中时,它会在被复制到副本分片之前由主分片索引。 只有在成功更新副本分片后才会确认索引请求,从而确保跨 Elasticsearch 集群的读取一致性。
  • 副本分片(Replica Shard):每个主分片可以具有零个或多个副本。 replica 是主分片的副本。replica 只能是只读的,不可以进行写入操作。replica 分片可以独立于主分片响应搜索(或读取)请求。 由于主分片和副本分片被分配到不同的节点(为索引提供更多计算资源),因此可以通过添加 replica 来实现读取可扩展性。如果一个索引的 primary shard 一旦被丢失(有宕机或者网络连接问题),那么相应的 replica shard 会被自动提升为新的 primary shard,进而新的 replica 也会在不同的 node 上生成。replica 有两个目的: 增加故障转移:如果主分片故障,可以将副本分片提升为主分片。