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

一、问题背景

  公司的产品使用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. 字符串编码C#

    给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”.比如字符串AAAABCCDAA会被编码成4A1B2C1D2A. 输入描述: 每个测试输入包含1个测试用例 每个测试用例 ...

  2. Spring4 mvc+maven 框架搭建(3)

    经过前面两个环节,spring mvc的原料已经准备好了,现在就可以正式开始搭建springmvc框架了. 首先先介绍介绍搭建的框架具有的功能: 1)集成log4j,配置好日志相关并可以打印出相关的日 ...

  3. JavaScript与CSS相对路径引用的差异

    转自:http://blog.csdn.net/luohuidong01/article/details/74938652 JS跟CSS相对路径引用的差异在于他们的参考点不一样,下面举个例子说明一下. ...

  4. Android:一个高效的UI才是一个拉风的UI(二)

    趁今晚老大不在偷偷早下班,所以有时间继续跟大伙扯扯UI设计之痛,也算一个是对上篇<Android:一个高效的UI才是一个拉风的UI(一)>的完整补充吧.写得不好的话大家尽管拍砖~(来!砸死 ...

  5. Android之混淆心得与亲身体验

    project.properties 中设置 proguard.config=proguard-project.txt proguard-project.txt  中设置 -optimizationp ...

  6. PHP多进程系列笔记(三)

    本节讲解几个多进程的实例. 多进程实例 Master-Worker结构 下面例子实现了简单的多进程管理: 支持设置最大子进程数 Master-Worker结构:Worker挂掉,Master进程会重新 ...

  7. Vue笔记:使用 VS Code 断点调试

    直接在 Chrome 的调试窗口中调试 Vue 代码有诸多不便, 好在 Visual Studio Code 中提供了 Debugger for Chrome 插件,能够通过配置直接在 VS Code ...

  8. springboot+zuul(一)------实现自定义过滤器、动态路由、动态负载。

    参考:https://blog.csdn.net/u014091123/article/details/75433656 https://blog.csdn.net/u013815546/articl ...

  9. codis测试

    .通过客户端连接codis-proxy来进行测试 codis-proxy是所有redis操作的代理对象,其连接的端口为19000 $ cd /usr/local/codis/bin $ ./redis ...

  10. 【angular5项目积累总结】侧栏菜单 navmenu

    View Code import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/co ...