一般zookeeper集群通常是由一组机器组成,一般3~5(不小于3个节点)台机器就可以组成一个zookeeper集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。准备了3台新装的虚拟机192.168.0.110、192.168.0.111、192.168.0.112,由于需要依赖JDK所以先配置好了(此处安装的版本是JDK1.8,百度网盘提取码:i3cw),如果不会的自行百度安装。
1、安装
1.1下载安装包
此处安装的版本是ZK3.6.1,百度网盘提取码:rbmp
官网直接下载:https://zookeeper.apache.org/
1.2解压并安装(或使用yum安装)
安装zookeeper
#把下载好的安装包上传到此目录下
cd /usr/local/software/
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin /usr/local/zookeeper-3.6.1
#同理把安装包上传到另外两台服务器上并解压
scp /usr/local/software/apache-zookeeper-3.6.1-bin.tar.gz 192.168.0.111:/usr/local/software/
scp /usr/local/software/apache-zookeeper-3.6.1-bin.tar.gz 192.168.0.112:/usr/local/software/
修改环境变量
vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.6.1
export PATH=.:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
#刷新让配置文件生效
source /etc/profile
#同理把profile文件上传到另外两台服务器上并刷新
scp /etc/profile 192.168.0.111:/etc/profile
scp /etc/profile 192.168.0.112:/etc/profile
修改conf
cd /usr/local/zookeeper-3.6.1/conf/
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
#修改dataDir
dataDir=/usr/local/zookeeper-3.6.1/data
#在最后添加集群配置,server后面的0/1/2可以定义为不同的数字,后面会根据这个标识找到对应的机器
server.0=192.168.0.110:2888:3888
server.1=192.168.0.111:2888:3888
server.2=192.168.0.112:2888:3888
创建data目录,并创建myid文件
cd /usr/local/zookeeper-3.6.1/
mkdir data
vi myid
#只需要填写内容:0,同理另外两台机器分别填写1、2
scp /usr/local/zookeeper-3.6.1/conf/zoo.cfg 192.168.0.111:/usr/local/zookeeper-3.6.1/conf/
scp /usr/local/zookeeper-3.6.1/conf/zoo.cfg 192.168.0.112:/usr/local/zookeeper-3.6.1/conf/
cd /usr/local/zookeeper-3.6.1/conf/
rm -rf zoo_sample.cfg
2、启动
#启动
zkServer.sh start
#停止
zkServer.sh stop
#重启
zkServer.sh restart
#查看节点状态
zkServer.sh status
通过jps命令我们可以看到zookeeper集群已经启动成功了,但是看不到192.168.0.110是follower/leader。排查日志发现不同节点间防火墙的问题导致连接失败
cd /usr/local/zookeeper3.6.1/logs
tail -f zookeeper-root-server-alidayu111.out
java.net.NoRouteToHostException: 没有到主机的路由 (Host unreachable)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
解决办法
#同时对3台服务器执行以下步骤
#关闭zookeeper
zkServer.sh stop
#重启网卡
service network restart
#关闭防火墙
systemctl stop firewalld.service
#禁止启动防火墙
systemctl disable firewalld.service
#启动zookeeper
zkServer.sh start
3、测试
出现如下说明已经安装成功了~
使用客户端进行连接
zkCli.sh ls
Connecting to localhost:2181