本篇文章演示的是搭建zookeeper集群,这里使用三台虚拟机进行演示说明。由于zookeeper的选举机制,因而zookeeper集群所需的虚拟机数量为奇数。
材料 | 版本 | 数量 | 备注 |
---|---|---|---|
安装包 | zookeeper-3.4.12.tar.gz | 3 | |
虚拟机 | CentOS7.5 | 3 | |
IP | / | 3 | 192.168.28.51/52/53 |
netcat | 版本任意 | 3 | 一种网络工具,测试用 |
jdk | 版本7以上 | 3 | 提前安装好 |
安装目录是任意选择的,这里我们将zookeeper安装在/usr/local/zookeeper 目录下。
(1)上传文件
建立/usr/local/zookeeper 目录,将安装包zookeeper-3.4.12.tar.gz,上传到该目录下。
mkdir -p /usr/local/zookeeper
(2)解压文件
进入/usr/local/zookeeper目录中,找到zookeeper-3.4.12.tar.gz,并解压。
tar -zxvf zookeeper-3.4.12.tar.gz
至此安装步骤就简单的完成了。
在配置环节需要配置三个文件,分别是zoo.cfg、myid和全局环境变量
文件名 | 路径 |
---|---|
zoo.cfg | /usr/local/zookeeper/conf/zoo.cfg |
myid | /usr/local/zookeeper/data/myid |
profile | /etc/profile |
(1)创建zoo.cfg文件
进入/usr/local/zookeeper/conf 目录下,将zoo_sample.cfg重命名为zoo.cfg。
mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
(2)修改参数
需要配置的为以下几处:
tickTime=2000
initLimit=10
syncLimit=5
#dataDir指定的文件路径一定要确保存在,没有就自己创建。
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=192.168.28.51:2888:3888
server.2=192.168.28.52:2888:3888
server.3=192.168.28.53:2888:3888
a). tickTime:该参数单位是毫秒ms,用于配置ZooKeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。
b). initLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器在启动过程中,会与Leader建立连接并完成对数据的同步,从而确定自己对外提供服务的起始状态。Leader服务器允许Follower在initLimit时间内完成这个工作。
c). syncLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。
d). dataDir:用于配置ZooKeeper服务器存储快照文件的目录。
dataLogDir:用于配置ZooKeeper服务器存储事务日志文件的目录。dataDir和dataLogDir都要确保有读写权限。
默认情况下,如果没有配置参数dataLogDir,那么事务日志也会存储在这个目录中。考虑到事务日志的写性能直接影响ZooKeeper整体的服务能力,因此建议同时通过参数dataLogDir来配置ZooKeeper的事务日志的存储目录。
f). clientPort:用于配置当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接。
g). server.id=host:port:port:该参数用于配置组成ZooKeeper集群的机器列表,其中id即为ServerID,与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信。在ZooKeeper服务器启动的时候,其会根据myid文件中配置的ServerID来确定自己是哪台服务器,并使用对应配置的端口来时行启动。如果在实际使用过程中,需要在同一台服务器上部署多个ZooKeeper实例来构成伪集群的话,那么这些端口都需要配置成不同。
(此处引用了网络文章的注释,侵删)
(1)在三台虚拟机上分别创建myid文件
touch /usr/local/data/myid
(2)依据 zoo.cfg配置的定义,分别在文件的第一行写入1、2、3。具体的对应规则如下:
服务器IP | zoo.cfg配置 | myid值 |
---|---|---|
192.168.28.51 | server.1=192.168.28.51:2888:3888 | 1 |
192.168.28.52 | server.1=192.168.28.52:2888:3888 | 2 |
192.168.28.53 | server.1=192.168.28.53:2888:3888 | 3 |
修改全局环境变量配置文件profile
vim /etc/profile
增加如下内容:
#zookeeper
export ZK_HOME=/usr/local/zookeeper
export PATH=$ZK_HOME/bin:$PATH
保存后,更新使环境变量生效
source /etc/profile
实际的环境变量配置入下图所示(别忘了JDK的环境变量配置):
zookeeper的默认提示:
./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
(1)启动
cd /usr/local/zookeeper/bin
./zkServer.sh start
(2)关闭
cd /usr/local/zookeeper/bin
./zkServer.sh stop
(3)查看状态
cd /usr/local/zookeeper/bin
./zkServer.sh status
如果通过查看zk的状态来判断是否正常不放心的话,可以使用netcat这一工具来进一步验证。
在192.168.28.51这台虚拟机上输入命令:
nc -v 192.168.28.52 2181
stat
反馈结果如下(正常状态):
可以通过这一测试验证zk集群是否正常。
关于zookeeper的安装模式大致有三种:
模式 | 说明 |
---|---|
集群模式 | 在多台服务器上分别安装zk,本文的操作就是典型的集群模式 |
伪集群模式 | 在一台服务器上安装多个zk,将其zoo,cfg文件中的端口改为不同 |
单机模式 | 在一台服务器上安装一个zk,zoo,cfg中只需要配置一条本机的ip和端口即可 |