zookeeper 运维
尽管zookeeper在编程上有很多的阱陷,API也非常的难用,但zookeeper服务本身可以说是很牢靠的了,所以在网上貌似关于运维的文章比较少。
但省心并不代表不会出麻烦,下面总结下zookeeper运维相关的东东。
重要的参考资料
这里有一个很好的Pdf,介绍了很多zookeeper的东东,作者是zookeeper的committer之一:
http://www.infoq.com/presentations/Misconfiguration-ZooKeeper
另外,这里有一个总结:http://marcin.cylke.com.pl/blog/2013/03/21/zookeeper-tips/
配置zookeeper开机启动
首先修改bin/zkEnv.sh,配置ZOO_LOG_DIR的环境变量,ZOO_LOG_DIR是zookeeper日志输出目录,ZOO_LOG4J_PROP是log4j日志输出的配置:
- if [ "x${ZOO_LOG_DIR}" = "x" ]
- then
- ZOO_LOG_DIR="$ZOOBINDIR/../logs"
- fi
- if [ "x${ZOO_LOG4J_PROP}" = "x" ]
- then
- ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
- fi
再在/etc/init.d目录下增加zookeeper1文件,并加个可执行权限:
- cd /etc/init.d
- touch zookeeper1
- chmod +x zookeeper1
Too many connections from 错误
这个错误是因为同一个IP的zookeeper socket 连接数大于60了。zookeeper server默认限制每个IP最多60个连接。
这个在测试服务器上出现的,因为测试服务器上太多进程在跑了。。
修改为:
maxClientCnxns=150
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_advancedConfiguration
This ZooKeeper instance is not currently serving requests 的错误提示
当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。
通常在,只启动第一台zookeeper时会报这个错误。
在zookeeper server的日志里,会有类似的日志:
Exception causing close of session 0x0 due to java.io.IOException: ZooKeeperServer not running
Zookeeper连接速度很慢,Dubbo初始化很慢,应用启动很慢的问题
发现线下环境迁移到新机器后,应用启动变得很慢,本来十几秒启动的应用,变成几分钟才能启动。
启动过程没有报错,只是Dubbo的注册信息日志一直在比较慢地刷。
开始怀疑是网络问题,但是检查了iptables没有开启,用iptraf查看流量,也不高。机器的空闲内存也足够。
再检查Zookeeper的配置,磁盘的空间,应用的dubbo配置,jvm配置,发现都没有问题。
没办法了,用jprofiler来测试下,发现“org.I0Itec.zkclient.ZkClient$1.call”,这个调用耗时比较大。
这样确认是zookeeper本身比较慢,不是应用的问题。
用下面的zookeeper benchmark工具测试了下性能,发现read速度还可能,create/write速度非常慢,qps只有个位数。
于是问了下运维的同事,原来新机器是用共享磁盘的,所以速度很慢。
而zookeeper每次write请求都要写到log日志,并刷到磁盘里,所以非常的慢。
后来运维的同事换为本地磁盘,一切恢复正常。
管理工具:
Zookeeper官方自带的管理员工具:
http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html 官方的命令行工具可以胜任绝大部分工作了。
zktop
https://github.com/phunt/zktop python写的小工具,很有意思
taokeeper
项目地址:https://github.com/alibaba/taokeeper
淘宝出品的一个监控工具,还有可以用脚本来监控的功能。虽然开源了,但是实际上很难用,代码也很难扩展,而且有些jar包是淘宝内部的。
我修改了下,可以正常使用,代码地址在:https://github.com/hengyunabc/taokeeper
但是我们线上也没有用这个,线上只有zabbix的监控。
安装配置参考:
编译
1.下载这两个项目:
git clone https://github.com/hengyunabc/common-toolkit.git
git clone https://github.com/nileader/zkclient.git
先分别执行 mvn -Dmaven.test.skip install
2.下载本项目:
git clone https://github.com/hengyunabc/taokeeper.git
执行 mvn -Dmaven.test.skip clean package
到taokeeper-monitor/target/目录就可以看到生成的War包了。
部署
taokeeper使用mysql数据库来保存一些配置和日志。
导入taokeeper-build/etc/taokeeper.sql 文件,也可以从这里下载:文件:Taokeeper.sql.zip 。
配置tomcat启动参数,增加JVM启动参数:
JAVA_OPTS=-DconfigFilePath="~/taokeeper/taokeeper-monitor-config.properties"
并在上面的配置中配置好参数,例如:
systemInfo.envName=TEST
#DBCP
dbcp.driverClassName=com.mysql.jdbc.Driver
dbcp.dbJDBCUrl=jdbc:mysql://localhost:3306/taokeeper
dbcp.characterEncoding=GBK
dbcp.username=root
dbcp.password=root
dbcp.maxActive=30
dbcp.maxIdle=10
dbcp.maxWait=10000
#SystemConstant
SystemConstent.dataStoreBasePath=~/taokeeper/
#SSH account of zk server
SystemConstant.userNameOfSSH=hello
SystemConstant.passwordOfSSH=hello
其中SSH用户密码要配置对,zookeeper部署的机器要开放SSH服务。
把生成的War包改为ROOT.war,放到tomcat的webapps目录下,启动tomcat。
如果报log4j错误,则还要配置webapps/ROOT/WEB-INF/classes/log4j.properties 文件。也可以在编绎前先修改好。
打开 http://localhost:8080/ ,就可以看到taokeeper的界面了。
工作原理
taokeeper通过SSH连接到zookeeper部署的机器上,再在上面执行zookeeper的Four Letter Words来得到统计信息,再分析保存到mysql数据库中。
参考:http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_zkCommands
监控目标机器的负载,也是通过SSH连接到目标机器,再执行top等命令,再分析得到数据。
注意事项
在chrome浏览器下,“机器监控”这个功能有时会把信息显示下浏览器的下面,要拉到最后才能看到,并不是这个功能不能工作。
Exhibitor
这个是Netflix出品的一个监控工具,但实际上也很难用。。
Exhibitor的主要功能 监控本机的Zookeeper服务,可以自动重启挂掉的Zookeeper服务;
定期备份数据;
定期清理Zookeeper日志;
提供了一个Web界面可以修改Zookeeper的数据;
REST API。
Exhibitor安装
Exhibitor提供了三种运行方式:独立的jar文件,War包,core jar。推荐用jar方式运行,配置管理都很方便。
安装方法可以参考这里:https://github.com/Netflix/exhibitor/wiki/Building-Exhibitor,也可以从这里下载已经编绎好的jar文件:文件:Exhibitor-war-1.0-jar-with-dependencies.zip,下载后要修改后缀为jar。
运行
java -jar <path>/exhibitor-xxx.jar -c file
Exhibitor自动创建配置文件,在web界面所做的配置更改都会保存到exhibitor.properties中。
配置项
参考:https://github.com/Netflix/exhibitor/wiki/Configuration-UI
在配置“Servers”参数时,一定要注意要配置的是hostname,而不是IP。所以如果配置的是IP的话,一定要到目标机器上去检查hostname和IP是否一致。
注意事项
Exhibitor通过jps命令来判断Zookeeper服务是否运行,所以要配置好jps命令,如果没有当前没有jps命令的话,可以通过类似如下的命令创建一个软链接:
ls -s /home/www/jdk/jdk1.7.0_15/bin/jps /usr/bin/jps
Exhibitor会自动创建并覆盖zookeeper的配置文件,所以要在Web界面上把Zookeeper的所有参数都配置,
否则如果Zookeeper被Exhibitor重启后,可以会出现因为配置有错误而无法启动的状况。
在“control panel”面板中,当显示绿色,则说明Zookeeper服务正常,可以对外服务,当显示黄色或者红色,
则Zookeeper不能对外提供服务(这个和Zookeeper进程是否存在,是两个概念,即使Zookeeper进程存在,也可能无法对外提供服务)。
Exhibitor会定时探测Zookeeper服务是否正常,但是时间间隔默认配置为0,这个会导致机器CPU被消耗。要在Web界面中配置好“Live Check (ms)”参数。
因为Exhibitor如果探测到Zookeeper服务没有启动,会自动启动Zookeeper进程,所以在升级Zookeeper之前,要先停掉Exhibitor。
其它的一些东东:
性能测试相关:
https://github.com/brownsys/zookeeper-benchmark
这个工具输出结果比较乱,不过用起来还不错。
mvn -DZooKeeperVersion=3.4.5 package
./runBenchmark.sh test
然后在test文件夹下,会有生成的信息。主要在zk-benchmark.log这个文件里。
http://zookeeper.apache.org/doc/r3.4.5/zookeeperOver.html
http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview 自带的文档里有一点,不过貌似没更新过
http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview Hadoop里带的一个测试
https://ramcloud.stanford.edu/wiki/display/ramcloud/ZooKeeper+Performance
http://rdc.taobao.com/team/jm/archives/1070 淘宝的一个测试
zookeeper 运维的更多相关文章
- zookeeper运维 --【】转】
from:http://blog.csdn.net/hengyunabc/article/details/19006911 zookeeper运维 尽管zookeeper在编程上有很多的阱陷,AP ...
- zookeeper运维(转)
本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...
- ZooKeeper 运维经验
转自:http://www.juvenxu.com/2015/03/20/experiences-on-zookeeper-ops/ ZooKeeper 运维经验 ZooKeeper 是分布式环境下非 ...
- Zookeeper 运维实践手册
Zookeeper是一个高可用的分布式数据管理与协调框架,该框架能很好地保证分布式环境中数据一致性.一般用来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等. 一.生产环境中Zook ...
- Zookeeper运维常用四字命令
Zookeeper运维常用四字命令 echo stat|nc 127.0.0.1 2181 查看哪个节点被选择作为follower或者leader 使用echo ruok|nc 127.0.0.1 2 ...
- Zookeeper运维经验
转自:http://www.juvenxu.com/2015/03/20/experiences-on-zookeeper-ops/ ZooKeeper 是分布式环境下非常重要的一个中间件,可以完成动 ...
- Zookeeper运维
一.运维配置 参考:http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html#sc_configuration 基础配置 ...
- Zookeeper运维的一些经验[转]
Zookeeper是一个分布式协调框架,有不错的性能,也经过许多公司的验证,所以在很多场景都有使用.大家一般用Zookeeper来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等.在 ...
- Zookeeper运维问题集锦
实际工作中用到Zookeeper集群的地方很多, 也碰到过各种各样的问题, 在这里作个收集整理, 后续会一直补充; 其中很多问题的原因, 解决方案都是google而来, 这里只是作次搬运工; 其实很多 ...
随机推荐
- Flask 6 模板2
NOTE Jinja2提供了多种控制程序,可以用来改变模板的渲染流程. 1.在模板中使用条件控制语句: templates/condition.html: {% if user %} Hello, { ...
- 谷歌开发者工具(F12)的使用小坑
python模拟登陆知乎,用开发者工具跟踪浏览器与服务器的交互,需要知道用户名,密码的字段名,可在文件email中看到:需要注意的是一定要 勾选 preserve log ,否则登陆之前的交互不会显示 ...
- Django怎么获取get请求里面的参数
获取get请求里面参数的两种方法之三种写法一,当get网址是127.0.0.1:8000/info/?id=20&s_id=30这种类型的网址时 我们在urls的路由的urlpatterns里 ...
- 【Demo】jQuery 图片放大镜效果——模仿淘宝图片放大效果
实现功能: 模仿淘宝图片放大效果,鼠标移动到小图片的某一处,放大镜对应显示大图片的相应位置. 实现效果: 实现代码: <!DOCTYPE html> <html> <he ...
- hdu 5303 DP(离散化,环形)+贪心
题目无法正常粘贴,地址:http://acm.hdu.edu.cn/showproblem.php?pid=5303 大意是给出一个环形公路,和它的长度,给出若干颗果树的位置以及树上的果子个数. 起点 ...
- HTML 5之meta标签viewport应用
关于viewport的概念: 先了解移动设备的屏幕尺寸和设备尺寸: iPhone3 设备尺寸 320*480 ; 屏幕尺寸 320*480 iPhone4 设备尺寸 320*480 ; 屏幕尺寸 ...
- 【Matplotlib】线设置,坐标显示范围
改变线的颜色和线宽 参考文章: controlling line properties Line API 线有很多属性你可以设置:线宽,线型,抗锯齿等等:具体请参考matplotlib.lines.L ...
- 《剑指offer》习题解答(C/C++)
1.二维数组中的查找 /* 题目:在一个二维数组中,没一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- Sublime 中文标题乱码
---title:Sublime 中文标题乱码--- #markdown语法(非Github Flavored) #解决办法: 在用户设置里添加一项,强制不根据 dpi 缩放dpi_scale: 1. ...
- 流程设计器jQuery + svg/vml(Demo6 - 增加结点属性及切换)
到目前流程设计器流程结点的拖拽操作已基本完成,接下来就到结点的属性开发了.前面已经开发过流程模板的属性了,结点属性跟模板属性类似,从属性模板定义copy一份,然后按各结点类型进行调整就ok. 1.先来 ...