Elasticsearch 分布式架构解析

Elasticseasrch的架构遵循其基本概念:一个采用Restful API标准的 高扩展性高可用性实时数据分析 的全文搜索工具。

  • 高扩展性:体现在Elasticsearch添加节点非常简单,新节点无需做复杂的配置,只要配置好集群信息将会被集群自动发现。
  • 高可用性:因为Elasticsearch是分布式的,每个节点都会有备份,所以down一两个节点也不会出现问题,集群会通过备份进行自动复盘。
  • 实时性:使用倒排索引来建立存储结构,搜索时常在百毫秒内就可完成。

整体架构如下图(从下往上看):

  • 第一层 —— Gateway:即Elasticsearch支持的索引数据的存储格式,当Elasticsearch关闭再启动的时候,它就会从这个gateway里面读取索引数据;支持的格式有:本地的Local FileSystem、分布式的Shared FileSystem、Hadoop的文件系统HDFS、Amazon(亚马逊)的S3。
  • 第二层 —— Lucene框架:Elasticsearch基于Lucene(基于Java开发)框架。
  • 第三层 —— Elasticsearch数据的加工处理方式:Index Module(创建Index模块)、Search Module(搜索模块)、Mapping(映射)、River(运行在Elasticsearch集群内部的一个插件,主要用来从外部获取获取异构数据,然后在Elasticsearch里创建索引;常见的插件有RabbitMQ River、Twitter River)。
  • 第四层 —— Elasticsearch发现机制、脚本:Discovery 是Elasticsearch自动发现节点的机制;Zen是用来实现节点自动发现、Master节点选举用;(Elasticsearch是基于P2P的系统,它首先通过广播的机制寻找存在的节点,然后再通过多播协议来进行节点间的通信,同时也支持点对点的交互)。Scripting 是脚本执行功能,有这个功能能很方便对查询出来的数据进行加工处理。3rd Plugins 表示Elasticsearch支持安装很多第三方的插件,例如elasticsearch-ik分词插件、elasticsearch-sql sql插件。
  • 第五层 —— Elasticsearch的交互方式:有Thrift、Memcached、Http三种协议,默认的是用Http协议传输
  • 第六层 —— Elasticsearch的API支持模式:RESTFul Style API风格的API接口标准是当下十分流行的。

这里写图片描述

解析Elasticsearch的分布式架构

分布式架构的透明隐藏特性

Elasticsearch是一个分布式系统,隐藏了复杂的处理机制

  • 分片机制:将文本数据切割成n个小份存储在不同的节点上,减少大文件存储在单个节点上对设备带来的压力。
  • 分片的副本:在集群中某个节点宕掉后,通过副本可以快速对缺失数据进行复盘。
    这里写图片描述
  • 集群发现机制(cluster discovery):在当前启动了一个Elasticsearch进程,在启动第二个Elasticsearch进程时,这个进程将作为一个node自动就发现了集群,并自动加入;前提是这些node都必须配置一套集群信息。
  • shard负载均衡:例如现在由10个 shard (分片),集群中由三个节点,Elasticsearch会进行均衡的分配,以保持每个节点均衡的负载请求。
扩容机制
  • 垂直扩容:用新机器替换已有的机器,服务器台数不变容量增加。
  • 水平扩容:直接增加新机器,服务器台数和容量都增加。
rebalance

增加或减少节点时会自动负载
这里写图片描述

master节点

主节点的主要职则是和集群操作的相关内容,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。

节点对等

每个节点都能接受请求,每个节点接受到请求后都能把该请求路由到有相关数据的其它节点上,接受原始请求的节点负责采集数据并返回给客户端。
这里写图片描述

你可能感兴趣的:(elasticsearch)