zookeeper集群配置说明以及window单台机器集群搭建

zk tar.gz 目录:

在src/main 下面的源码是zk 服务端和客户端的源码!!!不过在服务运行起来的时候,服务是调用图中根目录下的zookeeper.jar.

在集群模式下,所有的zk进程可以使用相同的配置文件(是指各个zk进程部署在不同的机器上面),例如如下配置:

tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888
  • initLimit 
    ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。 
    当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
  • syncLimit 
    配置follower和leader之间发送消息,请求和应答的最大时间长度。
  • tickTime 
    tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
  • server.id=host:port1:port2 
    其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。 
    host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
  • dataDir 
    其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。

注意 
如果仅为了测试部署集群模式而在同一台机器上部署zk进程,server.id=host:port1:port2配置中的port参数必须不同。但是,为了减少机器宕机的风险,强烈建议在部署集群模式时,将zk进程部署不同的物理机器上面。

准备启动:

假如我们打算在三台不同的机器 192.168.229.160,192.168.229.161,192.168.229.162上各部署一个zk进程,以构成一个zk集群。 
三个zk进程均使用相同的 zoo.cfg 配置:

tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888

在三台机器dataDir目录( /home/myname/zookeeper 目录)下,分别生成一个myid文件,其内容分别为1,2,3。然后分别在这三台机器上启动zk进程,这样我们便将zk集群启动了起来。

连接zk集群:

可以使用以下命令来连接一个zk集群:

bin/zkCli.sh -server 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181

通过client连接zk:

2016-06-28 19:29:18,074 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@770537e4
Welcome to ZooKeeper!
2016-06-28 19:29:18,146 [myid:] - INFO  [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.229.162/192.168.229.162:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2016-06-28 19:29:18,161 [myid:] - INFO  [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.229.162/192.168.229.162:2181, initiating session
2016-06-28 19:29:18,199 [myid:] - INFO  [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.229.162/192.168.229.162:2181, sessionid = 0x3557c39d2810029, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181(CONNECTED) 0] 

最终连接的192.168.229.162机器上

--------------------------------------------------------------动手实践-----------------------------------------------------------------

将服务copy 三份,修改配置:

(1)在D:/zk/data下面创建三个目录data1,data2,和data3,并在这三个目录下面分别建一个myid文件,分别对应写入1,2,3。 
(2) 将zookeeper-1/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data1,并在文件末尾追加: 
server.1=127.0.0.1:2887:3887 
server.2=127.0.0.1:2888:3888 
server.3=127.0.0.1:2889:3889 
zookeeper-2和zookeeper-3改动如下: 
zookeeper-2/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data2 
zookeeper-3/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data3 
zookeeper-2/conf/zoo.cfg中的clientPort改为2182 
zookeeper-2/conf/zoo.cfg中的clientPort改为2183 
zookeeper-2和zookeeper-3都在zoo.cfg后追加上面的代码块。 

每个服务下面 启动:

bin/zkServer.cmd

看下 tmp/zookeeper/data

两个文件中的文本都是“1”,3.4版本的zk 不是生成myid 文件

后天进程信息:

启动一个zk 进程服务占空间大小100M左右:

猜你喜欢

转载自blog.csdn.net/lxlmycsdnfree/article/details/81292853