操作系统:Red Hat Linux 6.5
JDK版本:1.8.0_151 //需先安装JDK
Zookeeper版本:3.4.12
设置每个节点的hosts文件。
# vi /etc/hosts //添加以下内容 10.11.111.42 mrzwk-5 10.11.111.43 mrzwk-6 10.11.111.45 mrzwk-8
重启生效。(reboot)
二、安装zookeeper集群# cd /home/weihu # mkdir kafka //解压 # tar -zxvf zookeeper-3.4.12.tar.gz -C kafka #cd kafka //创建链接 # ln -s zookeeper-3.4.12 zookeeper # cd zookeeper //创建日志目录 # mkdir -pv logs //创建数据目录 # mkdir -pv data
配置zookeeper环境变量
# vi /etc/profile export PATH=/home/weihu/kafka/zookeeper/bin:$PATH 保存退出 //初始化 # source /etc/profile
配置zookeeper集群:
集群节点数量要为奇数,且至少有3个节点,因为ZooKeeper集群是以宕机个数过半才会让整个集群宕机的。搭建ZooKeeper集群时,一定要先停止所有已经启动的节点。
修改配置文件:
# cd /home/weihu/kafka/zookeeper/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/weihu/kafka/zookeeper/data
dataLogDir=/home/weihu/kafka/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
server.1=10.11.111.42:2888:3888
server.2=10.11.111.43:2888:3888
server.3=10.11.111.45:2888:3888
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60
创建myid文件:
在mrzwk-5上执行:# echo 1 > /home/weihu/kafka/zookeeper/data/myid 在mrzwk-6上执行:# echo 2 > /home/weihu/kafka/zookeeper/data/myid 在mrzwk-8上执行:# echo 3 > /home/weihu/kafka/zookeeper/data/myid
备注:myid文件中只有一行内容,且内容为该节点对应的server.id中的id编号
启动zookeeper集群:
# cd /home/weihu/kafka/zookeeper/bin # zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
查看zookeeper进程:
# jps //显示当前所有Java进程的PID 6470 Jps 6316 QuorumPeerMain查看zookeeper集群状态:
# zkServer.sh status
上述步骤分别在三台服务器上执行,
在mrzwk-5上:# zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Mode: follower
在mrzwk-6上:
# zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Mode: follower
在mrzwk-8上:
# zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Mode: leader
备注:正常情况下应该是1个leader节点,2个follower节点
若zkServer.sh status命令执行显示-bash: zkServer.sh: command not found
命令改为./zkServer.sh status可正常执行
连接zookeeper集群:
# zkCli.sh -server mrzwk-5:2181,mrzwk-6:2181,mrzwk-8:2181
成功连接后,可以看到如下输出:
Welcome to ZooKeeper! 2018-05-04 10:39:27,990 [myid:] - INFO [main-SendThread(mrzwk-5:2181):ClientCnxn$SendThread@1028] - Opening socket connection to server mrzwk-5/10.11.111.42:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2018-05-04 10:39:28,071 [myid:] - INFO [main-SendThread(mrzwk-5:2181):ClientCnxn$SendThread@878] - Socket connection established to mrzwk-5/10.11.111.42:2181, initiating session [zk: mrzwk-5:2181,mrzwk-6:2181,mrzwk-8:2181(CONNECTING) 0] 2018-05-04 10:39:28,116 [myid:] - INFO [main-SendThread(mrzwk-5:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server mrzwk-5/10.11.111.42:2181, sessionid = 0x30000a829550000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: mrzwk-5:2181,mrzwk-6:2181,mrzwk-8:2181(CONNECTED) 0]
# zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED # zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/weihu/kafka/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running.原因:
[myid:1] - ERROR [centos_1/220.250.64.225:3888:QuorumCnxManager$Listener@562] - As I
'm leaving the listener thread, I won'
t be able to participate in leader election any longer: centos_1/220.250.64.225:38882016-11-03 19:33:43,795 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@400] - Cannot open channel to 2 at election address centos_2/220.250.64.225:3888java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
server.1=0.0.0.0:2888:3888
server.2=10.11.111.43:2888:3888
server.3=10.11.111.45:2888:3888
在mrzwk-6上:server.1=10.11.111.42:2888:3888
server.2=0.0.0.0:2888:3888
server.3=10.11.111.45:2888:3888
在mrzwk-8上:server.1=10.11.111.42:2888:3888
server.2=10.11.111.43:2888:3888
server.3=0.0.0.0:2888:3888
保存配置文件,并重启服务。