北京礼品网站建设,新手怎么学做电商,wordpress邮件伪造,小红书seo排名帝搜软件一、 Elasticsearch结构
Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成#xff0c;如下图所示#xff0c;模块说明如表下所示。 说明如表#xff1a;
名称说明ClientClient使用H…一、 Elasticsearch结构
Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成如下图所示模块说明如表下所示。 说明如表
名称说明ClientClient使用HTTP或HTTPS协议同Elasticsearch集群中的EsClient以及各EsNode实例进程进行通信进行分布式索引和分布式搜索操作。EsMasterEsMaster为Elasticsearch的主节点负责集群的管理主要是集群相关的操作如决定分片的分配、跟踪集群节点等。EsNode1-9EsNode1-9为Elasticsearch的数据节点主要是存储索引数据对文档进行增删改查、聚合等操作。EsClientEsClient为Elasticsearch的协调节点只处理路由请求、搜索及分发索引等操作。自身不存储数据也不管理集群。ZooKeeper集群ZooKeeper为Elasticsearch集群中各进程提供心跳感应机制
二、Elasticsearch基本概念 Index 即索引是Elasticsearch中一个逻辑命名空间指向一个或多个分片内部Apache Lucene实现索引中数据的读写。索引与关系数据库实例Table相当。一个Elasticsearch实例可以包含多个索引。 Document 文档是可以被索引的基本单位特指最顶层结构或根对象序列化成的JSON数据。相当于数据库中的Row。一个索引包含多个文档。 Mapping映射用来约束字段的类型可以根据数据自动创建。相当于数据库中的Schema。 Field 字段组成文档的最小单位。相当于数据库中的Column。每个文档包含多个字段。 EsMaster 主节点可以临时管理集群级别的一些变更例如新建或删除索引、增加或移除节点等。主节点不参与文档级别的变更或搜索也不接收请求。在流量增长时该主节点不会成为集群的瓶颈。 EsNode Elasticsearch节点一个节点就是一个Elasticsearch实例。 EsClient Elasticsearch节点该节点只能路由请求处理搜索减少阶段和分发批量索引。其自身不进行数据存储也没有管理集群的能力。 Shard 分片Elasticsearch中最小级别的工作单元文档存储在分片中并且在分片中被索引。 Primary Shard 主分片索引中的每个文档属于一个单独的主分片主分片的数量决定了索引最多能存储多少数据。 Replica Shard 复制分片它是主分片的一个副本可以防止硬件故障导致的数据丢失同时可以提供读请求比如搜索或者从别的shard取回文档。 Recovery 代表数据恢复或叫数据重新分布Elasticsearch在有节点加入或退出时会根据机器的负载对索引分片进行重新分配故障的节点重新启动时也会进行数据恢复。 Gateway 代表Elasticsearch索引快照的存储方式默认是先把索引存放到内存中当内存满了时再持久化到本地硬盘。Gateway对索引快照进行存储当这个Elasticsearch集群关闭再重新启动时就会从Gateway中读取索引备份数据。支持多种类型的Gateway有本地文件系统默认分布式文件系统Hadoop的HDFS。 Transport 代表Elasticsearch内部节点或集群与客户端的交互方式默认内部是使用TCP协议进行交互同时它支持HTTP协议json格式、thrift、servlet、memcached、zeroMQ等的传输协议通过插件方式集成。 ZooKeeper集群 在Elasticsearch是必须的为其提供安全认证信息的存储等功能。
三、Elasticsearch原理
1.Elasticsearch内部架构
Elasticsearch通过RESTful API或者其他语言比如JavaAPI提供丰富访问接口使用集群发现机制支持脚本语言支持丰富的插件。底层基于Lucene保持Lucene绝对的独立性通过本地文件、共享文件、HDFS完成索引存储如下图所示。
2.倒排序索引
传统的搜索方式正排序索引如图3所示按照文档编号进行搜索搜索时要扫描每个文档关键字的信息直到找出所有满足条件的关键字的信息。正排序索引的优点是易于维护缺点搜索耗时太长。如下图所示 而ElasticsearchLucene的搜索则是采用了倒排序索引如下图所示的方式。由不同的关键字组成的表称为“词典”其中包含了各种关键字和关键字的统计信息包含所在文档编号文档中位置和出现频率等。通过倒排序索引进行搜索就是通过关键字查询相对应的文档编号和文档中所在位置再找到完整文档类似于查字典或通过查书目录查指定页码书的内容。倒排在构建索引时较为耗时且维护成本较高但是搜索耗时短。
2.Elasticsearch分布式索引流程
Elasticsearch分布式索引操作流程如下图所示。 操作流程说明如下
阶段1 客户端发送一个索引请求给任意节点假设是Node 1。
阶段2 Node 1通过请求判断出该文档应该被存储的分片假设是shard 0这个分片中因此Node 1会把请求转发到shard 0的primary shard P0存在的Node 3节点上。
阶段3 Node 3在shard 0的primary shard P0上执行请求。如果请求执行成功Node 3并行地将该请求发给shard 0的所有存在于Node 1和Node 2中的replica shard R0上。如果所有的replica shard都成功地执行了请求那么将会向Node 3回复一个成功确认当Node 3收到了所有replica shard的确认信息后则向用户返回一个Success消息。
3.Elasticsearch分布式搜索流程
Elasticsearch分布式搜索操作流程分为两个阶段即查询阶段与获取阶段。分布式搜索操作流程之查询阶段如下图所示
3.1分布式搜索操作流程之查询阶段
操作流程说明如下
阶段1 客户端发送一个检索请求给任意节点假设是Node 3。
阶段2 Node 3将检索请求发送给该index中的每一个shard此时会采取轮询策略在primary shard及其所有replica shard中随机选择一个让读请求负载均衡。每个shard在本地执行检索并将结果排序添加到本地。
阶段3 每个shard返回本地所记录的结果发送给Node 3。Node 3将这些值合并做全局排序。
查询阶段主要定位了所要检索数据的具体位置而获取阶段的任务就是将这些定位好的数据内容取回并返回给客户端。获取阶段如下图所示
3.2分布式搜索操作流程之获取阶段
操作流程说明如下
阶段1 Node 3获取了所有待检索数据的定位之后发送请求给与数据相关的shard。
阶段2 每个收到Node 3请求的shard将读取相关文档中的内容并将它们返回给Node 3。
阶段3 当Node 3获取到了所有shard返回的文档后Node 3将它们合并成一条汇总结果返回给客户端。
4.Elasticsearch分布式批量索引流程 操作流程说明如下
阶段1 客户端向Node 1发送bulk请求。
阶段2 Node 1为每个分片构建批量请求然后转发到这些请求所需的主分片上。
阶段3 主分片一个接一个的按序执行操作。当一个操作执行完主分片转发新文档或者删除部分给对应的复制节点然后执行下一个操作。复制节点操作完成后报告给请求节点请求节点整
5.Elasticsearch分布式批量搜索流程
操作流程说明如下
阶段1 客户端向Node 1发送mget请求。
阶段2 Node 1为每个分片构建一个多条数据检索请求然后转发到这些请求所需的主分片或复制分片上。当所有回复被接收Node 1构建响应并返回给客户端。
6.Elasticsearch路由算法
Elasticsearch中提供了两种路由算法
默认路由shardhashrouting%number_of_primary_shards自定义路由该路由方式通过指定routing的方式可以影响文档写入到哪个shard也可以仅仅检索特定的shard。
7.Elasticsearch平衡算法
Elasticsearch中提供了自动平衡功能适用于扩容、减容、导入数据场景。算法如下
weight_index(node, index) indexBalance * (node.numShards(index) - avgShardsPerNode(index))Weight_node(node, index) shardBalance * (node.numShards() -avgShardsPerNode)weight(node, index) weight_index(node, index) weight_node(node,index)
8.Elasticsearch单节点多实例部署
在同一个节点上部署多个Elasticsearch实例根据IP和不同的端口号来区分不同的Elasticsearch实例。可以提高单节点CPU、内存和磁盘的利用率同时提高Elasticsearch的索引和搜索能力。具体部署如下图所示
9.Elasticsearch副本自动跨节点分配策略
单节点多实例部署下多副本时如果只做到跨实例分配存在单点故障增加默认配置cluster.routing.allocation.same_shard.host:true即可。
四、Elasticsearch与HBase的关系
Elasticsearch索引HBase数据是将HBase数据写到HDFS的同时Elasticsearch建立相应的HBase索引数据。其中索引ID与HBase数据的rowkey对应保证每条索引数据与HBase数据的唯一实现HBase数据的全文检索。
批量索引 针对HBase中已有的数据通过提交MapReduce任务的形式将HBase中的全部数据读出然后在Elasticsearch中建立索引索引过程如下图所示