zookeeper运维管理详解


zookeeper运维管理详解

文章插图
 
注:运行client是指作为客户端,与server进行数据通信,而运行server是指将ZK作为服务器部署运行 。
1.1.2软件环境
ZooKeeper Server需要6或更高版本的JDK支持 。集群的机器数量方面,建议使用3台独立的linux服务器构成的一个ZK集群 。需要明确一个很重要的特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的
你可以按照以下步骤来配置一个ZK机器
1. 安装JDK 。相关链接:http://JAVA.sun.com/javase/downloads/index.jsp
2. 设置Java heap 大小 。避免内存与磁盘空间的交换,能够大大提升ZK的性能,设置合理的heap大小则能有效避免此类空间交换的触发 。在正式发布上线之前,建议是针对使用场景进行一些压力测试,确保正常运行后内存的使用不会触发此类交换 。通常在一个物理内存为4G的机器上,最多设置-Xmx为3G 。
3. 下载安装ZooKeeper,相关链接:http://zookeeper.Apache.org/releases.html
4. 配置文件zoo.cfg 。初次使用zookeeper,按照如下这个简单配置即可:
tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2 server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
本文后续章节会对这些参数进行详细的介绍,这里只是简单说几点:
A. 集群中的每台机器都需要感知整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式,每行写一个机器配置:server.id=host:port:port. 关于这个id,我们称之为Server ID,标识host机器在集群中的机器序号,在每个ZK机器上,我们需要在数据目录(数据目录就是dataDir参数指定的那个目录)下创建一个myid文件,myid中就是这个Server ID数字 。
B. 在ZooKeeper的设计中,集群中任意一台机器上的zoo.cfg文件的内容都是一致的 。因此最好是用SVN把这个文件管理起来,保证每个机器都能共享到一份相同的配置 。
5. 关于myid文件 。myid文件中只有一个数字,即一个Server ID 。例如,server.1 的myid文件内容就是"1" 。注意,请确保每个server的myid文件中id数字不同,并且和server.id=host:port:port中的id一致 。另外,id的范围是1~255 。
6. 至此,配置文件基本ok,可以尝试使用如下命令来启动zookeeper了:
$ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conforg.apache.zookeeper.server.quorum.QuorumPeerMainzoo.cfg
注意,不同的ZK版本,依赖的log4j和slf4j版本也是不一样的,请看清楚自己的版本后,再执行上面这个命令 。QuorumPeerMain类会启动ZooKeeper Server,同时,JMX MB也会被启动,方便管理员在JMX管理控制台上进行ZK的控制 。这里有对ZK JMX的详细介绍:http://zookeeper.apache.org/doc/r3.4.3/zookeeperJMX.html. 另外,完全可以有更简便的方式,直接使用%ZK_HOME%/bin 中的脚本启动即可 。
./zkServer.sh start
7. 连接ZK host来检验部署是否成功 。
A. Java语言的话,可以通过运行这个命令来检测:
$ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jarorg.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181
B. 如果是C语言的话,方法如下:
$ make cli_st
$ make cli_mt
然后按照的这样的方式连接ZK:$ cli_mt 127.0.0.1:2181 无论运行哪种客户端,最终都是一个类似于文件系统的命令行操作 。
注意:除了上面这种检测方法,其实%ZK_HOME%/bin也有其它脚本,下面这个命令执行后,就进入了zookeeper树状结构的文件系统中 。
./zkCli.sh
另外,还有一种方式,能够查看ZK服务器当前状态,如下,这个能够很好的看出目前这个机器的运行情况了:
$ echo stat|nc localhost 2181
Zookeeper version: 3.4.3-1240972, built on 02/06/2012 10:48 GMT
Clients:
/127.0.0.1:40293[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 1/2/3
Received: 4
Sent: 3
Outstanding: 0
Zxid: 0×200000006
Mode: leader
Node count: 4
1.3单机模式的配置
如果你想安装一个ZooKeeper来进行开发测试,通常可以使用单机模式来启动ZK 。大体的步骤和上面说的是一样了,除了配置文件会更加简单一些 。详细的配置方法可以查看这里:http://zookeeper.apache.org/doc/r3.4.3/zookeeperStarted.html#sc_InstallingSingleMode
2.运 维
2.1 部署方案的设计
我们常说的ZooKeeper能够提供高可用分布式协调服务,是要基于以下两个条件:


推荐阅读