zookeeper配置与使用

zookeeper是Apache Hadoop下的一个子项目,主要用来解决分布式系统一致性的问题,比如状态管理、统一命名、配置管理、集群管理等。想要使用zookeeper必须先搭建并部署zookeeper环境,根据zookeeper的官方文档说明,可以分为单机模式和集群模式来分别搭建。

1.单机模式(Standalone)

单机模式很简单,只需在zookeeper官网http://zookeeper.apache.org/releases.html获取安装包(我用的是当前稳定版本3.4.6),并解压到某一目录如:/usr/local/zookeeper,zookeeper的启动脚本在bin/目录下,linux下可以通过zkServer.sh来启动,windows下为zkServer.cmd。启动zookeeper之前,需要修改配置文件,进入conf/文件夹内,将zoo_sample.cfg重命名为zoo.cfg并修改其中的配置信息,zookeeper会在启动时自动加载zoo.cfg配置文件的内容设置对应的参数。

 
 
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

以上三个参数的意义分别是:

tickTime: zookeeper使用的基本时间单元,以毫秒为单位,用来控制服务器之间、客户端和服务器之间的心跳超时;

dataDir: zookeeper保存数据快照的目录

clientPort: zookeeper监听客户端连接的端口号

这些参数配置好后,就可以通过zkServer.sh start来启动zookeeper服务了,服务启动之后,可以运行bin/目录下的客户端脚本zkClient.sh来连接zookeeper服务器:zkClient.sh -server 127.0.0.1:2181,与服务器建立连接后可以输入help来查看有哪些可用命令


2. 集群模式

在生产环境中,为了防止单台zookeeper服务器宕机导致注册中心无法提供服务,因此常通过配置zookeeper集群来防止单点故障的发生。zookeeper集群的配置也不算复杂,由于我手中服务器个数有限,就在单台服务器上部署了三个zookeeper实例来实现zookeeper集群。

首先选择zookeeper的安装目录如/usr/local,然后建立三个文件夹zookeeper-server1, zookeeper-server2,zookeeper-server3,将zookeeper安装包分别解压到三个目录中,以第一个zookeeper实例为例,当前目录结构为/usr/local/zookeeper-server1/zookeeper-3.4.6/,修改conf/下的zoo.cfg配置文件内容,集群模式的配置和单机模式类似,:

tickTime=2000
dataDir=/usr/local/zookeeper-server1/data
initLimit=5
syncLimit=2
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

initLimit: 用来设置zookeeper集群初始化Leader服务器与Follower服务器建立连接的最大心跳间隔数,如果超过

syncLimit: 集群中Leader与Follower发送消息,请求和应答的时间长度不能超过多少个tickTime

server.A = B:C:D,其中A是一个自己定义的数字,表示zookeeper服务器的Id,(需要将该数字的值写入到data/目录下的myid文件中),B为服务器IP地址,C为zookeeper集群服务器之间相互通信的端口号,D为万一集群中Leader挂掉了,需要重新进行选举时通信的端口号。集群中每个zookeeper实例都应该配置这些内容,只有这样集群内的zookeeper服务器才能相互找到彼此进行通信与选举。

除了修改zoo.cfg配置文件,还需要在定义的dataDir文件夹内创建一个myid文件,将server.X中的X值写入其中,比如当前配置的是zookeeper-server1这个实例,那就进入data目录执行echo '1' > myid。

配置完成后就可以执行bin/zkServer.sh start来启动zookeeper集群,需要注意的是,启动第一个zookeeper实例的时候日志里面会报以下错误:


原因是此时只启动了一个zookeeper实例server1,进行选举的时候会找不到server2和server3,当陆续启动另外两个实例后就不会抛出异常了,并且能够从日志中看到选举成功的信息。运行脚本bin/zkServer.sh status,可以看到当前zookeeper的角色是Leader还是Follower


通过上面的操作,就成功地配置并启动了zookeeper集群。需要注意的是,配置集群的时候,一般将集群的机器数量控制在奇数个,因为集群中只要过半的服务器是正常工作的,那么这个集群就是对外可用的。如果是偶数个,比如4台服务器,如果挂掉了两台,剩下的两台由于没有超过一半因此也是不可对外提供服务的;如果是5台,就可以在挂掉两台的情况下继续对外提供服务。

参考文章:http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/#icomments

http://jm-blog.aliapp.com/?p=2318

猜你喜欢

转载自blog.csdn.net/cfydaniel/article/details/44562433