ZooKeeper是一个开源的分布式框架,提供了协调分布式应用的基本服务。它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度。它是Google的Chubby一个开源的实现。它本身可以搭建成一个集群,这个zk集群用来对应用程序集群进行管理,监视应用程序集群中各个节点的状态,并根据应用程序集群中各个节点提交的反馈信息决定下一步的合理操作。
下载zookeeper并解压把zk.cfg复制出三份来,分别命名为zookeeper0,zookeeper1,zookeeper2,这三个目录中的zk就当成是集群中的3个节点。
[zzl@localhost zk34]$ cp zookeeper-3.4.6 zookeeper0
[zzl@localhost zk34]$ cp zookeeper-3.4.6 zookeeper1
[zzl@localhost zk34]$ cp zookeeper-3.4.6 zookeeper2
这样集群中的目录结构就是下面这样的:
/home/zzl/DataTool/zk34
|----zookeeper0/
|----zookeeper1/
|----zookeeper2/
3.2 为每个节点建立data目录、logs目录和myid文件
在3个节点目录中分别建立data目录、logs目录和myid文件。
下面是zookeeper0上的:
新建目录data:/home/zzl/DataTool/zk34/zookeeper0/data
新建目录logs:/home/zzl/DataTool/zk34/zookeeper0/logs
新建文件myid:/home/zzl/DataTool/zk34/zookeeper0/data/myid
myid文件的内容是节点在集群中的编号,zookeeper0节点的编号就写成0,后边的zookeeper1的编号是1,zookeeper2的编号就是2。
按照同样的方法,依次在zookeeper1和zookeeper2上都建立以上目录和文件。
3.3 为每个节点创建配置文件
新建zookeeper0的配置文件zoo.cfg:/home/zzl/DataTool/zk34/zookeeper0/conf/zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/michael/opt/zookeeper/server0/zookeeper/data
dataLogDir=/home/michael/opt/zookeeper/server0/zookeeper/logs
clientPort=4180
server.0=127.0.0.1:8880:7770
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
配置文件中的配置项的含义参见下面的介绍。
用同样的方法,在zookeeper1和zookeeper2的相应位置创建zoo.cfg,文件内容复制zookeeper0的zoo.cfg。只不过需要改动clientport、dataDir、dataLogDir三个配置项,zookeeper1的clientport改为4181,zookeeper2的clientport改为4182,而dataDir和dataLogDir都修改为相应的目录,就好了。
3.4 启动zk集群
进入zk34集群的第一个节点zookeeper0的bin目录下,启动服务:
1
2
3
[zzl@localhost zk34] cd zookeeper0/
[zzl@localhost zookeeper0]$ bin/zkServer.sh start
然后,按照同样的方法,依次启动zookeeper1和zookeeper2的服务。
这样zk34集群的3个节点都启动起来了。
3.5 客户端接入集群
进入zk34集群中任意一个节点的bin目录下,启动一个客户端,接入已经启动好的zk34集群。这里的server可以填写集群中的任何一个节点的ip,端口号是对应ip的节点的配置文件中clientport的值
配置文件中配置项的含义:
tickTime: zookeeper中使用的基本时间单位,毫秒值,比如可以设为1000,那么基本时间单位就是1000ms,也就是1s。
initLimit: zookeeper集群中的包含多台server,其中一台为leader,集群中其余的server为follower,initLimit参数配置初始化连接时,follower和leader之间的最长心跳时间。如果该参数设置为5,就说明时间限制为5倍tickTime,即5*1000=5000ms=5s。
syncLimit: 该参数配置leader和follower之间发送消息,请求和应答的最大时间长度。如果该参数设置为2,说明时间限制为2倍tickTime,即2000ms。
dataDir: 数据目录. 可以是任意目录,一般是节点安装目录下data目录。
dataLogDir: log目录, 同样可以是任意目录,一般是节点安装目录下的logs目录。如果没有设置该参数,将使用和dataDir相同的设置。
clientPort: 监听client连接的端口号。
server.X=A:B:C 其中X是一个数字, 表示这是第几号server,它的值和myid文件中的值对应。A是该server所在的IP地址。B是配置该server和集群中的leader交换消息所使用的端口。C配置选举leader时所使用的端口。由于配置的是伪集群模式,所以各个server的B, C参数必须不同,如果是真正分布式集群,那么B和C在各个节点上可以相同,因为即使相同由于节点处于不同的服务器也不会导致端口冲突。
网友评论