1.下载zookeeper安装包

http://zookeeper.apache.org/releases.html

我使用的是zookeeper-3.4.6 版本。

2.配置zoo.cfg

解压包后复制出奇数个节点(过半即可用),这里复制出3个节点,

设定3个节点serverId 分别为 1,2,3

如下:


zoo.cfg位于zookeeper安装目录conf子目录下



修改zoo.cfg文件:配置server.1

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/install-tools/zookeeper-3.4.6/data
dataLogDir=D:/install-tools/zookeeper-3.4.6/log
clientPort=2181
#maxClientCnxns=60
#autopurge.snapRetainCount=3
#autopurge.purgeInterval=1

server.1=localhost:2888:3888
server.2=localhost:4888:5888
server.3=localhost:6888:7888

同时在server.1的data目录下(zoo.cfg文件配置的dataDir)创建myid文件


myid文件中只写入当前server节点的ID标识:(当前为server.1,则myid文件内容为1


同理配置server.2:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/install-tools/zookeeper-3.4.6.2/data
dataLogDir=D:/install-tools/zookeeper-3.4.6.2/log
clientPort=2182
#maxClientCnxns=60
#autopurge.snapRetainCount=3
#autopurge.purgeInterval=1

server.1=localhost:2888:3888
server.2=localhost:4888:5888
server.3=localhost:6888:7888

server.2的data目录下创建myid文件并填写内容2


配置server.3 :

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/install-tools/zookeeper-3.4.6.3/data
dataLogDir=D:/install-tools/zookeeper-3.4.6.3/log
clientPort=2183
#maxClientCnxns=60
#autopurge.snapRetainCount=3
#autopurge.purgeInterval=1

server.1=iqsz-l4254:2888:3888
server.2=iqsz-l4254:4888:5888
server.3=iqsz-l4254:6888:7888
server.3的data目录下创建myid文件并填写内容3

3.启动zookeeper

3个节点配置完成后即可启动;

windows环境下直接运行 bin目录下的  zkServer.cmd即可; linux环境启动相应的sh文件:zkServer.sh

分别启动3个节点:如图

server1:



server2:


server3:


开始启动server.2时会有java.net.ConnectException: Connection refused: connect;这是因为集群所有节点还没启动完成导致;当所有节点启动完成后即正常。


4.说明:

关于zoo.cfg的配置,这里简单说明下:

  a.在集群模式下,集群中每台机器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置server.id=host:port:port

其中,id被称为 Server ID,用来标识该机器在集群中的机器序列号。同时,在每台Zookeeper机器上,我们都需要在数据目录(即dataDir参数指定的那个目录)下创建一个myid文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的Server ID 数字

  b.在Zk的设计中,集群中所有机器上的zoo.cfg文件的内容都应该是一致的。因此最好使用svn或是git把此文件管理起来,确保每个机器都能共享到一份相同的配置。

  c.上面也提到了,myid文件中只有一个数字,即一个Server ID。例如,server.1的myid文件内容就是"1"。注意,清确保每个服务器的myid文件中的数字不同,并且和自己所在机器的zoo.cfg中server.id=houst:port:port的id一致。另外,id的范围是1~255。

  d.参数的意义:

    tickTime:默认值为3000,单位是毫秒(ms),可以不配置。参数tickTime用于配置Zookeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。例如,Zk中会话的最小超时时间默认是2*tickTime。

    dataDir:该参数无默认值,必须配置。参数dataDir用于配置Zookeeper服务器存储快照文件的目录

    clientPort:参数clientPort用于配置当前服务器对外的服务端口,客户端会通过该端口和Zk服务器创建连接,一般设置为2181。

    initLimit:该参数默认值:10,表示是参数tickTime值的10倍,必须配置,且为正整数。该参数用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器在启动过程中,会与Leader建立连接并完成对数据的同步,从而确定自己对外提高服务的起始状态。leader服务器允许Follower在initLimit时间内完成这个工作。

    syncLimit:该参数默认值:5,表示是参数tickTime值的5倍,必须配置,且为正整数。该参数用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。在Zk集群运行的过程中,Leader服务器会与所有的Follower进行心跳检测来确定该服务器是否存活。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。

    server.id:该参数无默认值,在单机模式下可以不配置。该参数用于配置组成Zk集群的机器列表,其中id即为Server ID与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口第二个端口测专门用于进行Leader选举过程中的投票通信


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐