1、zookeeper下载地址
2、JDK安装
由于zookeeper是用java开发的,所以要正常的使用zookeeper需要安装java环境,详细安装方式请看我另一篇介绍安装jdk的文章JDK详细安装方法
3、安装zookeeper
由于zookeeper的过半选举机制,要正常使用zookeeper集群,需要至少3台机器。笔者就使用了三台机器做一个安装zookeeper的测试,IP地址分别为:【172.16.20.213】【172.16.20.217】【172.16.20.85】
将zookeeper包解压,随便你想安装到哪里就安装到哪里,比如我就安装到root目录下。
然后将zookeeper加入到环境变量中,在/etc/profile文件中添加如下配置,根据自己的安装位置修改ZK_HOME。加入内容之后执行命令source /etc/profile。当然,三台机器都要做同样的操作。
export ZK_HOME=/root/apache-zookeeper-3.6.1-bin
export PATH=$PATH:$ZK_HOME/bin
4、配置zookeeper
按照一贯的套路,到了这一步直接zookeeper肯定是不行的,好歹来个配置文件吧?既然是集群,总不能直接启动,三台机器就自己找到另外的两台了吧,又不是找女朋友那么积极。所以要启动之前,先搞一个配置文件,然后在配置文件中指定需要通信的三台机器的IP分别是多少,这样三台机器才可以交流。进入zookeeper的安装目录,不装逼的讲就是zookeeper的解压目录apache-zookeeper-3.6.1-bin。当然了,这目录看起来太长了,你可以改一下目录名。
看见了吧,有个conf目录,然后将conf目录中的zoo-sample.cfg改名为zoo.cfg。
在上面的目录中,是不是看见conf目录下有一个data目录,解压出来没有。
这是我自己创建的,zookeeper需要用来存储一些数据,下面的配置文件中需要配置上这个目录,zookeeper才知道将数据写到哪里去。
vim zoo.cfg看见如下的内容:
然后修改配置文件,结果如下图:
当然了,上面的步骤还是要在三台机器上都来一遍的。
下面要画考点了,解释一下这个配置文件,注意要考的!!!
tickTime :客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况下FL的会话时常是心跳间隔的两倍。
initLimit :集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
syncLimit:集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数。
dataDir:该属性对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等
clientPort:客户端连接监听端口。
然后是我们自己配置的通信信息,这个server后面的1 2 3 不是乱搞的,需要和我们定义myid文件对应。没错,我们不仅仅要创建data目录,还有在data目录下创建一个文件,名字叫myid,然后在文件myid中写下服务ID,也就是配置server后面的那1 2 3 了,要一一对应哦。
不用截图了,另外两台机器就是2和3了。
在说说IP后面的两个端口,分别是通信端口和选举端口,也就是说2888端口是用来同步数据,相互之间通信的;3888端口是用来选举leader节点专用的。选leader啥意思?不讲
5、启动zookeeper
- 启动ZK服务: sh bin/zkServer.sh start
- 查看ZK服务状态: sh bin/zkServer.sh status
- 停止ZK服务: sh bin/zkServer.sh stop
- 重启ZK服务: sh bin/zkServer.sh restart
这四个命令也可以不加路径,如直接zkServer.sh start,因为我们配置了环境变量的。
6、可能出现的问题
1、如果启动报错,在logs下看日志,多数情况是配置没有写好,或者myid与配置的server后面的数字不一致
2、如果各个zookeeper之间不能通信,暴力方式关闭防火墙。如果你会配置防火墙就更好了,将端口打通就好。
附加:
1:查看防火状态
systemctl status firewalld
service iptables status
2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop
3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off
4:重启防火墙
systemctl enable firewalld
service iptables restart
就这样,祝各位好运!!!