目录
很尴尬的一点,手贱把Zookeeper拼错了,大家自己注意一下。。。。当然你也可以选择一直复制我的代码,到搭建集群的时候再带你改回去。
零、前置
1.工作机制
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
2.Zookeeper特点
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。
6)实时性,在一定时间范围内,Client能读到最新数据。
3.数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
一、下载
下载地址:Apache ZooKeeper
当然咱们在实际环境中不太可能会使用到最新的版本,如果想要找到较老的版本可以点下面的Older releases are available in the archive :
这里下载的版本是3.5.7,这个版本在实际环境中使用的还是较多的:
选择下载即可:
二、本地安装
在安装Zookeeper之前,得先安装好JDK,咱们先来安装JDK:
1.安装JDK
下载JDK:Java Downloads | Oracle
传进Linux后开始安装:
rpm -ivh jdk-8u201-linux-x64.rpm
接着开始配置文件:
vim /etc/profile.d/java.sh
把一下内容粘贴进去,然后保存退出:
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
接着刷新一下(切记):
source /etc/profile.d/java.sh
检查java版本,反馈如下则代表安装成功:
java -version
2.安装Zookeeper
把刚刚下载的Zookeeper安装包传上去:
opt 目录下创建一个新的目录 module :
mkdir module
接着开始解压:
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
然后咱们进到 module 目录看看:
cd /opt/module
ll
这里改了下名字,看着会舒服一些:
mv apache-zookeeper-3.5.7-bin/ zookpeer-3.5.7
进入 conf 目录进行配置,可以看到这里有三个文件,需要进行配置的只有第三个:
cd /opt/module/zookpeer-3.5.7/conf
咱们给他改个名字然后进行配置:
mv zoo_sample.cfg zoo.cfg
然后咱们 vim 进去改一下:
vim zoo.cfg
可以看到其内容如下:
# The number of milliseconds of each tick
### 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
### Leader和Follower初始通信时限
### Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
### Leader和Follower同步通信时限
### Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死
掉,从服务器列表中删除Follwer
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
### 保存Zookeeper中的数据
### 默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录
dataDir=/tmp/zookeeper
# the port at which the clients will connect
### 客户端连接端口,通常不做修改
clientPort=2181
可以看到里面的大部分都是注释,其中的参数非常的少,咱们主要来看这一段:
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
他说快照文件会存放在这里,不要使用临时目录来存储数据。所以很明显了,咱们得把这里改掉。我们先去创建一个目录:
然后把这个目录路径复制下来,填到刚刚的配置文件中然后保存退出:
三、运行测试
修改完毕后回到上一级目录 zookpeer-3.5.7 中,这时候咱们得先启动服务端后再去启动客户端:
bin/zkServer.sh start
启动完成后可以 jps 查看一下进程:
服务端启动后咱们需要启动客户端对其进行访问,这里不需要再加上之前的 start :
bin/zkCli.sh
启动成功后的样式如下:
退出时输入 quit 即可:
quit
使用以下命令可以查看Zookeeper的进程状态:
bin/zkServer.sh status
关闭服务端:
bin/zkServer.sh stop