ElasticSearch之(三)——ElasticSearch概念与架构

一、概念

  • 集群(Cluster)一组拥有共同的 cluster name 的节点。
  • 节点(Node) 集群中的一个 Elasticearch 实例。
  • 索引(Index) 相当于关系数据库中的database概念,一个集群中可以包含多个索引。这个是个逻辑概念。
  • 主分片(Primary shard) 索引的子集,索引可以切分成多个分片,分布到不同的集群节点上,一个分片是一个 Lucene 的实例,它本身就是一个完整的搜索引擎,文档不会跨分片存储。分片对应的是 Lucene 中的索引。
  • 副本分片(Replica shard)每个主分片可以有一个或者多个副本。
  • 类型(Type)相当于数据库中的table概念,mapping是针对 Type 的。同一个索引里可以包含多个 Type。
  • Mapping 相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。
  • 文档(Document) 相当于数据库中的row。
  • 字段(Field)相当于数据库中的column。
  • 分配(Allocation) 将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。

二、架构

架构.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

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

  • 每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源
  • 每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降
  • ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差

分布式下的索引和搜索

  • 创建索引:文档被索引到随机的主分片,然后转发到它的副本分片。
  • 搜索请求:搜索在完整的分片集合上运行,无论他们是主分片还是副本分片,然后聚集结果返回。


    索引和搜索.png

四、服务发现以及选主 ZenDiscovery

  • 节点启动后先ping(这里的ping是 Elasticsearch 的一个RPC命令。如果 discovery.zen.ping.unicast.hosts 有设置,则ping设置中的host,否则尝试ping localhost 的几个端口, Elasticsearch 支持同一个主机启动多个节点)
  • Ping的response会包含该节点的基本信息以及该节点认为的master节点。
  • 选举开始,先从各节点认为的master中选,规则很简单,按照id的字典序排序,取第一个。
  • 如果各节点都没有认为的master,则从所有节点中选择,规则同上。这里有个限制条件就是 discovery.zen.minimum_master_nodes,如果节点数达不到最小值的限制,则循环上述过程,直到节点数足够可以开始选举。
  • 最后选举结果是肯定能选举出一个master,如果只有一个local节点那就选出的是自己。
  • 如果当前节点是master,则开始等待节点数达到 minimum_master_nodes,然后提供服务。
  • 如果当前节点不是master,则尝试加入master。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 生病了才会知道身体有多重要,现在大部分的年轻人就是爱作,包括我自己也是这样的,不过我觉得我算比较养生的啦,养生的...
    Rose酱阅读 89评论 0 0
  • 一个行业会随着时代的发展在进步在变化,如果你不进步,那么你就只能被淘汰,就如张泉灵所说:时代抛弃你的时候,连一声再...
    国宝所长阅读 374评论 0 0
  • 廖旭_a0b5阅读 140评论 0 0
  • 本来只是抱着去书店逛逛的心态,没想到瞬间被这本书《你总是太相信努力》吸引了,我很好奇这本书里到底写了什么,迫切的拿...
    fighting君阅读 196评论 0 0