下载zookeeper
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
注意: 最新版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。
- 版主之前踩过的坑:
启动zookeeper报错,查看状态提示
========================================
ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
=========================================
[root@localhost logs]# cat zookeeper-root-server-localhost.localdomain.out
错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
继续......
解压配置
tar -xvf apache-zookeeper-3.5.6-bin.tar.gz -C /usr/local/
mv apache-zookeeper-3.5.6-bin/ zookeeper
然后需要将配置文件zoo_sample.cfg copy 成 zoo.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
(最起码的单机部署需要改配置文件名)
否则有如下错误:
[root@localhost zookeeper]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
grep: /usr/local/zookeeper/bin/../conf/zoo.cfg: 没有那个文件或目录
grep: /usr/local/zookeeper/bin/../conf/zoo.cfg: 没有那个文件或目录
mkdir: 无法创建目录"": 没有那个文件或目录
Starting zookeeper ... FAILED TO START
如果是单机部署,那么在不动其它配置的情况下,现在可以启动服务了
[root@localhost zookeeper]# bin/zkServer.sh start
然后可以验证
[root@localhost zookeeper]# jps
36056 QuorumPeerMain
36088 Jps
[root@localhost zookeeper]# netstat -nlp|grep 2181
tcp6 0 0 :::2181 :::* LISTEN 36056/java
至此服务已经启动了。
鸡儿分割-------------------------------------------------------
集群部署
首先准备多台机器(可虚机可docker,--也可单机多实例//仅测试),比如三台。
IP:192.168.64.11、192.168.64.12、192.168.64.13
分别按照上述步骤安装好zookeeper,(可安装一台,然后scp拷贝)。
关键在于配置文件zoo.cfg。
如:// 仅显示关键参数
- 192.168.64.11
[root@localhost zookeeper]# cat conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.0=192.168.64.11:2888:3888
server.1=192.168.64.12:2888:3888
server.2=192.168.64.13:2888:3888
** 参数注解 **
===============================================
- tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒。
- initLimit:用于集群中Leader(主节点)和Flower(从节点)初始化时通信时限。
- syncLimit:用于集群中Leader(主节点)和Flower(从节点)之间发送消息,
请求和应答通信时限。 - dataDir:必须配置!数据文件目录+数据持久化路径
- clientPort:客户端连接端口
===============================================
然后在对应的dataDir目录下创建myid文件,并写入对应的server.后面的数值
touch /tmp/zookeeper/myid && echo 0>/tmp/zookeeper/myid
- 192.168.64.12
[root@localhost zookeeper]# cat conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.0=192.168.64.11:2888:3888
server.1=192.168.64.12:2888:3888
server.2=192.168.64.13:2888:3888
然后在对应的dataDir目录下创建myid文件,并写入对应的server.后面的数值
touch /tmp/zookeeper/myid && echo 1>/tmp/zookeeper/myid
- 192.168.64.13
[root@localhost zookeeper]# cat conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.0=192.168.64.11:2888:3888
server.1=192.168.64.12:2888:3888
server.2=192.168.64.13:2888:3888
然后在对应的dataDir目录下创建myid文件,并写入对应的server.后面的数值
touch /tmp/zookeeper/myid && echo 2>/tmp/zookeeper/myid
最后分别启动三台机器的zookeeper,启动命令如上单机模式启动命令。
最后查看zookeeper的状态,验证集群是否配置成功。
- 192.168.64.11
[root@localhost zookeeper]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
- 192.168.64.12
[root@localhost zookeeper]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
- 192.168.64.13
[root@localhost zookeeper]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
可以发现,三台机器中192.168.64.12 被选为了leader,192.168.64.11、192.168.64.13成为了follower。
集群配置完成。
=====================kafka黄金分割========================
如果集群部署, 假如在同一台机器上模拟(生产毫无意义),那么需要拷备zookeeper到不同的目录,如
[root@localhost ~]# mkdir -p zp/zk-master zp/zk-slave1 zp/zk-slave2
[root@localhost ~]# cp -rf zookeeper/* zp/zk-master
[root@localhost ~]# cp -rf zookeeper/* zp/zk-slave1
[root@localhost ~]# cp -rf zookeeper/* zp/zk-slave2
然后将三个zoo.cfg编辑如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/zk-master
clientPort=2181
dataLogDir=/tmp/zookeeper/zk-master/datalog
server.0=ip:2888:3888
server.1=ip:2889:3889
server.2=ip:2890:3890
注:将master、slave1、slave2对应的zoo.cfg中clientPort分别修改为2181、2182、2183,dataDir、dataLogDir分别创建好并且修改好。
如果是多台机器的话只需要更改对应的IP就好了。
然后再对应的dataDir目录下创建myid文件如下(注意0/1/2要对应上面的server.0/1/2)。
当然,顺带要检查一下防火墙。
至此,集群配置完成。
批量重启zookeeper脚本
zk_home=/zp
for application_name inls $zk_home
do
/home/zookeeper/zookeeper/${application_name}/bin/zkServer.sh restart
done