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 Transactional Log File with dbid 0 txnlog format version 2
- 7/17/12 11:58:04 AM CST session 0x13893084e900000 cxid 0x0 zxid 0x48 createSession 30000
- 7/17/12 12:00:57 PM CST session 0x13893084e900001 cxid 0x0 zxid 0x49 createSession 30000
- 7/17/12 12:01:24 PM CST session 0x13893084e900000 cxid 0x0 zxid 0x4a closeSession null
- 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
- 7/17/12 12:02:21 PM CST session 0x13893084e900001 cxid 0x12 zxid 0x4c setData '/test-abc,#61,1
- 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
- 7/17/12 12:03:17 PM CST session 0x13893084e900001 cxid 0x15 zxid 0x4e setData '/test-abc,#61,2
- EOF reached after 7 txns.
【ZooKeeper Notes 2】ZooKeeper快速搭建
http://nileader.blog.51cto.com/1381108/795230
mv /home/admin/taokeeper/zookeeper-3.4.3/conf/zoo_sample.cfg zoo.cfg
dataDir=/home/admin/taokeeper/zookeeper-3.4.3/data
-
mkdir /home/admin/taokeeper/zookeeper-3.4.3/data
/home/admin/taokeeper/zookeeper-3.4.3/bin/zkServer.sh start
/home/admin/taokeeper/zookeeper-3.4.3/bin/zkCli.sh 或 echo stat|nc localhost 2181
mv /home/admin/taokeeper/zookeeper-3.4.3/conf/zoo_sample.cfg 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
-
mkdir /home/admin/taokeeper/zookeeper-3.4.3/data
/home/admin/taokeeper/zookeeper-3.4.3/bin/zkServer.sh start
/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
- 启用脚本删除历史事务日志以便控制内存的使用
清理事务日志
- #!/bin/bash
- source /etc/profile
- #snapshot file dir
- dataDir=/opt/zookeeperdata/version-2
- #tran log dir
- dataLogDir=/dev/shm/version-2
- #leave transaction files
- leaveTran=10
- #leave snapshot files
- leaveSnap=10000
- echo ""
- echo ""
- echo "before purge memory:"
- free -m
- ls -t $dataLogDir/log.* | tail -n +$leaveTran | xargs rm -f
- ls -t $dataDir/snapshot.* | tail -n +$leaveSnap | xargs rm -f
- echo "after purge memory:"
- free -m
zookeeper配置
- dataDir=/opt/zookeeperdata
- dataLogDir=/dev/shm
- #自动清理时保存在datadir里的数据快照数。最小值3
- #autopurge.snapRetainCount=3
- #自动清理任务的间隔小时数
- #autopurge.purgeInterval=1
- # 每当10000条事务日志写入时,创建snapshot文件
- 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