本节介绍
在本节,会先进行单节点的安装配置,然后会演示搭建一个三个节点的zookeeper集群,并且会对一些相关的配置参数进行介绍。
zookeeper下载
在这个zookeeper系列博客中,我所使用的版本是zookeeper-3.4.6,使用的服务器是centos,zookeeper的历史版本的下载地址是:https://archive.apache.org/dist/zookeeper,你可以选择你想使用的版本。zookeeper要依赖jdk,所以安装之前要先安装配置jdk,zookeeper3.4.6依赖jdk1.7.X,更高版本的就要依赖jdk1.8了,请先自己安装配置一下jdk哈。
zookeeper单节点安装
1,通过xftp将下载好的zookeeper包上传到你的Linux服务器上
2,解压缩,命令: tar -zxvf zookeeper-3.4.6.tar.gz
解压完成后会看到一个名为zookeeper-3.4.6的文件夹,进入到zookeeper的安装目录,可以看到目录结构,我们暂时只需要关注bin,conf,lib这些文件夹。
其中,bin目录存放的是zookeeper的一些命令脚本,conf存放的是zookeeper的配置文件,lib存放的是zookeeper的一些依赖的jar包。进入到bin目录,我们会看到有zkServer.sh(服务端启动脚本),zkCli.sh(zookeeper自带的客户端)
如果我们直接启动的话会启动不了,提示找不到zoo.cfg这个配置文件,我们需要进入到conf目录下,我们看到zk的配置文件名字是zoo_sample.cfg,我们需要执行 cp zoo_sample.cfg zoo.cfg 命令将其复制一份名为zoo.cfg。
单节点的zk不用修改配置,可以直接启动。当你看到Starting zookeeper ... STARTED,表示你的zookeeper服务已经启动成功了。我们可以用 jps 命令查询zookeeper启动是否正常(也可以用 ps -ef|grep zookeeper 命令查看),QuorumPeerMain这个进程就是zookeeper的进程。至此,zookeeper的单节点安装就成功了。
=========================华丽的分割线=======================================
下面我们开始介绍zookeeper的三个节点的集群搭建(zookeeper集群节点数最少为3台,且尽量为奇数,至于为什么为奇数,暂时先记着这个是为了leader选举用,zookeeper选举的规则:leader选举,要求 可用节点数量 > 总节点数量/2 。注意 是 > , 不是 ≥)。
zookeeper集群安装
1、安装前准备:本次集群搭建我是采用Vmware 虚拟机搭建了三台centos服务器,机器ip分别为192.168.74.4(host为wkp4)、192.168.74.5(host为wkp5)、192.168.74.6(host为wkp6),在这三台服务器上先安装配置jdk,然后将zookeeper安装包分别上传到三台服务器上,解压缩,将zoo_sample.cfg复制一份改名为zoo.cfg(具体操作参考上文单节点安装,建议三台安装目录一致,方便配置)。建议不要用root用户,可以创建一个新用户,这里为了简单,就直接用root用户了。
2、创建数据、日志目录:解压缩zookeeper之后,进入zookeeper的安装目录,执行 mkdir -p zkData/data 创建目录存储zookeeper数据,执行mkdir -p zkData/log 创建目录存储zookeeper的日志(三台服务器上分别执行此操作)。
3、配置文件修改:修改之前,我们可以通过 less zoo.cfg 查看一下zookeeper的配置文件的默认配置信息。
配置信息说明:
- tickTime: 基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime时间就会发送一个心跳。
- dataDir: 存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里(也可以配置dataLogDir指定日志目录,如果不配置的话默认把日志也放在dataDir目录里面)。
- clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
- initLimit: 这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
- syncLimit: 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
介绍完了默认配置之后,我们正式开始我们的集群配置 ,执行 vim zoo.cfg
我们可以看到变动的部分:
1、存储文件及日志目录变动:dataDir=/usr/local/zookeeper-3.4.6/zkData/data,dataLogDir=/usr/local/zookeeper-3.4.6/zkData/log
2、集群配置:
server.1=192.168.74.4:2888:3888
server.2=192.168.74.5:2888:3888
server.3=192.168.74.6:2888:3888
下面我们对集群的配置进行一个简单的介绍。
server.A = B:C:D :
A表示这个是第几号服务器,
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
配置好之后进行保存,然后通过scp命令将配置好的zoo.cfg复制到其他两台机器上。
- scp /usr/local/zookeeper-3.4.6/conf/zoo.cfg root@192.168.74.5:/usr/local/zookeeper-3.4.6/conf/zoo.cfg
- scp /usr/local/zookeeper-3.4.6/conf/zoo.cfg root@192.168.74.6:/usr/local/zookeeper-3.4.6/conf/zoo.cfg
我们在把三台服务器的zoo.cfg配置文件都配置好之后,我们需要创建一个文件,将我们上面给zookeeper服务器设置的编号写入文件里面。这个编号文件就是 /usr/local/zookeeper-3.4.6/zkData/data/myid ,我们需要在三台服务器上分别创建该文件,并将服务器对应的编号(1、2、3)分别写入进去。
server.1=192.168.74.4:2888:3888,所以在192.168.74.4这台机器上执行:
echo 1 > /usr/local/zookeeper-3.4.6/zkData/data/myid
server.2=192.168.74.5:2888:3888,所以在192.168.74.5这台机器上执行:
echo 2 > /usr/local/zookeeper-3.4.6/zkData/data/myid
server.3=192.168.74.6:2888:3888,所以在192.168.74.6这台机器上执行:
echo 3 > /usr/local/zookeeper-3.4.6/zkData/data/myid
=====================华丽的分割线==============================
至此,我们的zookeeper集群都已经配置完毕,下面我们就可以启动刚刚搭建好的热腾腾的zookeeper集群了。在三台机器上分别通过 zkServer.sh start 命令启动服务,待三台机器都启动完成后,我们通过zkServer.sh status 命令可以查看服务状态及在集群中的角色信息。
我们可以看到wkp6(192.168.74.6)这台机器被选举为leader,另外两台机器都是follower。
集群验证
我们可以通过 zkCli.sh 连接上zookeeper,然后 create /a test 创建一个a节点,在集群中的另一台服务器上通过 ls / 命令可以看到我们刚刚创建的a节点,这说明我们搭建的集群可以正常工作了(如果这里不会操作的话没有关系,关于zookeeper的命令会在下一节中介绍)。
下一节会介绍一下zookeeper的一些常用命令,还有zookeeper的节点的一些属性的含义。