1、准备三台机器或虚拟机,系统是CentOS7 64位,jdk是1.8。
修改vi /etc/hostname ,分别改为node1,node2,node3。方便主机名区分
2、修改hosts文件,vi /etc/hosts,添加ip及主机名映射关系,便于用主机名访问ip,
改为如下内容(根据自己三台机器的主机ip来修改对应的ip):
::1 localhost node1 localhost6 localhost6.localdomain6
192.168.72.128 node1
192.168.72.129 node2
192.168.72.130 node3
PS:hosts文件中需要注意一点,就是如果有127.0.0.1的映射关系,需要删除或者改为0.0.0.0,否则会出现一些端口无法被其他机器访问。
3、下载zookeeper(官网地址Apache ZooKeeper, 本文使用的是3.7.0版本)
在node1上,执行 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz --no-check-certificate
PS:需要添加--no-check-certificate才能下载,否则需要验证
4、 解压文件
执行解压命令,tar xf apache-zookeeper-3.7.0-bin.tar.gz
解压完之后将解压后的文件夹移动到/opt/zk目录下,命令如下:
mkdir -p /opt/zk
mv apache-zookeeper-3.7.0-bin /opt/zk
5、配置环境变量
vi /etc/profile
在文件最后添加
export ZOOKEEPER_HOME=/opt/zk/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存之后,执行 source /etc/profile 使之生效。
6、修改zk配置文件
进到配置目录,将模板配置复制出一份zoo.cfg文件,并做修改。命令如下:
cd /opt/zk/apache-zookeeper-3.7.0-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
需要改两个内容:
1)修改dataDir(注意:后面myid文件也需要建到这个目录下)
dataDir=/var/kevin/zk
2)添加如下内容:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
改完之后保存文件。
7、添加myid文件
命令如下:
mkdir -p /var/kevin/zk
echo 1 > /var/kevin/zk/myid
node1执行以上命令, node2将echo 1改为echo 2, node3将echo 1改为echo 3。
8、启动zookeeper集群,从node1到node3依次启动即可,命令如下:
zkServer.sh start-foreground
启动完之后,新开窗口使用zkServer.sh status可以查看启动状态。如果出现Mode: follower或者Mode: leader就说明启动成功了。
PS:过程中可能遇到的问题
启动之后报如下错误:
java.net.ConnectException: Connection refused (Connection refused)
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:607)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:384)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
解决办法:
1、关闭防火墙
centos7默认防火墙是firewalld
使用命令:systemctl stop firewalld.service 关闭防火墙
使用命令:systemctl disable firewalld.service 开机禁用防火墙
2、检查端口权限
这个时候可以使用命令: netstat -nalp|grep java
查看下各个机器的3888端口有没有启动,以及实在哪个ip下启动,如果是127.0.0.1:3888,那么其他机器就无法访问本机的3888端口。需要修改hosts文件,将hosts文件中127.0.0.1改为0.0.0.0或者删除127.0.0.1的配置(文中第二步已经讲到,本人搭建的时候也是遇到了这个问题报的错)。改完之后,重新启动集群即可。