zoukankan      html  css  js  c++  java
  • JAVA EE Apache Zookeeper / Google Chubby

    s

    http://zookeeper.apache.org/

    Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.

    ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。

     

    tcpwa.exe 

    msvcr100d.dll 该文件放入C:\Windows\System32\和C:\Windows\SysWOW64\目录下

    向10.37.20.68机器2181端口发起连接请求1万,并且占据不释放连接的小工具。可用于测试zookeeper在海量连接情况的下,处理能力。

    DOS使用tcpwa.exe方法如下:

    C:\Users\Lindows>C:\Users\Lindows\Desktop\tcpwa.exe 10.37.20.68:2181 10000

    文件下载地址:

    http://dl.iteye.com/topics/download/9121bcd1-a270-3123-90b0-8abd3187cd96

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

     

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度详细介绍 Zookeeper 的安装和配置文件中各个配置项的意义,以及分析 Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等),用 Java 实现它们并给出示例代码。

     

    分布式设计与开发(三)------高一致性服务ZooKeeper

    http://blog.csdn.net/cutesource/article/details/5822459

    【ZooKeeper Notes 2】ZooKeeper快速搭建

    http://nileader.blog.51cto.com/1381108/795230

    http://dl.iteye.com/topics/download/958ec88c-08fc-3565-b8ed-8963d61f1e2c

    【ZooKeeper Notes 10】ZooKeepr监控

    http://nileader.blog.51cto.com/1381108/1032164

    https://cloud.github.com/downloads/nileader/ZooKeeper-Notes/%E3%80%90ZooKeeper%20Notes%2010%E3%80%91ZooKeeper%E7%9B%91%E6%8E%A7.pdf

    【ZooKeeper Notes 4】可视化zookeeper的事务日志

    http://nileader.blog.51cto.com/1381108/926753

    前面提到,在zookeeper server的配置文件zoo.cfg中可以通过dataLogDir来配置zookeeper的事务日志的输出目录,这个事务日志类似于下面这样的文件:

    zookeeper 事务日志

    这个文件是一个二进制文件一般不能够直接识别那么是否有方法可以把这些事务日志转换成正常日志文件呢答案是肯定的~ 
          Zookeeper自带一个工具类:org.apache.zookeeper.server.LogFormatter, 使用这个类可以对zookeeper的事务日志进行格式化查看方法如下java LogFormatter D:\zookeeper-3.4.3\zk_data\version-2\log.48

         大家可以自行下载本文的附件进行尝试通过这种方法,我们就可以看到类似于下面这样清晰的事务日志了~

    1. ZooKeeper Transactional Log File with dbid 0 txnlog format version 2 
    2. 7/17/12 11:58:04 AM CST session 0x13893084e900000 cxid 0x0 zxid 0x48 createSession 30000 
    3.  
    4. 7/17/12 12:00:57 PM CST session 0x13893084e900001 cxid 0x0 zxid 0x49 createSession 30000 
    5.  
    6. 7/17/12 12:01:24 PM CST session 0x13893084e900000 cxid 0x0 zxid 0x4a closeSession null 
    7. 7/17/12 12:01:55 PM CST session 0x13893084e900001 cxid 0xc zxid 0x4b create '/test-abc,#61,v{s{31,s{'world,'anyone}}},F,3 
    8.  
    9. 7/17/12 12:02:21 PM CST session 0x13893084e900001 cxid 0x12 zxid 0x4c setData '/test-abc,#61,1 
    10.  
    11. 7/17/12 12:03:15 PM CST session 0x13893084e900001 cxid 0x14 zxid 0x4d create '/test-abc/abc,#61,v{s{31,s{'world,'anyone}}},F,1 
    12.  
    13. 7/17/12 12:03:17 PM CST session 0x13893084e900001 cxid 0x15 zxid 0x4e setData '/test-abc,#61,2 
    14.  
    15.  
    1. EOF reached after 7 txns. 
    1.  
    1.  
     

    【ZooKeeper Notes 2】ZooKeeper快速搭建

    http://nileader.blog.51cto.com/1381108/795230

     下载PDF版本

           本文是ZooKeeper的快速搭建,旨在帮助大家以最快的速度完成一个ZK集群的搭建,以便开展其它工作。本方不包含多余说明及任何调优方面的高级配置。如果要进行更深一层次的配置,请移步《ZooKeeper管理员指南——部署与运维》。

      单机模式(7步)

    Step1配置JAVA环境。检验方法:执行java –versionjavac –version命令。

    Step2下载并解压zookeeper

    链接:http://mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.4.3/,(更多版本:http://dwz.cn/37HGI

     

    )最终生成目录类似结构:/home/admin/taokeeper/zookeeper-3.4.3/bin

    Step3重命名 zoo_sample.cfg文件

     mv /home/admin/taokeeper/zookeeper-3.4.3/conf/zoo_sample.cfg  zoo.cfg

     Step4vi zoo.cfg,修改

    dataDir=/home/admin/taokeeper/zookeeper-3.4.3/data

    Step5创建数据目录:mkdir /home/admin/taokeeper/zookeeper-3.4.3/data

     
     
    1. mkdir  /home/admin/taokeeper/zookeeper-3.4.3/data 

     

    Step6启动zookeeper:执行

    /home/admin/taokeeper/zookeeper-3.4.3/bin/zkServer.sh start

    Step7检测是否成功启动:执行

    /home/admin/taokeeper/zookeeper-3.4.3/bin/zkCli.sh 或 echo stat|nc localhost 2181

     

    集群模式(8步)

    Step1配置JAVA环境。检验方法:执行java –versionjavac –version命令。

    Step2下载并解压zookeeper

    链接:http://mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.4.3/,(更多版本:http://dwz.cn/37HGI)最终生成目录类似结构:/home/admin/taokeeper/zookeeper-3.4.3/bin

    Step3重命名 zoo_sample.cfg文件

     mv /home/admin/taokeeper/zookeeper-3.4.3/conf/zoo_sample.cfg  zoo.cfg

     Step4vi zoo.cfg,修改

    dataDir=/home/admin/taokeeper/zookeeper-3.4.3/data 
    
    server.1=1.2.3.4:2888:3888 
    server.2=1.2.3.5:2888:3888 
    server.3=1.2.3.6:2888:3888

    这里要注意下server.1这个后缀,表示的是1.2.3.4这个机器,在机器中的server id是1

    Step5创建数据目录:mkdir /home/admin/taokeeper/zookeeper-3.4.3/data

     
     
    1. mkdir  /home/admin/taokeeper/zookeeper-3.4.3/data 

     

    Step6在标识Server ID.

    在/home/admin/taokeeper/zookeeper-3.4.3/data目录中创建文件 myid 文件,每个文件中分别写入当前机器的server id,例如1.2.3.4这个机器,在/home/admin/taokeeper/zookeeper-3.4.3/data目录的myid文件中写入数字1.

    Step7启动zookeeper:执行

    /home/admin/taokeeper/zookeeper-3.4.3/bin/zkServer.sh start

    Step8检测是否成功启动:执行

    /home/admin/taokeeper/zookeeper-3.4.3/bin/zkCli.sh 或 echo stat|nc localhost 2181

     

     

     

    经压测:zookeeper 的队列深度超过10万时,ZK系统不稳定,风控业务系统性能TPS逐渐下降,平均处理响应时间逐渐上涨,渣队列服务,已告知开发准备弃用该组件。

     

    IBM WAS MQ 7 队列 20k数据传输时,队列深度约为4000左右。

    WebSphere MQ Linux v7.1 Performance Evaluations Version 1.2

    http://dl.iteye.com/topics/download/9e5e0f9e-e2a8-3d76-a946-0d1fbada29a6

     

    团队博客:http://rdc.taobao.com/team/jm/archives/tag/zookeeper

    《ZooKeeper快速搭建》http://nileader.blog.51cto.com/1381108/795230

    《ZooKeeper Java API 使用样例》http://nileader.blog.51cto.com/1381108/795265

    《可视化zookeeper的事务日志》http://nileader.blog.51cto.com/1381108/926753

    《单机启动多个zk实例注意点》http://nileader.blog.51cto.com/1381108/928645

    《客户端对zookeeper的操作是不可回退的》http://nileader.blog.51cto.com/1381108/929588

    《使用super身份对有权限的节点进行操作》http://nileader.blog.51cto.com/1381108/930635

    《ZooKeeper 权限控制》http://nileader.blog.51cto.com/1381108/795525

    《ZooKeepr日志清理》http://nileader.blog.51cto.com/1381108/932156

    《ZooKeeper客户端地址列表的随机原理》http://nileader.blog.51cto.com/1381108/932948

    《ZooKeeper 会话超时》http://nileader.blog.51cto.com/1381108/938106

    《数据模型》http://nileader.blog.51cto.com/1381108/946788

    《Watcher使用的注意事项》http://nileader.blog.51cto.com/1381108/955515

    《避免羊群效应(Herd Effect)》http://nileader.blog.51cto.com/1381108/961809

    《ZooKeepr监控》http://nileader.blog.51cto.com/1381108/1032164

    《ZooKeeper运维之使用SnapshotFormatter可视化快照数据》http://nileader.blog.51cto.com/1381108/983259

    《修复“ZooKeeper客户端打印当前连接的服务器地址为null”的Bug》http://nileader.blog.51cto.com/1381108/1049470

    《ZooKeeper管理员指南——部署与管理ZooKeeper》http://nileader.blog.51cto.com/1381108/1032157

    《ZooKeeper典型应用场景一览》http://nileader.blog.51cto.com/1381108/1040007

    《ZooKeeper与Diamond有什么不一样》http://nileader.blog.51cto.com/1381108/1046316

    《ZooKeeper客户端事件串行化处理》http://nileader.blog.51cto.com/1381108/973910

     

     

    Storm Worker网络连接泄漏 / 当Zookeeper 连接大于1万时,ZK会怎么样?

    http://woodding2008.iteye.com/blog/2304453

    2016-06-11 21:40:22 b.s.d.nimbus [INFO] Executor dataRealYkvvcount-214-1464683013:[544 544] not alive  
    2016-06-11 21:40:22 b.s.s.EvenScheduler [INFO] Available slots: (["8033393c-e639-41a5-a565-066e6bd1748b" 5723]  

    storm任务worker频繁发生executor not alive,worker & supervisor日志中没有发现其他错误信息。

    观察网络连接数发现比较高9k+,猜测连接不够用了。

    将net.ipv4.tcp_max_tw_buckets值从10000调整至200000,操作日志不再出现。

    解决zookeeper磁盘IO高的问题

    http://woodding2008.iteye.com/blog/2327100

    为什么zookeeper会导致磁盘IO高

    由于早期的storm版本心跳信息严重依赖zookeeper,心跳风暴会导致zookeeper的事务日志频繁的写磁盘,带来的问题首当其冲的是磁盘IO会爆掉。

    优化思路

    将zookeeper事务的日志放入内存中,降低对磁盘的依赖,受内存空间容量限制,需要控制事务日志大小。

    这个方案的风险就是一旦机房断电会导致zookeeper中的部分数据丢失,所以特别重要的数据不建议这样做,SSD会是个不错的选择。

    方案步骤

    • 事务日志指向内存文件系统dataLogDir=/dev/shm
    • 关闭自动事务日志的管理#autopurge.purgeInterval=1
    • 启用脚本删除历史事务日志以便控制内存的使用

    清理事务日志

    Java代码   收藏代码
    1. #!/bin/bash  
    2. source /etc/profile  
    3.   
    4. #snapshot file dir   
    5. dataDir=/opt/zookeeperdata/version-2  
    6. #tran log dir   
    7. dataLogDir=/dev/shm/version-2  
    8.   
    9. #leave transaction files  
    10. leaveTran=10  
    11. #leave snapshot files  
    12. leaveSnap=10000  
    13.   
    14. echo ""  
    15. echo ""  
    16. echo "before purge memory:"  
    17. free -m  
    18. ls -t $dataLogDir/log.* | tail -n +$leaveTran  | xargs rm -f  
    19. ls -t $dataDir/snapshot.* | tail -n +$leaveSnap | xargs rm -f  
    20. echo "after purge memory:"  
    21. free -m  

    zookeeper配置

    Java代码   收藏代码
    1. dataDir=/opt/zookeeperdata  
    2. dataLogDir=/dev/shm  
    3.   
    4.   
    5. #自动清理时保存在datadir里的数据快照数。最小值3  
    6. #autopurge.snapRetainCount=3  
    7.   
    8. #自动清理任务的间隔小时数  
    9. #autopurge.purgeInterval=1  
    10.   
    11. # 每当10000条事务日志写入时,创建snapshot文件  
    12. snapCount=10000  

     

     磁盘IO低至可以忽略  iostat -x 1000

    ZooKeeper测试

    http://woodding2008.iteye.com/blog/2309777

    测试环境

    测试版本

    •   java version "1.7.0_10" 64位
    •  zookeeper 3.4.5  xmx2G

    zookeeper Server 3台

      192.168.100.53  服务端口2181

      192.168.100.54  服务端口2181

      192.168.100.55  服务端口2181

      64G内存,12核 

     

    功能测试

     事件消费者

       192.168.100.53  

       192.168.100.54  

       192.168.100.55 

       操作:监听到注册节点的事件做相应的操作。 

     

    事件生产者

      192.168.100.53 

      操作:增加节点、删除节点、修改节点数据

     

    测试Case:

    • 通过zkServer.sh status命令查看zookeeper角色,停掉leader,zookeeper是可以正常工作,并且重新选举出一个leader。
    •  通过zkServer.sh status命令查看zookeeper角色,停掉follower,zookeeper是可以正常工作。      
    • 停掉任意两台zookeeper Server,zookeeper不能正常工作。
    • 最后一台监控zookeeper Server运行状态。zkServer.sh status
    • 集群B长时间做增加节点、修改节点数据、删除节点操作,集群A能正常监听到B集群事件。
    •  开始: 2013-04-03 20:00:00  结束: 2013-04-07 10:00:00 每次事件间隔:100ms  总事件次数:2932992 
    • 集群A中任意一台重新启动,重新注册到zookeeper集群,并能获取到,集群B最新节点信息。

     性能测试

    测试一

    3个进程,一个进程开1个连接,50个线程,节点没有订阅

    一个进程在一个zk节点下,先create EPHEMERAL node,再delete,create和delete各计一次更新。     

    DataSize(字节) totalReq(万次)totalTime(秒)SuccReq(万次)FailReq(万次)avgSuccTPS(次/秒)avgFailTPS(次/秒)
    2556001380         600043460
    5106001509600039760
    10206001536600039060

     

    测试二 

    一个zk node下3个sub连接,1个pub

    一个进程操作33个zk node,执行创建一个EPHEMERAL node,不删除 

    一共开启3个进程

    DataSize(字节) totalReq(万次)totalTime(秒)SuccReq(万次)FailReq(万次) avgSuccTPS(次/秒)avgFailTPS(次/秒)
    25519.8 8319.8 023850
    51019.8 8319.8 023850
    102019.8 8619.8 023020

       

     

    end

  • 相关阅读:
    在Win7 x64环境中将World Wind Java SDK 2.1.0嵌入到Eclipse中的方法
    WW中文地名标注:输出*.wwp和*.wpl文件
    [转]Microsoft Robotics Studio:微软仿真机器人集成开发环境,简称MSRS
    C#中定义类时关于CLSCompliant属性的声明
    Android Studio中使用Java+OpenGL ES创建Android项目
    [转]使用Unity进行3D开发的思路和主要技术优势
    在C++中实现委托事件的方法
    VS2008新建MFC程序时提示:当前页面的脚本发送错误 不是有效的Win32应用程序的解决办法
    [Web 前端] mockjs让前端开发独立于后端
    [Web 前端] 如何构建React+Mobx+Superagent的完整框架
  • 原文地址:https://www.cnblogs.com/lindows/p/14390210.html
Copyright © 2011-2022 走看看