ElasticSearch之(三)——ElasticSearch

2019-06-27  本文已影响0人  康康不遛猫

一、概念

二、架构

架构.png
Gateway:Gateway是Elasticsearch用来存储索引的文件系统,支持多种文件类型,LocalFileSystem是存储在本地的文件系统,SharedFileSystem是共享存储,也可以使用Hadoop的HDFS分布式存储,也可以存储在AmazonS3云服务上。
Lucene框架:Gateway的上层是一个分布式的Lucene框架,Elasticsearch的底层API是由Lucene提供的,每一个Elasticsearch节点上都有一个Lucene引擎的支持。
Elasticsearch的模块:Lucene之上是Elasticsearch的模块,包括索引模块、搜索模块、映射解析模块等。River相当于第三方插件,用来导入第三方数据源,在2.X之后己经不再使用。
Discovery:Elasticsearch模块之上是Discovery、Scripting和第三方插件。Discovery是Elasticsearch的节点发现模块,不同机器上的Elasticsearch节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成的。Scripting用来支持JavaScript、Python等多种语言,可以在查询语句中嵌入,使用Script语句性能稍低。Elasticsearch也支持多种第三方插件。
Elasticsearch的传输模块和JMX:再上层是Elasticsearch的传输模块和JMX。传输模块支持Thrift,Memcached、HTTP,默认使用HTTP传输。几t1X是Java的管理框架,用来管理Elasticsearch应用。
交互接口:最上层是Elasticsearch提供给用户的接口,可以通过阻RESTfulAPI和Elasticsearch集群进行交互。

三、副本与分片

分片(Shard)以及副本(Replica) 分布式存储系统为了解决单机容量以及容灾的问题,都需要有分片以及副本机制,同时分片和副本也提供负载均衡等支持。Elasticsearch 没有采用节点级别的主从复制,而是基于分片。ElasticSearch当前还未提供分片切分(shard-splitting)的机制,只能创建索引的时候静态设置,所以提前合理分配索引分片尤为重要,否则,当发现需要调整分片数量, 只能重新对数据进行创建索引。


副本与分片.png

提高分片数量有利于提高整体可用性,但过度分片会引起以下问题:

分布式下的索引和搜索

四、服务发现以及选主 ZenDiscovery

ZenDiscovery支持任意数目的集群(1-N),所以不像 Zookeeper/Etcd 那样限制节点必须是奇数,也没有用投票的机制来选主,而是通过一个规则,只要所有的节点都遵循同样的规则,得到的信息都是对等的,选出来的主节点肯定是一致的。但分布式系统的问题就出在信息不对等的情况,这时候很容易出现脑裂(Split-Brain)的问题,大多数解决方案就是设置一个quorum值,要求可用节点必须大于quorum(一般是超过半数节点),才能对外提供服务。而 Elasticsearch 中,这个quorum的配置就是discovery.zen.minimum_master_nodes 。

上一篇下一篇

猜你喜欢

热点阅读