一:为什么学习zookeeper?
1. 进程管理
我们可以通过zookeeper进行协调多个分布式进程之间的活动。
我们在分布式环境中,在每台服务器上都有完全相同的服务,如果我们将他们全部都开启的话,会浪费资源。但是,如果只是开启一个,会造成单节点模式。所以我们可以使用zookeeper的分布式锁进行管理。
2. 集群管理
我们集群是由多台服务器组成的,我们平时会对一些服务器进行替换,维修等等,我们可以使用zookeeper进行管理。
3. 名字ip管理
将我们的服务器注册在ip中,我们可以通过ip,增加新的域名来管理我们的ip,当我们修改域名的时候,直接在zk中修改即可。
4. 配置管理
我们服务器的配置,可以在服务器中修改,但是当我们要一起修改好多台的时候,我们直接在zk中可以集中修改,不需要单独进服务器中进行修改。
二:zookeeper是什么?
-
zk顾名思义,是指动物园管理员。对于服务hadoop(大象),hive(蜜蜂)等服务可以进行管理。
-
存储结构
node四种类型
(1)PERSISTENT 持久化节点: 所谓持久节点,是指在节点创建后,就一直存在,直到 有删除操作来主动清除这个节点。否则不会因为创建该节点的客户端会话失效而消失。(2)PERSISTENT_SEQUENTIAL 持久顺序节点:这类节点的基本特性和上面的节点类 型是一致的。额外的特性是,在 ZK 中,每个父节点会为他的第一级子节点维护一份时序, 会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属 性,那么在创建节点过程中,ZK 会自动为给定节点名加上一个数字后缀,作为新的节点名。 这个数字后缀的范围是整型的最大值。 在创建节点的时候只需要传入节点 “/test_”,这样 之后,zookeeper 自动会给”test_”后面补充数字。
(3)EPHEMERAL 临时节点:和持久节点不同的是,临时节点的生命周期和客户端会 话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提 到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。 这里还要注意一件事,就是当你客户端会话失效后,所产生的节点也不是一下子就消失 了,也要过一段时间,大概是 10 秒以内,可以试一下,本机操作生成节点,在服务器端用 命令来查看当前的节点数目,你会发现客户端已经 stop,但是产生的节点还在。
(4) EPHEMERAL_SEQUENTIAL 临时自动编号节点:此节点是属于临时节点,不过带 有顺序,客户端会话结束节点就消失。
-
Zookeeper 集群中的角色主要有以下三类
三:怎么搭建zookeeper?
集群节点安装,我们使用安装的节点的台数,最好是奇数。三台或者五台。
目前,我使用的是三台,10.10.10.11,10.10.10.12,10.10.1.0.13,我们现在一台机器上10.10.10.11上安装。
单节点模式安装。
-
下载安装包。
[zk下载地址](https://downloads.apache.org/zookeeper/zookeeper-3.6.3/)
-
上传虚拟机服务器,解压。
cd /opt/app/zookeeper
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
3. 来到解压后的目录中的 conf 路径下,将文件 zoo_sample.cfg 修改为 zoo.cfg。
mv zoo_sample.cfg zoo.cfg
4. 创建zkDate文件夹。
mkdir /opt/app/zookeeper/apache-zookeeper-3.6.3-bin/zkData
- 打开 zoo.cfg 文件,修改 dataDir 路径。
/opt/app/zookeeper/apache-zookeeper-3.6.3-bin/conf
vim zoo.cfg
dataDir=/opt/app/zookeeper/apache-zookeeper-3.6.3-bin/zkData
6. 启动服务
cd /opt/app/zookeeper/apache-zookeeper-3.6.3-bin/bin
./zkServer.sh start
- 查看服务
jps
./zkServer.sh status
8. 停止服务
./zkServer.sh stop
集群模式
- 先在服务器 10.10.10.11 上操作,来到我们创建的目录 /zkData 中,创建文件 myid(文件必须叫 myid,从源码中可以看到读取的文件就是 myid)。
cd /opt/app/zookeeper/apache-zookeeper-3.6.3-bin/zkData
vim myid
在第一行,添加11.之所以添加11,是因为我的这台服务器尾号是11,方便在集群中查找这台服务器。
- 在配置文件 zoo.cfg 中配置集群节点信息。
在配置文件 zoo.cfg 的最下面增加如下的配置:
server.11=10.10.10.11:2888:3888
server.12=10.10.10.12:2888:3888
server.13=10.10.10.13:2888:3888
格式: server.A=B:C:D
A 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
B 是这个服务器的地址;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
- 在其余节点(服务器)安装 Zookeeper。可以使用scp -r 到其他机器。
scp -r apache-zookeeper-3.6.3-bin root@10.10.10.12:/opt/app/zookeeper
scp -r apache-zookeeper-3.6.3-bin root@10.10.10.13:/opt/app/zookeeper
- 分发后,分别到其余服务器的 myid 文件中修改编号,10.10.10.12 的编号为12,10.10.10.13 的编号为13。
- 启动集群并查看状态
每台服务器都执行以下命令
/opt/app/zookeeper/apache-zookeeper-3.6.3-bin/bin
./zkServer.sh start
- 查看状态
./zkServer.sh status
有一个leader,俩个follower。