«

Elasticsearch框架基础概念

晨曦 发布于 阅读:236 Elasticsearch


Elasticsearch(ES)是一个基于Lucene构建开源分布式搜索引擎并提供Restful接口。

Es是一个分布式文档数据库(JSON数据格式存储,类似MongoDB),JSON中的每个字段数据都可作为搜索条件,并且能够扩展至数以百计的服务器存储以及处理PB(PetaByte)级的数据。可在短时间内存储、搜索和分析大量的数据。

PB级级别: 拍字节(Petabytes),计算机存储容量单位,也常用PB来表示。1PB=1024TB==2^50字节。
Es优势:
横向可扩展性:
          只需增加服务器,修改配置后启动Es就可并入集群
分片机制提供更好的分布性:
          同一个索引分成多个分片(sharding),这点类似于HDFS的块机智,分别治理可提升处理效率
高可用:
          提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器在宏碁的情况下,集群仍旧可以照常运行,并会把服务器宏碁丢失的数据信息复制恢复到其他可用节点上
Elasticsearch应用场景:
大型分布式日志分析系统ELK(elasticsearch(存储日志)+ logstash(收集日志)+ kibana(展示数据))。
Es存储结构:

Es是文件存储,面向文档型数据库,类似于MongoDB,用JSON作为文档序列化的格式

Es与数据库区别:

关系数据库 => 数据库(Database) => 表(Table) => 行(Row) => 列(columns) Elasticsearch=> 索引(index) => 类型(Type) => 文档 (Documents) => 字段(Fields)  

注意:从ES 7.0.0开始,移除Type(类型)这个概念,Type 字段那里变为固定值 _doc Elasticsearch=> 索引(index) => _doc => 文档 (Documents) => 字段(Fields)

Es版本控制:

1.为什么要进行版本控制
为了保证数据在多线程操作下的准确性
2.内部版本控制和外部版本控制
内部版本控制: _version自增长,修改数据后,_version会自动+1
外部版本控制:为了保持_version与外部版本控制的数值一致,使用version_type=external检查数据当前的version值是否小于请求中的version值
3.悲观锁和乐观锁
悲观锁:每次获取据时都会上锁,会造成线程阻塞
底层实现:开启事务,启用锁机制
乐观锁:更新数据时候会判断在此期间是否有人更新过。
底层实现:1.使用版本号 2.使用时间戳
9200和9300端口的区别:
9200端口: ES节点和外部通讯使用,暴露ES Restful接口端口号
9300端口: ES节点之间通讯使用,TCP协议、ES集群之间通讯端口号
倒排索引:
    把文档ID对应到关键词的映射转换为关键词到文档ID的映射,每个关键词都对应着一系列的文档,这些文档中都出现这个关键词。根据关键词查找文档ID迅速找出相关文档
ES如何解决高并发:
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用分片机制、集群发现、分片负载均衡请求路由
Shards分片:代表索引分片,ES可以把一个完整的索引分成多个分片,好处是可以把一个大的索引拆分成多个,分布到不同节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Replicas副本:代表索引副本,ES可以设置多个索引的副本。
副本的作用:
1.提高系统的容错性,某个节点某个分片损坏或丢失时,可以从副本中恢复
2.提高ES查询效率,ES会自动对搜索请求进行负载均衡
ES集群核心原理分析:
          1.每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式在不同的节点上进行部署,该分片成为Primary shards主分片。
          注意:索引主分片数量定后,不能被修改
          路由算法: shard = hash(routing) % number_of_primary_shards
          如果number_of_primary_shards在查询的时候取余发生变化,无法获取到该数据
          2.每一个主分片为了实现高可用,都会有自己对应的副本,主分片对应的副本不能存放在同一台服务器上,主分片可以和其他副本存放在同一个Node节点上

如果此时Node-1节点是leader,Node-1节点down掉,此时会从(Node-2、Node-3)中选举一个节点作为一个Leader,不管某个节点挂掉,都能保证数据不丢失。除非所有节点全部down机

ES单机环境搭建:http://chenxitag.es.single.com
ES集群搭建:http://chenxitag.es.cluster.com

Elasticsearch