1.前言
由于kafka是由zookeeper管理的,所以在搭建kafka集群之前,要先搭建zookeeper,这里也搭一个zookeeper集群
2.准备
zookeeper版本3.4.13 zookeeper下载地址
jdk1.8 jdk下载地址
注意zookeeper安装前先安装jdk1.8,下面不做jdk安装的演示了。
两台虚拟机,ip分别为
master 192.168.33.128
slave1 192.168.33.129
3.zookeeper集群搭建
以下操作在master节点中,其他slave节点也需要相同操作
1.解压zookeeper-3.4.13.tar.gz
tar zvxf zookeeper-3.4.13.tar.gz
2.进入zookeeper/conf目录,复制zoo_sample.cfg
cd zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
3.修改zoo.cfg参数配置,最主要修改如下红色注释的几个配置
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/root/software/zookeeper-3.4.13/logs //这个自己选择一个文件夹,注意文件夹要存在
dataDir=/root/software/zookeeper-3.4.13/data //这个自己选择一个文件夹,注意文件夹要存在
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= 192.168.33.128:2888:3888
server.2= 192.168.33.129:2888:3888
注意:在阿里云中搭建zookeeper集群,需要将zoo.cfg中自己本机的ip改为0.0.0.0,其他的ip改成公网ip,否则会报连接不上3888错误,导致zookeeper集群搭建失败
配置参数说明:
tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。
syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;
clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
4.在上述zoo.cfg配置的dataDir目录下创建myid文件
由zoo.cfg中配置的server.1=192.168.33.128:2888:3888可知,在master节点上配置的myid的内容为1.同理,稍后在slave1节点上配置的myid的内容为2
cd /root/software/zookeeper-3.4.13/data
vi myid
5.将master节点上配置好的zookeeper目录分发到各个slave节点
scp -r /root/software/zookeeper-3.4.13 root@slave1:~/software/
6.修改slave1节点上zookeeper目录下的dataDIre目录下的myid的内容,改成与zoo.cfg相对应的值
本案例修改成2
7.每个节点都启动zookeeper
bin/zkServer.sh start
8.查看zookeeper集群状态
bin/zkServer.sh status
可知当前slave1节点的zookeeper为leader
当前master节点的zookeeper为follower
此时zookeeper集群搭建成功!