Elasticsearch是什么
- Elasticsearch(简称ES)是一个基于Apache Lucene™的开源搜索引擎。
- Elasticsearch 是一个高伸缩的开源全文搜索和分析引擎,是一个基于JSON的分布式搜索和分析引擎,基于restful web接口,Elasticsearch是用Java语言开发的,基于Apache协议的开源项目,是目前最受企业欢迎的搜索引擎。
- 它可以快速地、近实时的存储,搜索和分析大规模的数据,一般被用作底层引擎/技术,为具有复杂搜索功能和要求的应用提供强有力的支撑。
ElasticSearch特点
- 近实时性:新增到 ES 中的数据在1秒后就可以被检索到,这种新增数据对搜索的可见性称为“近实时搜索”
- 全文检索:将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES
- 分布式:意味着可以动态调整集群规模,弹性扩容
- 集群规模:可以扩展到上百台服务器,处理PB级结构化或非结构化数据
- 开箱即用:对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES
- 不支持事务:数据库的功能面对很多领域是不够用的,事务,还有各种联机事务型的操作
使用场景
- 全文检索
- 数据整合
- 可以整合多数据源数据
- 数据分析
- 日志分析
- 事件数据和指标
提供能力
- 快速查询
- 确保结果相关性
- 处理错误拼写
- 给与自动提示
- 统计分析
基本概念
逻辑概念
elasticsearch | mysql | 说明 |
---|---|---|
索引库(indices) | Databases 数据库 | 可以这样理解 |
类型(type) | Table 数据表 | 新版本中几乎没有这个概念了 |
文档(document) | Row 行 | 用json格式收集整理的数据 |
字段(field) | Columns 列 | 文档中各属性的值 |
映射配置(mappings) | 表结构 | 字段的数据类型、属性、是否索引、是否存储等特性 |
物理概念
- 集群,有2台以上的服务节点就可以构建集群。
- 节点,单独可以提供服务的进程。
- 分片,单个索引数量太多的话可以将索引分片,提供响应速度。
- 副本,保证高可用。这里和kafka不同,如果副本数量的节点数量一致,副本不会出现迁移。
- 段,来自lucene,段类似mysql中的页,应该是为了在硬盘上持久化数据快设计的。但段中的数据不能被删除,只能做标记。
集群中节点角色
- 在ES中刚接触到的概念,其实在其他的工具中也有类似的功能但没有提出相应的概念。
- 提出角色的概念就是为了整合功能,目的是通过分工提供效率。这里的效率其实指开发、维护的效率。
- 角色包括:
- master,负责任务管理,具体可以是:
- 集群状态协调:Master节点负责监控整个ES集群的状态,协调各个节点之间的数据复制和分片操作,实现集群内各节点的协同工作。
- 索引和映射管理:Master节点负责创建、删除、更新、管理索引和映射,确保索引和映射的一致性和正确性。
- 路由管理:Master节点负责维护集群的路由表,根据查询请求将其发送到正确的节点进行处理。
- 集群健康监测:Master节点负责监控集群中的节点及其状态,发现节点故障、网络问题、磁盘空间不足等异常情况,并及时采取故障转移、副本分配等措施。
- 仅投票,负责投票选主节点。
- ES的选主时需要过半的,仅投票节点就是起来负责投票选过半的。
- 数据节点,负责对数据的增删改查操作。
- 预处理节点,做数据预处理的。
- 仅协调节点,将数据收集到后,处理数据的,也可以做负载均衡工作。
- 简单和TiDB和MongoDB中的服务比较一下。不一定完全相似,但逻辑概念上功能差不多。
ES TiDB MongoDB 说明 master PD configserver 负责任务管理 数据节点 TiKV Shard 负责数据存储 仅协调节点 TiDB mongos 负责计算处理数据
- master,负责任务管理,具体可以是:
- 一个节点可以具有多重角色,看你的配置了。其中数据节点的硬盘容量要求高一点。
- 一个节点必须是仅协调节点。而候选主节点、数据节点和预处理节点时可配的。
- 最后需要注意一下,配置文件中配置的master是可以成为master,而不是指定你就是master。
脑裂问题
- 使用Quorum机制解决的脑裂问题。