白话 IT 之 从 ElasticSearch 到 ZooKeeper

 

这里,数据结点是存放搜索索引项的。非 master 的 client 节点简单说来就是一个智能的负载平衡器,可以处理搜索中的一些简单的步骤。master 结点顾名思义,主要是用来做 cluster 的管理,而不去做计算量比较大的实际搜索的操作或者处理。换句话说,有点类似一个内置的 zookeeper。

ElasticSearch 在对 master 节点的选举上,至今仍存在的一个问题就是著名的脑裂 (split brain) 问题。这里有个 blog 对此进行了很好的解释。blog 的链接:HOW TO AVOID THE SPLIT-BRAIN PROBLEM IN ELASTICSEARCH

简单点说,就是比如当你的 cluster 里面有两个结点,它们都知道在这个 cluster 里需要选举出一个 master。那么当它们两之间的通信完全没有问题的时候,就会达成共识,选出其中一个作为 master。但是如果它们之间的通信出了问题,那么两个结点都会觉得现在没有 master,所以每个都把自己选举成 master。于是 cluster 里面就会有两个 master。

当然这是一个很简单的例子,实际情况当你的 cluster 比较大的时候要复杂的多。当时我们经常莫名其妙整个搜索就挂了,当时 ElasticSearch 刚开始火,网上资料也不多,很是挣扎了一段时间。后来明白就是因为这个问题。

那么现在的 ElasticSearch 都怎么解决这个问题呢?两种方案。一种就对你的 cluster 结点数以及 master 个数加一些限制,比如 ES 中可以指定一个参数来决定如果你要想成为 master,你必须至少和几个结点保持通信状态。这样可以确保不会出现多个 master,但是有可能会在一些情况下整个 cluster 都没有 master,照样挂。 而另一个解决方案就是外部加载一个 ZooKeeper 来完成对 cluster 的结点管理。

ZooKeeper 的 Quorums 机制对脑裂的防止

其实 master 选举问题由来以久。最早的比较完整的阐述称为 Paxos 算法。1990 年的一篇文章就对整个问题和算法进行了很完整的阐述。自文章问世以来,各个不同的工具都试图对这个问题进行一个实现。据我所知大都没有得到很广泛的应用。

ZooKeeper 是对结点管理的一个很强大的实现。 ZooKeeper 的选主过程使用的就是 paxos 算法。(ZooKeeper 的是数据复制使用的是 Zab (ZooKeeper atom broadcast) 算法,因为 paxos 无法保证多个写之间因果顺序,要实现的话只能串行执行,效率太低。)别的且不说,就脑裂这个问题,ZooKeeper 就提供了至少三种方式来认定整个集群是否可用,其中majority quorums 就是类似上面说的用结点个数限制的思想来实现的。即只有集群中超过半数节点投票才能选举出 master。这也是 ZooKeeper 的默认方式。还有两种一种是通过冗余通信,允许集群中采用多种通信方式来防止单一通信方式实效。另一种是通过共享资源,比如能看到共享资源就表示在集群中,反之则不是。

新的搜索引擎用不用 ZooKeeper?

正因为 ZooKeeper 很好的解决了脑裂的问题,新的搜索引擎 SolrCloud 就集成了 ZooKeeper 用来做 cluster 管理。但是最近 AWS 提供的 CloudSearch (基于 Solr) 和 Amazon ElasticSearch (基于 ElasticSearch) 则是把对 cluster 的部署嵌入到了 AWS 的资源管理中。可以通过实时的对 CPU 使用的监测自动增减 replica。CloudSearch 感觉很好用。Amazon ElasticSearch 很新,还不是特别了解。

这里,数据结点是存放搜索索引项的。非 master 的 client 节点简单说来就是一个智能的负载平衡器,可以处理搜索中的一些简单的步骤。master 结点顾名思义,主要是用来做 cluster 的管理,而不去做计算量比较大的实际搜索的操作或者处理。换句话说,有点类似一个内置的 zookeeper。

ElasticSearch 在对 master 节点的选举上,至今仍存在的一个问题就是著名的脑裂 (split brain) 问题。这里有个 blog 对此进行了很好的解释。blog 的链接:HOW TO AVOID THE SPLIT-BRAIN PROBLEM IN ELASTICSEARCH

简单点说,就是比如当你的 cluster 里面有两个结点,它们都知道在这个 cluster 里需要选举出一个 master。那么当它们两之间的通信完全没有问题的时候,就会达成共识,选出其中一个作为 master。但是如果它们之间的通信出了问题,那么两个结点都会觉得现在没有 master,所以每个都把自己选举成 master。于是 cluster 里面就会有两个 master。

当然这是一个很简单的例子,实际情况当你的 cluster 比较大的时候要复杂的多。当时我们经常莫名其妙整个搜索就挂了,当时 ElasticSearch 刚开始火,网上资料也不多,很是挣扎了一段时间。后来明白就是因为这个问题。

那么现在的 ElasticSearch 都怎么解决这个问题呢?两种方案。一种就对你的 cluster 结点数以及 master 个数加一些限制,比如 ES 中可以指定一个参数来决定如果你要想成为 master,你必须至少和几个结点保持通信状态。这样可以确保不会出现多个 master,但是有可能会在一些情况下整个 cluster 都没有 master,照样挂。 而另一个解决方案就是外部加载一个 ZooKeeper 来完成对 cluster 的结点管理。

ZooKeeper 的 Quorums 机制对脑裂的防止

其实 master 选举问题由来以久。最早的比较完整的阐述称为 Paxos 算法。1990 年的一篇文章就对整个问题和算法进行了很完整的阐述。自文章问世以来,各个不同的工具都试图对这个问题进行一个实现。据我所知大都没有得到很广泛的应用。

ZooKeeper 是对结点管理的一个很强大的实现。 ZooKeeper 的选主过程使用的就是 paxos 算法。(ZooKeeper 的是数据复制使用的是 Zab (ZooKeeper atom broadcast) 算法,因为 paxos 无法保证多个写之间因果顺序,要实现的话只能串行执行,效率太低。)别的且不说,就脑裂这个问题,ZooKeeper 就提供了至少三种方式来认定整个集群是否可用,其中majority quorums 就是类似上面说的用结点个数限制的思想来实现的。即只有集群中超过半数节点投票才能选举出 master。这也是 ZooKeeper 的默认方式。还有两种一种是通过冗余通信,允许集群中采用多种通信方式来防止单一通信方式实效。另一种是通过共享资源,比如能看到共享资源就表示在集群中,反之则不是。

新的搜索引擎用不用 ZooKeeper?

正因为 ZooKeeper 很好的解决了脑裂的问题,新的搜索引擎 SolrCloud 就集成了 ZooKeeper 用来做 cluster 管理。但是最近 AWS 提供的 CloudSearch (基于 Solr) 和 Amazon ElasticSearch (基于 ElasticSearch) 则是把对 cluster 的部署嵌入到了 AWS 的资源管理中。可以通过实时的对 CPU 使用的监测自动增减 replica。CloudSearch 感觉很好用。Amazon ElasticSearch 很新,还不是特别了解。

Elasticsearch 简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。elasticSearch 的使用场景 1、在海量数据前提下,对数据进行检索。比如:京东,淘宝等电商项目课程目标: 1. 了解企业级搜索引擎2. 安装elasticsearch 课程目录: 01 课程介绍02 elasticsearch 简介03 elasticsearch 使用场景04 安装elasticsearch 之前先安装jdk05 安装elasticsearch06 测试elasticsearch是否安装成功 07 安装kibana08 elasticsearch 基本认识 以及添加索引和删除索引09 elasticsearch 添加查询数据10 elasticsearch 修改删除数据11 elasticsearch 有条件的查询12 分词子属性fuzzy查询13 elasticsearch 过滤使用14 elasticsearch 排序与分页15 elasticsearch 如何查询指定的字段16 elasticsearch 高亮显示17 elasticsearch 聚合18 elasticsearch mapping 概念19 elasticsearch 的中文词库20 elasticsearch 中文词库安装测试21 elasticsearch 中文词库的使用案例22 elasticsearch 自定义词库配置23 安装nginx 配置中文词库24 测试elasticsearch 自定义中文词库25 搭建项目父工程26 搭建项目bean-interface-common27 搭建search 的service web 项目28 测试项目是否能与elasticsearch联通29 创建数据库并搭建首页30 数据上传功能的实现类完成31 数据上传控制器完成32 dubbo 介绍以及安装zookeeper33 将数据从mysql 上传到elasticsearch 中34 elasticsearch查询功能分析35 编写业务需求的dsl 语句36 编写输入参数返回结果集的实体类37 实现类编写38 编写实现类中dsl 语句39 返回集结果转换40 结果测试41 测试通过输入查询条件并将数据显示到页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值