介绍
Elasticsearch是一个基于Apache Lucene
的分布式、高扩展、近实时的搜索引擎,主要用于海量数据快速存储、实时检索、高效分析的场景。它具有以下特点:
- 分布式存储:可以将海量数据分散存储在多台服务器上。
- 分布式搜索:可以在分布式存储基础上实现快速搜索。
- 分布式分析:可以对海量数据进行分布式分析。
安装与配置
系统环境:mac
elasticsearch
安装指南:
- Elasticsearch安装教程中选择合适版本安装包下载安装即可。
- MacOS安装Elasticsearch 基于homebrew安装,但是安装可能出现如下报错:
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)组成,并可通过其集群名称进行标识,其具备高可用性与可拓展性。
- 高可用性:
- 服务可用性:允许有节点停止服务;
- 数据可用性:部分节点丢失,不会丢失数据;
- 可扩展性:随着请求量的不断提升,数据量的不断增长,系统可以将数据分布到其他节点,实现水平扩展;
集群健康值:
- Green:所有主要分片和复制分片都可用
- Yellow:所有主要分片可用,但是不是所有复制分片可用
- Red:不是所有的主要分片都可用。此时仍然正常提供服务,它会在现有存活分片中执行请求,我们需要尽快修复故障分片,防止查询数据的丢失
节点
单个ES实例,即为一个集群中的节点。同时根据node的作用,可以分为如下几种:
- master-eligible:可以作为主节点。一旦成为主节点,可以管理整个cluster的设置及变化,例如创建,更新,删除索引;添加或删除node;为node分配shard,应用的集群设置等。
- data:数据node。数据节点是实际的索引、搜索、删除和其他与文档相关的操作发生的地方。这些节点托管索引文档,一旦收到搜索请求,就会调用
- ingest:数据接入(例如:Pipeline)。ES主要目标是索引、搜索和分析,但是通常在将文档存储到ES之前对其进行修改或增强,相应节点负责支持相应操作。
- coordinating:特殊节点,可以为上面的任何一种节点。协调节点负责端到端的处理客户端请求,在接受请求后,协调器请求集群中的其他节点处理请求,它在收集和整理结果并将它们发送回客户端之前等待响应。
分片
- 主分片(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 有两个目的: 增加故障转移:如果主分片故障,可以将副本分片提升为主分片。