- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
- ZooKeeper包含一个简单的原语集,提供Java和C的接口。
- ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.13\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。今天我们在linux上来搭建一个zookeeper集群服务。
一、工具准备
(1)虚拟机准备(包括VMware Workstation Pro以及ios镜像)
百度网盘下载地址:链接:https://pan.baidu.com/s/15EFffIGMTBIZqCqu9fTwRQ 提取码:hr6t
(2)JDK,这个下载地址就不提供了,都懂得
(3)zookeeper,官网下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
二、安装虚拟机
这个网上教程有很多,暂时不提供,回头有时间了,可以写一个博客
三、安装jdk
(1)把下载好的jdk压缩包放在/usr/local/src目录下,我这里下载的是jdk1.8
tar -xvf jdk-8u191-linux-x64.tar.gz
(2)解压后删除压缩包
rm jdk-8u191-linux-x64.tar.gz
(3)配置环境变量,编辑/etc/profile文件
vim /etc/profile
(4)在/etc/profile文件末尾行添加
JAVA_HOME=/usr/local/src/jdk1.8.0_191
JAVA_BIN=/usr/local/src/jdk1.8.0_191/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
(5)保存退出后,使配置文件生效
source /etc/profile
(6)检验jdk是否安装成功,查询版本号
java -version
四、安装ZooKeeper
(1)将下载好的zookeeper压缩包放在/usr/local/src目录下,并解压
tar -xvf zookeeper-3.4.13.tar.gz
(2)删除压缩包
rm zookeeper-3.4.13.tar.gz
(3)在/usr/local/src/zookeeper-3.4.13目录下新增data目录和log目录
mkdir data
mkdir log
(4)可以看到当前zookeeper目录如下
(5)进入data目录,新增myid文件,并且内容填写为1(内容1对应zoo.cfg中配置的server.1范围:1~255之间的整数,在集群中必须唯一)
cd data
vim myid
(6)进入配置目录,并复制zoo_sample.cfg文件为zoo.cfg
cd ../conf
cp zoo_sample.cfg zoo.cfg
(7)编辑zoo.cfg文件,我编辑好的是这样的
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/src/zookeeper-3.4.13/data
dataLogDir=/usr/local/src/zookeeper-3.4.13/log
clientPort=2181
server.1=192.168.156.32:2888:3888
server.2=192.168.156.206:2888:3888
server.3=192.168.156.46:2888:3888
(8)查看防火墙状态
firewall-cmd --state
如果看到的是running,说明防火墙是开启的,则关闭防火墙
(9)关闭防火墙
systemctl stop firewalld.service
systemctl start firewalld.service 启动防火墙
systemctl restart firewalld.service 重启防火墙
firewall-cmd --reload 输入命令重新载入
firewall-cmd --zone=public --add-port=8080/tcp --permanent 开启8080端口
–zone=public:表示作用域为公共的;
–add-port=8080/tcp:添加tcp协议的端口8080;
–permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;
(10)至此,一台zookeeper已经安装好了,为了方便可以另外克隆两台虚拟机,并分别修改myid文件内容为2,3,这样就有了三台安装了zookeeper虚拟机了。我的三台虚拟机的地址分别是上面配置的地址
server.1=192.168.156.32:2888:3888
server.2=192.168.156.206:2888:3888
server.3=192.168.156.46:2888:3888
其中myid中的1,2,3分别对应server.1,server.2,server.3中的1,2,3
至此,zookeeper集群便是搭建好了。
(11)启动,停止,重启服务
sh bin/zkServer.sh start #启动ZK服务
sh bin/zkServer.sh stop #停止ZK服务
sh bin/zkServer.sh restart #重启ZK服务
(12)检查服务
jps
可以看到一个进程QuorumPeerMain,他就是zookeeper进程,表示zookeeper启动正常
(13)查看集群状态
sh bin/zkServer.sh status
(14)客户端访问
./zkCli.sh -server 192.168.156.32:2181
(15)常见问题:
It is probably not running
原因:很可能是由于防火墙没有关闭或者myid文件没有修改