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

  • 相关阅读:
    PwnAuth——一个可以揭露OAuth滥用的利器
    Facebook 被指收集用户数据:通过照片和文本
    avast:中兴手机预装恶意软件 嵌入固件底层
    数字货币钱包安全白皮书
    CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
    南非再曝数据库泄露事件:致百万人信息大白
    华盛顿邮报:FBI 屡次夸大了“手机加密威胁”的数字
    工业互联网联盟发布新物联网安全成熟度模型
    深入剖析最新IE0day漏洞
    联储证券被曝存在多项信息安全漏洞
  • 原文地址:https://www.cnblogs.com/yiwangzhibujian/p/7087266.html
Copyright © 2020-2023  润新知