Centos7下安装Zookeeper3.4详细过程

x33g5p2x  于2020-09-04 发布在 Zookeeper  
字(4.5k)|赞(0)|评价(0)|浏览(1102)

一、准备工作

操作系统:CentOS7
JAVA版本:JDK1.8

Zookeeper版本:3.4.14
方式一:直接下载 点击下载
方式二: wget下载

cd /opt/software/zookeeper
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

Zookeeper安装有三种模式,单机安装、集群伪安装和集群安装,下面分布介绍这三种安装模式。

二、单机安装

ZooKeeper支持单机部署,单机模式比较简单,主要修复zoo.cfg配置文件。

(1)配置cfg文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zs/zookeeper/zookeeper/data
dataLogDir=/home/zs/zookeeper/zookeeper/log
clientPort=2181
server.1=IP1:2888:3888

(2) 启动服务器

bin/zkServer.sh start

(3) 验证服务器

可以使用telnet 加stat命令验证,也可以使用zkServer.sh status 命令验证

使用telnet 加stat命令验证,可以看到单机模式下服务器的Mode为standalone,集群模式下是Leader和Follower。
使用zkServer.sh status 命令验证

(4) 关闭服务器

bin/zkServer.sh stop

三、集群伪安装

ZooKeeper支持在一台服务器上启动多个ZooKeeper的实例,相互组成一个集群。不需要拷贝多个ZooKeeper的目录,就是同一个程序目录下,配置多个zoo.cfg文件即可。

(1) 配置文件

可以在conf目录下,创建三个配置文件,分别命名为zoo1.cfg、zoo2.cfg、zoo3.cfg,内容分别如下。注意,dataDir和dataLogDir配置不同的目录,IP地址均为本机的IP地址,但端口各不相同。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zs/zookeeper/zookeeper1/data
dataLogDir=/home/zs/zookeeper/zookeeper1/log
clientPort=2181
server.1=IP1:2887:3887
server.2=IP1:2888:3888
server.3=IP1:2889:3889
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zs/zookeeper/zookeeper2/data
dataLogDir=/home/zs/zookeeper/zookeeper2/log
clientPort=2182
server.1=IP1:2887:3887
server.2=IP1:2888:3888
server.3=IP1:2889:3889
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zs/zookeeper/zookeeper3/data
dataLogDir=/home/zs/zookeeper/zookeeper3/log
clientPort=2183
server.1=IP1:2887:3887
server.2=IP1:2888:3888
server.3=IP1:2889:3889

(2) 创建myid文件

在每个dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,即ServerID,和zoo1.cfg、zoo2.cfg、zoo3.cfg中当前机器的编号对应上。

(3) 启动服务器

因为只有一个ZooKeeper程序目录,在启动不同的实例时,要指定各自的配置文件,启动命令如下所示

bin/zkServer.sh start conf/zoo1.cfg
bin/zkServer.sh start conf/zoo2.cfg
bin/zkServer.sh start conf/zoo3.cfg

(4) 验证服务器

bin/zkServer.sh status conf/zoo1.cfg
bin/zkServer.sh status conf/zoo2.cfg
bin/zkServer.sh status conf/zoo3.cfg

(5) 关闭服务器

bin/zkServer.sh stop conf/zoo1.cfg
bin/zkServer.sh stop conf/zoo2.cfg
bin/zkServer.sh stop conf/zoo3.cfg

四、集群安装

假设用三台机器来搭建ZooKeeper集群,IP地址为IP1,IP2,IP3

(1) 配置zoo.cfg文件

初次使用ZooKeeper,需要将%ZOO_HOME%/conf目录下的zoo_sample.cfg文件重命名为zoo.cfg,并且按照如下代码进行简单配置:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zs/zookeeper/zookeeper1/data
dataLogDir=/home/zs/zookeeper/zookeeper1/log
clientPort=2181
server.1=IP1:2888:3888
server.2=IP2:2888:3888
server.3=IP3: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整体的服务能力,因此建议同时通过参数dataLogDir来配置ZooKeeper的事务日志的存储目录。

e). dataLogDir:用于配置ZooKeeper服务器存储事务日志文件的目录。dataDir和dataLogDir都要确保有读写权限。

f). clientPort:用于配置当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接。

g). server.id= host : port : port:该参数用于配置组成ZooKeeper集群的机器列表,其中id即为ServerID,与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信。在ZooKeeper服务器启动的时候,其会根据myid文件中配置的ServerID来确定自己是哪台服务器,并使用对应配置的端口来时行启动。如果在实际使用过程中,需要在同一台服务器上部署多个ZooKeeper实例来构成伪集群的话,那么这些端口都需要配置成不同。

(2) 创建myid文件

在dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,即ServerID,和zoo.cfg中当前机器的编号对应上。例如,server.1的myid文件内容就是“1”。要确保每个服务器的myid文件中的数字不同,并且和自己所在机器的zoo.cfg中的server.id=host :port :port的id值一致。id的范围是1~255。

(3) 重复(1)和(2)步,为所有机器配置zoo.cfg和myid文件。

(4) 启动ZooKeeper。

bin/zkServer.sh start

有时虽然执行完启动命令后,显示STARTED,但ZooKeeper并没有真正运行,可以对应状态进行检测。在执行启动命令的目录下会生成Logs目录,记录启动的日志,若未成功启动,可在Logs目录查找原因。

(5) 验证服务器

要验证服务器有没有启动成功,可以telnet到ZooKeeper的端口,然后发送stat命令来验证

如果出现以下输出信息,服务器就启动成功了。

还可以使用zkServer.sh status 命令,查看ZooKeeper服务器的状态,如下图所示,说明该服务器是个follower。

验证服务器时可能出现的问题如下:

a). 如果使用telnet加stat命令验证,出现“stat is not executed because it is not in the whitelist.”报错,可以修改一下启动脚本,把ZooKeeper的指使添加到白名单。

打开zkServer.sh脚本,在 if [ "x$SERVER_JVMFLAGS" != "x" ] 语句上方添加一条语句,把ZooKeeper的指使添加到白名单。

ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"

b). 如果使用telnet加stat命令验证,出现“This ZooKeeper instance is not currently serving requests”报错,其原因就是集群没有选出来leader,当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。 可以把配置集群里其他ZooKeeper服务器启动,或者查看各服务器之间网络是否不通。

c). 如果使用zkServer.sh status命令,出现It is probably not running. 有可能是集群中其他服务器没有开启。要整个集群都开启再执行status命令,只开启一台服务器并验证会报错。也有可能是服务器真没启来,看查看一下输出日志。

(6) 关闭服务器

bin/zkServer.sh stop

参考资料:
https://www.cnblogs.com/zhaoshizi/p/12154518.html
https://www.cnblogs.com/zhaoshizi/p/12105143.html

相关文章