ZooKeeper的安装和配置过程
ZooKeeper服务器是用Java创建的,它需要在JVM上运行,所以需要使用JDK1.6及以上版本。
查看是否安装了Java环境:
java -version
没有安装的先去安装JDK:Linux 安装 JDK
官网下载zooKeeper
官网下载zooKeeper:zookeeper官网
下载速度太慢的话,可以复制下载链接到迅雷下载,我这里下载的是当前的稳定版本apache-zookeeper-3.7.1-bin.tar.gz
一定要下载-bin的包 (apache-zookeeper-xxx-bin.tar.gz)
否则,启动的时候很容易出错
ZooKeeper有两种运行模式,一个是集群模式,一个是单机模式。这里只配置集群模式,单机模式可以看文末的参考文档。
集群模式
假设用三台机器来搭建ZooKeeper集群,IP地址为IP1,IP2,IP3
1、创建zookeeper
目录
mkdir -p /usr/local/zookeeper
2、将下载好的压缩包使用Xftp
传到zookeeper
目录并解压
[root@localhost zookeeper]# tar -zvxf apache-zookeeper-3.7.1-bin.tar.gz
3、在 /usr/local/zookeeper/apache-zookeeper-3.7.1-bin
文件夹下,创建data、logs文件夹
[root@localhost apache-zookeeper-3.7.1-bin]# mkdir data
[root@localhost apache-zookeeper-3.7.1-bin]# mkdir logs
4、 配置zoo.cfg文件
在/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/conf
目录下复制zoo_sample.cfg
创建一个新文件命名为zoo.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
并对zoo.cfg
按照如下代码进行简单配置:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/data
dataLogDir=/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/logs
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实例来构成伪集群的话,那么这些端口都需要配置成不同。
5、 创建myid文件
在dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,即ServerID,和zoo.cfg中当前机器的编号对应上。例如,server.1的myid文件内容就是“1”。要确保每个服务器的myid文件中的数字不同,并且和自己所在机器的zoo.cfg中的server.id=host:port:port的id值一致。id的范围是1~255。
6、 重复 1 - 5 步,为所有机器配置zoo.cfg和myid文件。
7、 所有机器上启动ZooKeeper。
/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin
目录下有启动脚本
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
有时虽然执行完启动命令后,显示STARTED,但ZooKeeper并没有真正运行,可以对应状态进行检测。在执行启动命令的目录下会生成Logs目录,记录启动的日志,若未成功启动,可在Logs目录查找原因。
8、验证服务器
使用zkServer.sh status
命令,查看ZooKeeper服务器的状态,如下图所示,说明该服务器是个follower。
验证服务器时可能出现的问题如下:
a). 如果使用zkServer.sh status
命令,出现It is probably not running. 有可能是集群中其他服务器没有开启。要整个集群都开启再执行status命令,只开启一台服务器并验证会报错。也有可能是服务器真没启来,看查看一下输出日志。
b). 查看/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/logs
下的日志
tail -n 200 zookeeper-root-server-localhost.localdomain.out
看到报错信息如下,三台主机不能互相访问各自的 3888 端口。
解决办法:
(1)在测试环境下可以关闭防火墙
(2)给三台主机安装内网
9、关闭服务器
/usr/local/zookeeper/apache-zookeeper-3.7.1-bin/bin
目录下有启动脚本
./zkServer.sh stop
参考:
https://www.cnblogs.com/zhaoshizi/p/12105143.html
https://blog.csdn.net/Eternal_Blue/article/details/95598942