近期因为项目中须要用到zookeeper,细致的研究了一下。将持续更新zookeeper相关文章。留个痕迹。
本文以及兴许zookeeper相关的文章都是以Linux环境环境为基础的,代码是基于C语言。
zookeeper是Hadoop下的一个子项目。主要用来解决同步服务,配置管理,集群管理,分布式调度等一些分布式应用中的问题,具体的zookeeper的具体介绍网上非常多,在此不再赘述。
zookeeper执行时必须先装上java相关的库。Linux下怎样配置jdk网上也是多如牛毛。
首先准备一个zookeeper开发包,能够到官网下载。这里提供一个版本号,zookeeper-3.4.6.tar.gz。
一般在项目中我们会使用多台机器来搭建zookeeper集群。因为条件限制,我们能够在一台机器上搭建一个伪集群。仅仅要指定不同的port即可了。
将压缩包解压。会得到 zookeeper-3.4.6文件夹,进入zookeeper-3.4.6下的conf文件夹。我们来进行配置文件的改动,这里我们配置三个伪集群server,所以新建三个文件zoo1.cfg、zoo2.cfg、zoo3.cfg。分别写入以下的配置内容:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/data/d_1 clientPort=2181 dataLogDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/log/log_1 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/data/d_2 clientPort=2182 dataLogDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/log/log_2 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/data/d_3 clientPort=2183 dataLogDir=/home/cdadmin/thc/zookeeper/zookeeper-3.4.6/log/log_3 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889注意:dataDir和dataLogDir相应的文件夹要相应的建立
配置參数说明
tickTime:zookeeperclient和server之间发送心跳的间隔时间
initLimit:这个配置项是用来配置 Zookeeper 接受client(这里所说的client不是用户连接 Zookeeper server的client。而是 Zookeeper server集群中连接到 Leader 的 Follower server)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper server还没有收到client的返回信息,那么表明这个client连接失败。
总的时间长度就是 5*2000=10 秒
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
dataDir:顾名思义就是 Zookeeper 保存数据的文件夹,默认情况下。Zookeeper 将写数据的日志文件也保存在这个文件夹里。
clientPort:这个port就是client连接 Zookeeper server的port,Zookeeper 会监听这个port,接受client的訪问请求。
dataLogDir:顾名思义就是 Zookeeper 保存日志文件的文件夹
server.A=B:C:D:当中 A 是一个数字。表示这个是第几号server。B 是这个server的 ip 地址;C 表示的是这个server与集群中的 Leader server交换信息的port。D 表示的是万一集群中的 Leader server挂了。须要一个port来又一次进行选举。选出一个新的 Leader。而这个port就是用来运行选举时server相互通信的port。假设是伪集群的配置方式。因为 B 都是一样,所以不同的 Zookeeper 实例通信port号不能一样。所以要给它们分配不同的port号。
在改动好了參数文件后,在每一个dataDir下建立一个文件。文件名称为myid。文件的内容分别为1、2、3,(分别相应的是server.1。server.2,server.3)。这样就能够启动zookeeper服务器了。
切换到zookeeper-3.4.6/bin文件夹分别执行命令:zkServer.sh start zoo1.cfg、zkServer.sh start zoo2.cfg、zkServer.sh start zoo3.cfg,输入命令jps,结果例如以下图一样。就说明启动成功了。
启动成功以后。我们就能够用client去连接了,执行命令:zkCli.sh -server 127.0.0.1:2182,client连接上以后我们就能够对服务器进行一些结点的操作了,例如以下图所看到的:
这样zookeeper就搭建成功了。
今天先到这。晚安吧。待续!