码迷,mamicode.com
首页 > 其他好文 > 详细

ElasticSearch的工作机制

时间:2014-11-25 19:00:58      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:可靠性   blank   

ElasticSearch,和Solr一样,是底层基于Apache Lucene,且具备高可靠性的企业级搜索引擎。

ElasticSearch中的一些概念其实和关系型数据库都有对应关系,比如数据库在ES中被称为索引,表在ES中被称作Type。

具体对应关系见下表。

bubuko.com,布布扣


ElasticSearch中的Replica是副本的意思,创建副本的好处有两个,1,可以分流部分查询请求,2,如果集群中的某个分片丢失了,就可以使用这个副本将数据全部找回来,因为这个原因,副本分片和源分片不会放在同一节点上。 ES中每一个索引都可以被分成多个分片,但不一定每个分片都有副本,但是一旦创建了副本,就会有主分片的说法(作为复制源的分片),分片和副本的数量可以在索引创建的时候指定。下图是副本和分片的示意图,分片和它的副本不会在同一个节点上。


bubuko.com,布布扣

在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。  默认情况下,Elasticsearch中的每个索引被分片5个主分片和1套副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本,这样的话每个索引总共就有10个分片。


当ES的一个节点启动后,它会通过广播方式找到集群中的其他节点,并且建立连接。

在集群中,其中的某个节点会被选取作为主节点,这个主节点负责管理集群状态。这个主节点对于用户来说是透明的,用户不需要知道哪个节点是主节点。任何操作都可以发送到任何节点。必要的时候,任何节点可以并行的发送子查询到其他节点,并且将得到的响应合并后发送给用户,这些操作都不需要访问主节点。


主节点读取集群信息,在读取过程中,它会检测分片的情况,哪些分片是主分片,并且是可用的,在这一步之后,所有的分片已经准备好了,而副本还没有。下一步的操作就是找到那些已经被复制过的分片,将他们作为副本。如果一切顺利,那么ES启动成功了,所有的分片和副本都已经准备好了。


在ES工作的时候,主节点会监控所有的节点是否正常,默认配置为:节点每隔1s主节点会发送1次心跳,超时时间为30s,测试次数为3次,超过3次,则认为该节点同主节点已经脱离了。如果某一个节点出现问题,ES认为这个节点损坏,该节点会从集群中删除,并且ES会重新平衡整个集群。


ES通过Query DSL (基于json的查询语言)来查询数据,在ES内部,每次查询分成2个步骤,分散和聚合,分散是指查询所有相关的分片,聚合是指把所有分片上的查询结果合并,排序,处理然后在返回给客户端。


ElasticSearch 有4中方式来构建数据库,最简单的方法是使用index API,将一个Document发送到特定的index,一般通过curl tools实现。第二第三种方法是通过bulk API和UDP bulk API。两者的区别仅在于连接方式。第四种方式是通过一个插件-river。river运行在ElasticSearch上,并且可以从外部数据库导入数据到ES中。需要注意的是,数据构建仅在分片上进行,而不能在副本上进行。

本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/1582354

ElasticSearch的工作机制

标签:可靠性   blank   

原文地址:http://cnn237111.blog.51cto.com/2359144/1582354

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!