一、环境准备
操作系统:CentOS Linux release 7.2.1511 (Core)
JDK版本:1.8.0_121(open jdk 也可)
三台服务器:106.12.204.214、39.106.87.20、152.136.159.168
二、下载zookeeper
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
选择适配系统环境的版本
三、安装
1、上传+解压
#此处我上传到opt目录下(可自行选择安装目录)
[root@localhost /]# cd /opt/
[root@localhost zookeeper3.4.14]# tar zxvf zookeeper-3.4.14.tar.gz
2、配置zookeeper
(1)创建数据目录
下面zoo.cfg配置文件的dataDir将会使用这个目录
[root@localhost zookeeper]# cd /opt/zookeeper3.4.14/
[root@localhost zookeeper]# mkdir data
(2)修改配置文件
[root@localhost zookeeper]# cd conf
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vi zoo.cfg
先把dataDir=/tmp/zookeeper注释,然后将下面四行代码添加到文件末尾
dataDir=/usr/local/zookeeper/data
#以下配置的sever.n和后续的myid必须一致,本机ip配置0.0.0.0
server.3=0.0.0.0:2888:3888
server.2=39.106.87.20:2888:3888
server.1=152.136.159.168:2888:3888
如图:
(3)创建myid文件
[root@localhost conf]# cd ../data
#另外两台依次修改为2和3
[root@localhost data]# echo "1" > myid
3、开启zookeeper端口
开启2888、3888、2181端口(或者直接关闭防火墙也可)
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanent
重启防火墙
firewall-cmd --reload
4、配置环境变量
vi /etc/profile
添加以下信息
export ZOOKEEPER_INSTALL=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin
备注:三台机器依次操作2、3、4步骤(可以配置完其中一台,然后scp,再进行相应修改)
5、启动zookeeper
(1)启动(每台机器都要启动)
[root@localhost bin]# zkServer.sh start
如果输出以下内容,表示启动成功
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
(2)查看状态
[root@localhost data]# zkServer.sh status
192.168.1.91:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
192.168.1.92:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
192.168.1.93:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
由此我们看出192.168.1.92这台机器被自动选举为leader了
四、验证
在Zookeeper安装的任何一个节点执行客户端连接命令:
zkCli.sh -server 192.168.1.1:2181
能够连接表示成功
常见问题:
1、zookeeper启动后,查看状态显示
[root@iZ2ze06fzsvx84ds11gda1Z zookeeper-3.4.14]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
这种情况一般表示zookeeper集群启动失败,请根据日志进行排查(仔细分析日志),一般由以下原因造成:
(1)防火墙未正常配置或者没有关闭
(2)端口占用(netstat -apn | grep 2181、2888、3888)
(3)myid没有配置或者与server.id不一致
(4)网络问题,通过机器之间互ping ip排查
(5)本机的server.id的配置行的ip没有配置为0.0.0.0
说明:
网上还有其他说法,比如配置/etc/hosts 文件,配置集群机器ip,删除/etc/hosts中的127.0.0.1的配置,本人亲测,不影响zookeeper集群启动。
本人遇到“It is probably not running.”,通过上面(1)至(5)各自场景排查,均没有解决问题,然后仔细分析日志zookeeper.out的内容:
2019-05-31 15:20:51,075 [myid:1] - WARN [QuorumPeer[myid=1]/0.0.0.0:2181:Learner@237] - Unexpected exception, tries=1, connecting to /39.106.87.20:2888
java.net.SocketTimeoutException: connect timed out
发现另外两台机器都报connecting to /39.106.87.20:2888超时的问题,因此怀疑机器39.106.87.20限制了外来访问(但我已经排查了防火墙和网络问题),由于该机器是阿里云的ECS,我联想到当初自建MySQL无法远程登陆的问题,才想起来阿里云ECS默认安全组是只开放了ssh 22等基本访问端口,因此新增了安全组,集群正常启动,因此加上第(6)条:机器安全组设置(云服务器)