Apache ZooKeeper 是一个分布式的、开源的程序协调服务,是 Hadoop 项目下的一个子项目。ZooKeeper 主要应用场景包括集群管理、配置中心、分布式锁、注册中心等。实际项目中,为了保证高可用,ZooKeeper 都是以分布式集群的方式进行安装的,至少需要三个节点。
ZooKeeper 包含主从节点以及心跳机制(选举模式),假设 master 节点挂了之后,ZooKeeper 会通过选举模式在 slave 节点选举出一个新的 master。
这里 Linux 选择 CentOS 7.2。
ZooKeeper安装
wget -P /usr/local http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
cd /usr/local
tar -zxvf zookeeper-3.4.13.tar.gz
vim /etc/rc.d/rc.local //配置开启自启动
追加如下配置即可(oracle jdk 对应的 JAVA_HOME 为 export JAVA_HOME=/usr/java/jdk):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
/usr/local/zookeeper-3.4.13/bin/zkServer.sh start
我们在三台不同的服务器上各部署一个 ZooKeeper 进程,以构成一个 ZooKeeper 集群。三个 ZooKeeper 进程均使用相同的 zoo.cfg 配置:
cd /usr/local/zookeeper-3.4.13/conf
mkdir -p /export/data/zookeeper //递归创建目录
mkdir -p /export/logs/zookeeper
cp zoo_sample.cfg zoo.cfg //拷贝配置文件
vim zoo.cfg
修改配置如下:
# 配置存储快照文件的目录
dataDir=/export/data/zookeeper
# 配置存储日志文件的目录
dataLogDir=/export/logs/zookeeper
# zk服务进程监听的TCP端口
clientPort=2181
# 2888:ZooKeeper服务之间通信的端口,3888:ZooKeeper与其他应用程序通信的端口
# server.1:表示这是第几号服务器
server.1=192.168.20.11:2888:3888
server.2=192.168.20.12:2888:3888
server.3=192.168.20.13:2888:3888
然后在三台服务器 dataDir 目录下,分别创建一个 myid 文件,其内容分别为1,2,3。然后分别在这三台机器上启动 ZooKeeper 进程,这样我们便将 ZooKeeper 集群启动了起来。如下:
cd /export/data/zookeeper
echo 1 >>myid //创建myid文件并写入1
cd /usr/local/zookeeper-3.4.13/bin
./zkServer.sh start //后台启动ZooKeeper
还有一些其他命令如下:
./zkServer.sh restart //重启ZooKeeper
./zkServer.sh stop //关闭ZooKeeper
./zkServer.sh status //查看服务状态,其中Mode参数:leader表示master节点,follower表示slave节点
./zkServer.sh start-foreground //前台启动