一 背景
zookeeper是一个开源的分布式应用程序协调服务,是Apache Hadoop 的一个子项目。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。其原理是基于google发表的《The Chubby lock service for loosely-coupled distributed systems》论文。网上关于zookeeper的博客也很多,但很多讲的不细致,如如何测试部署成功。在学习别人的博客进行部署的过程中遇到了一些问题。所以写这篇博客主要是总结zookeeper的部署方法及在这过程中遇到的问题,提供更加详细的部署方案,希望能为其他初学者提供一些参考。
二 所需环境和包
1. JDK 环境:
java JDK包可以到官网下载(这里提供所有版本的JDK下载地址:http://www.oracle.com/technetwork/java/archive-139210.html)
JDK安装可参考:
tar.gz方式:http://blog.csdn.net/zhangxh1013/article/details/7320860
rpm方式: http://alan-hjkl.iteye.com/blog/1527179
JDK 环境是必须的,zookeeper是用java开发的,所以需要在JDK环境下运行。所以建议首先安装JDK,本人就是因为以为自己电脑上已经安装JDK,就直接部署zookeeper,在测试时并不成功,结果各种排错。
2. zookeeper 包:
下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
三 单机部署
1.创建工作目录
mkdir /usr/lib/zookeeper
2.创建data,logs文件
data :下存放节点ID
logs:用于下存放相关日志文件
mkdir /usr/lib/zookeeper/data
mkdir /usr/lib/zookeeper/logs
3.解压zookeeper到工作目录下
下载zookeeper的安装包之后, 解压到工作目录下(本文解压到/usr/lib/zookeeper).
tar -zxvf zookeeper-3.4.6.tar.gz /usr/lib/zookeeper
4.创建zoo.cfg
进入zookeeper目录下的conf子目录, 复制zoo_sample.cfg 并命名为zoo.cfg。
zookeeper服务器启动默认加载zoo.cfg 文件,当然也可以命名为其他文件,但是在运行是需要指定cfg文件名。如命名为zk1.cfg时,启动zookeeper命令为:./zkServer.sh start zk1.cfg 。如果是zoo.cfg 启动时命令为: ./zkServer.sh start
打开zoo.cfg 并修改相关配置
sudo vi /usr/lib/zookeeper/zookeeper-3.4.6/conf/zoo.cfg
设置配置文件中的相关参数:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/lib/zookeeper/data
dataLogDir=/usr/lib/zookeeper/logs
clientPort=2181
参数说明:
- tickTime: zookeeper中使用的基本时间单位, 毫秒值
- initLimit: Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许Follower在initLimit时间内完成这个工作
- syncLimit:在运行过程中,Leader负责与ZK集群中所有机器进行通信,如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。
- dataDir: 数据目录. 可以是任意目录.本文制定/usr/lib/zookeeper/data
- dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
- clientPort: 监听client连接的端口号
在某些博客中还会涉及设置环境变量这一步。
在 /etc/profile 文件中加入如下的内容:
#Set ZooKeeper Enviroment
export ZOOKEEPER_HOME=/usr/lib/zookeeper/zookeeper-3.4.6/
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
但我经过尝试后发现,其实并不需要进行环境的设置就可以部署成功。单机部署就到此完成了,接下来就是验证下是否部署成功了。
五 测试
这一步就是检验之前所部署的zookeeper是否能够成功运行。
1.启动服务:
首先进入到zookeeper-3.4.6的bin文件夹下,再启动zkServer.sh
cd /usr/lib/zookeeper/zookeeper-3.4.6/bin
./zkServer.sh start
或
/usr/lib/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
运行结果:
root@jaylon:/usr/lib/zookeeper/zookeeper-3.4.6/bin# ./zkServer.sh start
JMX enabled by default
Using config: /usr/lib/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED.
root@jaylon:/usr/lib/zookeeper/zookeeper-3.4.6/bin#
这里需要注意的是 启动时命令为 ./zkServer.sh start。如果是启动 zkServer.sh start 的话会报错找不到命令错误。这点初学者需要小心。
2.检查运行状态
通过 ./zkServer.sh status来检查服务器运行状态
root@jaylon:/usr/lib/zookeeper/zookeeper-3.4.6/bin# ./zkServer.sh status
JMX enabled by default
Using config: /usr/lib/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode