以下只在特殊情况下使用,不要用在生产环境。

一、问题背景

  公司的产品使用Zookeeper做为集群支持,但是客户在验收的时候提出了一个很为难人的要求,那就是3台集群服务,停止2台以后,还要求我们的应用能提供服务,这就有点难为人了。

  因为用过Zookeeper的人都知道,Zookeeper的leader的选举需要大多数同意,也就是说三台机器的Zookeeper集群那么选举leader就需要两台,如果只剩下一台Zookeeper那么是无法完成leader选举的,也就是说Zookeeper将不能对外提供服务。

  我是在公司研发群里得到别的研发团队的帮助请求,而我正好在研究Zookeeper,所以给出了解决方案,并测试通过。

二、解决方案

  解决方法还是比较简单的,此处不再讲解Zookeeper的leader选举,后续可以参照我的博客,Zookeeper leader选举

2.1 修改源码

  修改org.apache.zookeeper.server.quorum.flexible.QuorumHierarchical类的containsQuorum方法为:

public boolean containsQuorum(HashSet<Long> set){
return true;
}

  修改org.apache.zookeeper.server.quorum.flexible.QuorumMaj类的containsQuorum方法为:

public boolean containsQuorum(HashSet<Long> set){
return true;
}

  这两个方法是关于选举的算法,应用了大多数原则,现在直接去掉。

2.2 打包

  将这两个类单独打包,命名为_patch-0.1.jar,这么命名的目的就是,加载的时候优先加载我修改的类,下划线优先加载。

2.3 安装及测试步骤

2.3.1 安装

  首先停止Zookeeper集群。

  然后将压缩包解压得到的_patch-0.1.jar放置到每个节点的:${zkPath}/lib/下。

2.3.2 测试

  1. 在集群未启动时,使用zk客户端连接集群(-server ip:port,ip:port,ip:port),此时客户端会持续报连接异常,然后启动任意一个节点,zk客户端就能正常使用。
  2. 集群完全启动后,任意停止其中两个,zk依然可以提供服务,客户端能正常使用,
  3. 使用java的zk客户端zkclient-0.8.jar进行测试,测试通过

2.4 注意事项

  测试比较简单,只涉及到单节点提供服务以及leader选举,未经过更深层次的测试,不建议在正式生产环境下使用,所以通过测验以后,建议移除单节点支持。移除方式:依次将每个节点停止服务->移除补丁包->重启;即可。

【Zookeeper】Zookeeper集群单节点提供服务的更多相关文章

  1. Vertica集群单节点宕机恢复方法

    Vertica集群单节点宕机恢复方法 第一种方法: 直接通过admintools -> 5 Restart Vertica on Host 第二种方法: 若第一种方法无法恢复,则清空宕机节点的c ...

  2. elastic集群单节点停机维护

    为了elastic时时提供服务,需要elastic至少状态维持在yellow状态.所有,维护时需要依次对elastic单个节点进行维护. 操作步骤如下: 1.停止elastic的自动分配功能 curl ...

  3. ZooKeeper 02 - ZooKeeper集群的节点为什么是奇数个

    目录 1 关于节点个数的说明 2 ZooKeeper集群的容错数 3 ZooKeeper集群可用的标准 4 为什么不能是偶数个节点 4.1 防止由脑裂造成的集群不可用 4.2 奇数个节点更省资源 4. ...

  4. 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群

    规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...

  5. 四:ZooKeeper的集群,伪集群,单机的搭建

    一:ZooKeeper服务安装包下载 第一步:打开zooKeeper官网

  6. 初始zookeeper与集群搭建实例

    zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...

  7. zookeeper的集群介绍、搭建、环境、安装

    zookeeper是本身是一种分布式协调服务(英文意思动物园园长因为Hadoop就是一个动物园,storm.hadoop.kafkaka.hbaser都是基于zookeeper开发的) 原理:Zook ...

  8. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试

    一. zookeeper安装(集群):http://www.cnblogs.com/wangfajun/p/8692117.html  √ 二. ActiveMq配置: 1. ActiveMq集群部署 ...

  9. Zookeeper的集群安装

    Zookeeper的集群安装 关闭防火墙 安装jdk 下载Zookeeper的安装包 解压Zookeeper的安装包 进入Zookeeper的安装目录中conf目录 将zoo_sample.cfg复制 ...

随机推荐

  1. 二分查找的实现(java版本)

    一.二分法查找的定义 依次将所查找数据与中心数据对比,根据大小调整数据边界二.二分查找的条件 数组必须排序三.二分查找的原理 四.二分法查找的代码 /* * 从数组当中找到4所在的索引: * {2,4 ...

  2. Scala的Trait详解

    http://article.yeeyan.org/view/178378/358355

  3. Ruby:Mechanize的使用教程

    小技巧 puts Mechanize::AGENT_ALIASES 可以打印出所有可用的user_agent puts Mechanize.instance_methods(false) 输出Mech ...

  4. Identity Server4学习系列三

    1.简介 在Identity Server4学习系列一和Identity Server4学习系列二之令牌(Token)的概念的基础上,了解了Identity Server4的由来,以及令牌的相关知识, ...

  5. 搭建Golang开发环境

    Go语言是谷歌 2009 年首次推出并在 2012 年正式发布的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 ...

  6. CDN基本工作过程

    看了一些介绍CDN的文章,感觉这篇是讲的最清楚的. 使用CDN会极大地简化网站的系统维护工作量,网站维护人员只需将网站内容注入CDN的系统,通过CDN部署在各个物理位置的服务器进行全网分发,就可以实现 ...

  7. c# winform as3相互调用

    C#主要代码: 首先要添加COM组件-Shockwave Flash Object //接收flash发送过来的信息        private void axShockwaveFlash1_Fla ...

  8. .net 中 C# 简单自定义事件实现

    个人认为事件处理机制是一种很好的机制 特别是可以方便安全的实现窗口间(子窗口对父窗口,子窗口间等)的消息传递.功能调用 下面展现的源自以前论坛上看到的一套方法,可能记得不大准确,所以可能不规范,我的理 ...

  9. sql-DDL, DML 常用语句

    mysql的安装可见: http://www.cnblogs.com/wenbronk/p/6840484.html 很久不用mysql, 今天建表都不会了, , , 慢慢补充 sql语言分为3种: ...

  10. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...