# ZooKeeper集群安装(附安装报错集)
前言
正处于学习中间件过程,当学习到Kafka时,涉及到ZooKeeper集群,故自行安装一遍,以下为安装过程,后续可能也会不定期更新。
一、搭建虚拟机
一般准备三台虚拟机供学习使用,这里以VMware为例。
(每台虚拟机都需安装JDK,这里以1.8为例)
二、下载安装包
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
三、安装ZK
- 将安装包上传至/home目录
- 解压
tar -zxvf zookeeper-3.4.10.tar.gz
- 在/home目录下创建/data/zookeeper
mkdir -p data/zookeeper/
- 配置zoo.cfg
cd /home/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
vi 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=/home/data/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
server.1=192.168.102.129:8880:7770
server.2=192.168.102.130:8880:7770
server.3=192.168.102.131:8880:7770
修改dataDir为/home/data/zookeeper,同时添加zk服务信息为server1、server2、server3。
- 配置日志目录
mkdir -p /home/zk/zookeeper-3.4.10/log
cd /home/zookeeper-3.4.10/bin
vi zkEnv.sh
#!/usr/bin/env bash
ZOO_LOG_DIR=/home/zookeeper-3.4.10/log
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
添加ZOO_LOG_DIR=/home/zookeeper-3.4.10/log
- 分发文件
cd /home
scp -r zookeeper-3.4.10 192.168.102.130:'pwd'
scp -r zookeeper-3.4.10 192.168.102.131:'pwd'
- 配置myid
cd /home/data/zookeeper/
echo "1" > myid
其余两台服务做同样操作,分别定为
echo "2" > myid
echo "3" > myid
- 启动zookeeper
cd /home/zookeeper-3.4.10/bin
./zkServer.sh start 或 sh zkServer.sh start
每台机器重复执行以上命令。
- 测试
cd /home/zookeeper-3.4.10/bin
./zkServer.sh status 或 sh zkServer.sh status
每台机器执行以上命令,若为一个leader,两个follower,则集群正常。
四、安装过程中遇到的问题
-
Error contacting service. It is probably not running
该报错说明启动报错,zookeeper.out启动日志查看具体报错
-
java.net.NoRouteToHostException: 没有到主机的路由
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state
-
Cannot open channel to 2 at election address /192.168.102.130:7770
集群中所有zookeeper服务器zoo.cfg配置文件中dataDir路径是否正确
随笔
-
xshell多窗口同步操作,View中勾选Compose Bar, 选择To All Sessions,即可在下面的窗口中输入命令,该命令所有窗口同时执行。
-
接入ZooKeeper客户端
cd /home/zookeeper-3.4.10/bin
./zkCli.sh -server 192.168.102.129:2181
出现以上对话框即为接入成功。 -
zoo.cfg配置参数含义
- tickTime: zookeeper中使用的基本时间单位,毫秒值,比如可以设为1000,那么基本时间单位就是1000ms,也就是1s
- initLimit: Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。如果该参数设置为5,就说明时间限制为5倍tickTime,即5*1000=5000ms=5s
- syncLimit: 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。如果该参数设置为2,说明时间限制为2倍tickTime,即2000ms
- dataDir: 数据目录. 可以是任意目录,一般是节点安装目录下data目录
- clientPort: 监听client连接的端口号
- dataLogDir: log目录, 同样可以是任意目录,一般是节点安装目录下的logs目录。如果没有设置该参数,将使用和dataDir相同的设置
- server.X=hostname:B:C 其中X是一个数字, 表示这是第几号server,它的值和myid文件中的值对应。B是配置该server和集群中的leader交换消息所使用的端口。C配置选举leader时所使用的端口