`

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(次/秒)
255 600 1380          600 0 4346 0
510 600 1509 600 0 3976 0
1020 600 1536 600 0 3906 0

 

测试二 

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

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

一共开启3个进程

DataSize(字节)  totalReq(万次) totalTime(秒) SuccReq(万次) FailReq(万次)  avgSuccTPS(次/秒) avgFailTPS(次/秒)
255 19.8  83 19.8  0 2385 0
510 19.8  83 19.8  0 2385 0
1020 19.8  86 19.8  0 2302 0

   

 

end

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics