集群模式的配置
为了确保ZooKeeper服务的稳定与可靠性,一般是搭建成一个ZK集群来对外提供服务。关于ZooKeeper,须要明确一个很重要的特性:集群中只要有过半的机器是正常工做的,那么整个集群对外就是可用的(本文下面就用―过半存活便可用‖来代替这个特性吧^-^)。正是基于这个特性,建议是将ZK集群的机器数量控制为奇数较为合适。为何选择奇数台机器,咱们能够来看一下,假如是4台机器构成的ZK集群,那么只可以容许集群中有一个机器down掉,由于若是down掉2台,那么只剩下2台机器,显然没有过半。而若是是5台机器的集群,那么就可以对2台机器down掉的状况进行容灾了。
你能够按照如下步骤来配置一个ZK机器,更多详细步骤请查看《ZooKeeper快速搭建》: 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,按照以下这个简单配置便可:
1. tickTime=2000
2. dataDir=/var/lib/zookeeper/
3. clientPort=2181
4. initLimit=5
5. syncLimit=2 server.1=zoo1:2888:3888 6. server.2=zoo2:2888:3888 7. 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了:
1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4
j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf \ org.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 中的脚本启动便可。
1. ./zkServer.sh start
7. 链接ZK host来检验部署是否成功。
A. Java语言的话,能够经过运行这个命令来检测:
1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4
j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar \ org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181
B. 若是是C语言的话,方法以下:
1. $ make cli_st 2. $ make cli_mt
而后按照的这样的方式链接ZK:$ cli_mt 127.0.0.1:2181。不管运行哪一种客户端,最终都是一个相似于文件系统的命令行操做。
注意:除了上面这种检测方法,其实%ZK_HOME%/bin也有其它脚本,下面这个命令执行后,就进入了zookeeper树状结构的文件系统中。
1. ./zkCli.sh
另外,还有一种方式,可以查看ZK服务器当前状态,以下,这个可以很好的看出目前这个机器的运行状况了:
1. $ echo stat|nc localhost 2181
2. Zookeeper version: 3.4.3-1240972, built on 02/06/2012 10:48 GMT
3. Clients:
4. /127.0.0.1:40293[0](queued=0,recved=1,sent=0) 5.
6. Latency min/avg/max: 1/2/3 7. Received: 4 8. Sent: 3
9. Outstanding: 0 10. Zxid: 0×200000006 11. Mode: leader 12. Node count: 4 html
更多精彩内容请关注:http://bbs.superwu.cn java
关注超人学院微信二维码:web