前言:
本文将介绍搭建Zookeeper
集群,用以支持kafka
最后一个需要Zookeeper
做注册中心的版本。当然,你也可以用此集群作为Dubbo
的注册中心。
提示: kafka v2.6版~v2.7.1版需要zookeeper v3.5.8+以上版本支持。kafka v2.8及以上版本将不需要Zookeeper作为注册中心了。点击查看kafka官方介绍
本教程使用的版本:
名称 | 版本 |
---|---|
操作系统 | centos 7 |
zookeeper | 3.5.9 |
kafka(配套) | 2.7.1 |
JDK(非必要) | 11.0.12 |
一.下载Zookeeper
1.如何选择zookeeper安装包
- 线上服务器使用,选择
stable
版本中的最新版。
原因:最新版经常有bug,不建议线上使用。 - 选择安装包格式为
apache-zookeeper-{version}-bin.tar.gz
,名字必须带有-bin
原因:如果选择apache-zookeeper-{version}.tar.gz
包,解压后发现里面没有lib
文件夹,启动会报错,错误代码:
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
。
2.下载地址:
版本 | 地址 |
---|---|
最新稳定版 | https://downloads.apache.org/zookeeper/stable/ |
全部版本 | https://downloads.apache.org/zookeeper/ |
二.集群部署
目标:搭建1个主节点,两个从节点的zookeeper集群。
1.准备三台linux
主机
本文以centors
为例,三台服务器的ip
地址分别是:
10.39.88.58
10.39.88.59
10.39.88.60
2.下载zookeeper压缩包
分别进入三个服务器目录usr/local
下,执行:
cd /usr/local
wget https://downloads.apache.org/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
注:搭配kafka v2.7.1版本,推荐使用apache-zookeeper-3.5.9-bin.tar.gz,不要使用zookeeper3.6.*,会出现kafka连接zookeeper报错。所以zookeeper版本不是越新越好,要根据kafka官网的提示,下载与之对应的zookeeper版本。
3.解压压缩包
在三台服务器上,都执行以下命令,解压并重命名文件夹名称为zookeeper
(代码洁癖,文件夹名称必须优雅):
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz
mv ./apache-zookeeper-3.5.9-bin zookeeper
4.修改配置文件
在三台服务器上,进入配置文件夹:
cd zookeeper/conf/
修改下面配置文件,并将其命名为zoo.cfg,复制到上面的文件夹下(完整复制即可,一字不差!!!):
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataDir=/usr/local/zookeeper/data/
server.1=10.39.88.58:2888:3888
server.2=10.39.88.59:2888:3888
server.3=10.39.88.60:2888:3888
仅修改上述文件中的server
内容,将ip改为你的三台主机ip地址即可。
举例:若你的三台主机ip是10.0.0.1,10.0.0.2,10.0.0.3,则修改为:
server.1=10.0.0.3:2888:3888
server.2=10.0.0.2:2888:3888
server.3=10.0.0.3:2888:3888
注:2888:3888
不要改动,其含义在文末zookeeper配置文件详解
中讲解。
注:三台服务器此配置文件一模一样!!!
5.创建myid文件
什么是myid文件?
myid文件用于区分zookeeper集群中各个主机的编号,是唯一不可重复的数字id。
myid内容
myid
文件内容格式要求是数字,且必须与配置文件中的server.1=10.39.88.58:2888:3888
中的server.1
数字相等。
例:配置文件中写server.666=10.39.88.58:2888:3888
,那么此台机器的myid
就是666
。
myid文件放到何处?
myid
文件应存放到配置文件dataDir
指定的路径下。
上一步中,配置文件中有这样一个配置:dataDir=/usr/local/zookeeper/data/
,这个地址表示将zookeeper的数据挂载到此处。我们应该把myid文件放到此路径下。
总结:
- 三台服务的
myid
文件内容一定互不相同。 - 每台服务器的
myid
必须与配置文件中的sever.x
中的x
相同。 myid
文件存放到配置文件dataDir
指定的路径下。
6.启动集群
分别进入三台linux主机中,进入zookeeper的安装目录:usr/local/zookeeper/bin
,执行命令:
./zkServer.sh start
7.测试集群是否启动成功
分别进入三台linux主机中,进入zookeeper的安装目录:usr/local/zookeeper/bin
,执行命令:
./zkServer.sh status
如果显示下列信息,则表示该主机被选举为leader(主节点),即启动成功。
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
如果显示下列信息,则表示该主机被选举为follower(从节点),即启动成功。
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
到此处,zookeeper集群部署完美落幕~
三.zookeeper配置文件详解
上面我们在配置集群时,一笔带过了配置文件各项参数的含义,现在我在把其中的含义列在下面,供你细细查阅:
属性 | 含义 |
---|---|
tickTime=2000 | 表示在zookeeper里1 tick表示2000ms,所有其他用到时间的地方都会用多少tick来表示 |
initLimit=10 | 集群中的follower服务器与leader服务器之间,初始化连接时,能容忍的最多心跳数为10 tick |
syncLimit=5 | 表示fowller与leader的心跳时间是5 tick |
clientPort=2181 | 客户端连接zookeeper服务的端口。这是一个TCP port。 |
dataDir=/usr/local/zookeeper/data/ | 数据文件目录 |
server.1=10.39.88.58:2888:3888 | 集群中服务的列表。端口2888由zookeeper服务器使用,用于互相通信;端口3888用于主节点leader选举。你可以选择自己喜欢的任何端口 |
四.zookeeper集群的运维手册
注:进入zookeeper安装目录bin
文件夹下,执行命令:
1.常用命令
# 启动:
./zkServer.sh start
# 关闭:
./zkServer.sh stop
# 查看运行状态,以及当前节点是leader还是follower
./zkServer.sh status
# 重启:
./zkServer.sh restart
2.查看运行日志
zookeeper的运行日志所在目录:
/usr/local/zookeeper/logs
日志文件,如:zookeeper-root-server-i-6czujhq1.out
总结
本文从零开始搭建zookeeper集群,讲清楚了各个需要配置的地方,和常常碰到的坑,并且解释了配置文件中各个属性的含义,为以后部署kafka打下基础。喜欢本教程请收藏点赞,以备他日之需。