参考文章:
1. 首先我们需要去官网下载zookeeper,官网链接如下:
https://archive.apache.org/dist/zookeeper/
我们下载使用的是 zookeeper-3.4.5 版本。
下载好之后找个地方解压,解压完成后如下:
单机模式:
1. 下载解压完后,我们就需要进入到conf目录进行配置文件的修改:
1)复制一份zoo_sample.cfg文件并直接粘贴来创建副本:
2) 将此副本改名为zoo.cfg,并通过文本编辑器打开进行编辑修改,推荐notepad++文本编辑器,好用:
我们需要将配置文件中的dataDir路径从默认的Linux系统路径修改为windows中你想要存放zookeeper数据的目录。
同时我们可以添加dataLogDir属性以此来指定zookeeper的日志文件存放目录。
注意,路径分隔符都是"\\"不是"\"。
示例中我们用于存放zookeeper数据的data文件夹和存放日志的log文件夹都需要手动创建。
此配置文件中其余属性的含义如下:
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit:集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
syncLimit:集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
2. 配置完成后,就开始启动我们的zookeeper吧:
我们有两种方式进行启动:
1) 第一种方式,在zookeeper的bin目录中直接双击运行“zkServer.cmd”文件,可以看到如下界面:
2)第二种方式,进入bin目录后,在路径导航栏中输入cmd,进入控制台:
控制台中输入 zkServer.cmd 并回车
至此,单机模式启动完成。
伪集群模式
1. 首先我们需要在zookeeper的解压目录创建出几个文件夹,具体数量取决于你希望搭建的伪集群有多少个节点,在示例中,我们模拟三个节点。
将我们解压的zookeeper在每个新建的文件夹中都复制一份,每个文件夹内部的文件结构如下:
2. 在每个文件夹下的zookeeper中的conf目录下,进行zoo.cfg文件的编辑配置,三个服务器的配置信息如下:
server1:
server2:
server3:
可以看出,每个配置文件不同的地方就是 dataDir 和 dataLogDir 的路径,以及 clientPort 端口。
而每个配置文件相同的地方就是:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
对于这个配置的解释如下:
server.A = B.C.D
A:集群中每个 zookeeper 服务器自身的标志编号,我们可以随意给值,此编号必须为整数,且必须在 1~255 之间。
B:集群中每个 zookeeper 服务器的IP地址。
C:集群中每个 zookeeper 服务器与 Leader 服务器进行信息交换的端口。
D:当集群中的 Leader 服务器宕机之后,所有的剩余服务器会进行投票选举出新的 Leader 服务器,这个端口就是用来交换选举信息的通信端口。
注意:这些端口在真正的集群环境中不一定是不同的,因为他们是在不同机器上的,但是我们目前搭建的是伪集群,所有节点是在同一台机器上的,所以,每个server的 C.D 端口都不能相同,不然就会出现端口被占用的错误。
3. 在每个server节点的 dataDir 中指定的文件夹下创建一个 myid 文件,没有任何后缀名:
这个新创建的 myid 文件只有一行信息,是一个数字,就是之前我们在第二步中,对每个 server 配置的 A 信息,也就是服务器自身的标志编号,zookeeper 会通过此文件进行编号检查等操作。
我们以 server1 为例,因为在 conf 目录下的 zoo.cfg 文件中对于 server1 的配置是 server.1=127.0.0.1:2888:3888,所以序号就是1。
同理,server2 的 dataDir 对应的文件夹中新建的 myid 文件中只有一个数字2, server3 则只有一个数字 3。
4. 全部配置完后,我们以此通过每个server的bin目录下的zkServer.cmd文件进行启动即可
在全部启动之前,先启动的zookeeper会出现错误,是因为集群中还有zookeeper服务器没有启动,所以连接不上,在所有的zookeeper服务器全部启动之后,错误自然就会消失。
至此,伪集群搭建完毕。
真实集群
真实集群并没有去测试,不过跟伪集群的配置方式基本一致,唯独不同的就是,因为真实集群所有节点并不都在同一台服务器,所以各个zookeeper服务器节点与 Leader 服务器进行通信的端口号、各个zookeeper 服务器节点进行重新选举的信息交互的端口号以及客户端的访问端口号 clientPort 不一定是不同的,很可能是相同的。
且zookeeper集群的数量最好是奇数,因为zookeeper集群只要半数以上节点服务器正常,就可以提供正常的集群服务。