【Zookeeper】Zookeeper集群单节点提供服务

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

一、问题背景

  公司的产品使用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选举,未经过更深层次的测试,不建议在正式生产环境下使用,所以通过测验以后,建议移除单节点支持。移除方式:依次将每个节点停止服务->移除补丁包->重启;即可。

时间: 2024-08-25 10:40:36

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

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

目录 1 关于节点个数的说明 2 ZooKeeper集群的容错数 3 ZooKeeper集群可用的标准 4 为什么不能是偶数个节点 4.1 防止由脑裂造成的集群不可用 4.2 奇数个节点更省资源 4.3 偶数个节点遇到的其他问题 1 关于节点个数的说明 ZooKeeper的单机服务 (也就是单节点, 或着单进程) 虽然便于开发与测试, 但并不适合在生产环境使用 -- 生产环境中为了服务的高可用以及容错性, 建议使用ZooKeeper集群模式. ZooKeeper的集群中, 建议部署奇数个ZooK

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

一:zookeeper集群模式配置[1]zookeeper/cnfg/zoo_sample.cfg复制一份样例文件,将配置写在zoo.cfg中.集群中所有节点的该目录下都要放置相同的配置文件#dataDir=/var/zookeeper存储zookeeper快照文件的目录,要在liunx该目录下创建zookeeper目录 #clientport=2181zookeeper服务器对外提供服务的端口号 #server.ID=host:port1:port2 ID==>ZK集群中节点的idhost==

初始zookeeper与集群搭建实例

zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务,使得分布式应用可以基于这些接口实现诸如同步.配置维护和分集群或者命名的服务. zookeeper是一个由多个service组成的集群,一个leader,多个follower,每个server保存一份数据部分,全局数据一致,分布式读写,更新请求转发由leader实施. 更新请求顺序进行,来自同一个cl

Centos7安装zookeeper+kafka集群

Centos7安装zookeeper+kafka集群 1  Zookeeper和kafka简介 1)  ZooKeeper 是一个分布式的.分层级的文件系统,能促进客户端间的松耦合,并提供最终一致的,用于管理.协调Kafka代理,zookeeper集群中一台服务器作为Leader,其它作为Follower 2)  Apache Kafka 是分布式发布-订阅消息系统,kafka对消息保存时根据Topic进行归类,每个topic将被分成多个partition(区),每条消息在文件中的位置称为off

zookeeper+KAFKA 集群搭建

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.集群管理等. 因为Kafka集群是把状态信息保存在Zookeeper中的,并且Kafka的动态扩容是通过Zookeeper来实现的,所以需要优先搭建Zookeerper集群,建立分布式状态管理.开始准备环境,搭建集群: zookeeper是基于Java环境开发

Hadoop初学指南(10)--ZooKeeper的集群安装和操作

本文简单介绍了ZooKeeper的基本知识. (1)概述 ①什么是ZooKeeper? Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等 ②Zookeeper的角色 ③为什么使用Zookeeper? 大部分分布式应用需要一个主控.协调器或控制器来管理物理分布的子进程(如资源.任务分配等) 目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制 协调程序的

zookeeper的集群安装

zookeeper是针对大型分布式系统的高可靠的协调系统.由此,我们可 知,zookeeper是个协调系统,它的作用对象是分布式系统.那么,为什么分 布式系统需要一个协调系统呢?原因如下: 开发分布式系统是件灰常困难复杂的事情,其中的困难主要体现在分布式 系统的"部分失败"."部分失败"是指信息在网络的两个节点之间传送的时 候,如果网络出现了故障,发送者无法知道接收者是否收到了这个信息,而且这 中故障的原因很复杂,接收者可能在出现网络错误之前已经接收到了信息,也可

Zookeeper服务器集群的搭建与操作

ZooKeeper 作用:Zookeeper 可以用来保证数据在zk集群之间的数据的事务性一致(原子操作). 介绍:Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.  它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. 特性:简单的.富有表现力的.具有高可用性.采用松耦合交互方式.是一个资源库. 如何搭建ZooKeeper服务器集群 2.1 ZooKeeper服务器集群规模不小于3个节点,要求各服务器之间

zookeeper在集群负载均衡中的应用

zookeeper本身是不提供负载均衡的策略,需要自己来实现,所以这里确切的说,是在负载均衡中应用到了zookeeper做集群的协调. 对于HTTP请求的负载均衡,成熟的解决方案是Nginx(或Haproxy) +keepalived.其中Niginx负责代理HTTP请求,通过某种均衡策略访问集群中的服务器,keepalived负责检测集群中的服务器运行情况(有故障的机器移除,机器恢复工作后重新加入) 而对于TCP层的负载均衡,比如用Apache Mina做的网络通信应用,上面那种方案明显不适合