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

一、问题背景

  公司的产品使用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. 无监督学习——K-均值聚类算法对未标注数据分组

    无监督学习 和监督学习不同的是,在无监督学习中数据并没有标签(分类).无监督学习需要通过算法找到这些数据内在的规律,将他们分类.(如下图中的数据,并没有标签,大概可以看出数据集可以分为三类,它就是一个 ...

  2. WebFlux基础之响应式编程

    上篇文章,我们简单的了解了WebFlux的一些基础与背景,并通过示例来写了一个demo.我们知道WebFlux是响应式的web框架,其特点之一就是可以通过函数式编程方式配置route.另外究竟什么是响 ...

  3. 如何用Python来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  4. 【JAVA】判断当前日期是否在时间点内

    public static boolean isInDate(Date date, String strDateBegin, String strDateEnd) { SimpleDateFormat ...

  5. JavaScript -- Screen

    -----041-Screen.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  6. JavaScript -- Window-弹出窗口

    -----033-Window-弹出窗口.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=& ...

  7. vuex详细介绍和使用方法

    1.什么是vuex? 官方的解释: Vuex是一个专为Vue.js应用程序开发的状态管理模式 当项目比较庞大的时候,每个组件的状态比较多,为了方便管理,需要把组件中的状态抽取出来,放入Vuex中进行统 ...

  8. hibernate对连接池的支持和HQL查询

    hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...

  9. SpringMVC融合Swagger UI使用

    相信大家都很熟悉springmvc,在用其进行开发工作的时候,有没有遇到几个小问题?比如: 1.前后端分离的模式下,前端开发人员如何得知后端的开发进度,有哪些接口可用? 2.后端开发人员在测试自己的接 ...

  10. S3C6410启动过程分析

    S3C6410支持多种存储设备,包括片上的Internal ROM.Internal SRAM和片外的Flash/ROM.DRAM.多种启动设备形成多种启动模式,分析如下. 本文为作者原创,转载请注明 ...