目录
一 Zookeeper入门
1.1 概述
Zookeeper(润滑剂)是为分布式提供协调服务的一种框架,Zookeeper其实不难,但是确实很难理解,我还是用自己的话总结一下吧,Zookeeper = 文件系统 + 通知机制,什么意思呢?如果从java的观察者模式考虑的话,他就是一个观察者模式的框架,它的文件系统存储的是集群都很关心的数据(比方说每台机器的负载情况),当文件系统中的数据发生变化时,他会通知其他计算机,大概就是这样,现在不理解也没有关系,后面还会介绍。
1.2 Zookeeper的特点
1.3Zookeeper的文件系统
Zookeeper的文件系统和Linux的基本一样,如下图所示:
1.4 Zookeeper的下载
Zookeeper的官网:https://zookeeper.apache.org/
下载在上图左下角Download,进入后见如下界面:
点击下载即可,不需要太新的版本。
二 Zookeeper分布式安装
Zookeeper比较难理解,但是在搭建环境中理解还是比较好的,现在开始搭建环境:
2.1 解压配置
(1)三台服务器上都需要安装Zookeeper,以一台机器为例,解压
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
(2)配置当前服务器的编号
为什么要配置当前服务器的编号呢?因为三台服务器中都需要进行通讯,肯定要清楚彼此啊!正如在hadoop框架中指定namenode在哪台服务器,datanode在哪里一样。
在/opt/module/zookeeper-3.4.10目录下新建zkData文件夹,新建myid文件,并在文件中添加编号2
mkdir -p zkData
vim myid
添加2即可,另外两台机器添加3和4
(3)配置zoo.cfg文件
进入/opt/module/zookeeper-3.4.10/conf,将zoo_sample.cfg改名为zoo.cfg,编辑zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改dataDir=/opt/module/zookeeper-3.4.10/zkData
并添加
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
注意,另外两台机器也需要同步,解释一下2888和3888,2888表示这个服务器和Leader交换信息的端口,3888表示万一这个集群的leader挂了,其他的服务器通过这个端口选出新leader
三 集群启动
集群的启动命令在bin目录下,总结一下,Zookeeper分为服务端和客户端,服务端将自己的状态信息存储在Zookeeper集群上,客户端在集群上对自己想要监听的数据进行注册监听,那么当这个数据发生变化时,Zookeeper就会把这个变化告诉客户端,每次监听只执行一次。
服务端启动:bin/zkServer.sh start
客户端启动:bin/zkCli.sh start
四 Zookeeper重点
4.1Zookeeper选举机制
- Zookeeper要求集群中半数以上的机器存活才会启动,不包括半数,所以Zookeeper适合奇数个的集群
- 集群中只有一个Leader,其余均为Fllower,选举机制为投票制,举例说明若集群中有5台机器ABCDE,当A启动,A的id为1(myid文件中的值),未超过半数以上机器,不启动;B启动,id为2,集群数为2,未超过半数不启动;C启动,id为3,超过半数以上,允许启动且id最大,所以Leader为C,DE启动后也只能为Fllower。
- Zookeeper节点机制,前面提到Zookeeper中存储信息的文件目录和Linux相同,但是它的节点分为4种,分别为持久化目录节点(persistent),持久化顺序编号(persistent_squential),临时目录节点(ephemeral),临时顺序编号节点(ephemeral_squential),要根据业务需求选择节点类型
4.2监听器原理
特别重要,这里以具体的例子解释,光说实在索然无味
- 启动集群,三台服务器均需要,Zookeeper是不依赖Hadoop的,Hive这种需要先启动Hadoop才能启动Hive。
102:bin/zkServer.sh start
103:bin/zkServer.sh start
104:bin/zkServer.sh start
- 查看三台机器的状态
102:bin/zkServer.sh status follower
103:bin/zkServer.sh status follower
104:bin/zkServer.sh status leader
- 启动客户端,随便哪台机器
103:bin/zkCli.sh
注意这里启动客户端没有start,容易出错
- 查看Zookeeper的文件系统,这里涉及到第一个重点了
103:ls / 或者ls2 / ls2表示详细查看
这个我之前实验的时候建立了几个,默认只有zookeeper一个
- 注册监听,这里涉及到第二个重点了,假设上图中wangleijia节点存储了我的重要信息,现在我用104号机器监听这个wangleijia节点,然后我在102号机器改变这个节点,如果成功的话,Zookeeper应该要告诉104机器,你监听的wangleijia节点发生了变化,这个应该可以理的清楚吧
查看wangleijia中本来的值:get /wanglei 可以看下图知道里面寸的wanglei,假设这个wanglei很重要,是公司里面的资金密码。
在104号机器中监听wangleijia节点:get /wangleijia watch
重点来了,我在102机器上改变wangleijia里面的值了,相当于我是黑客,准备篡改公司的资金密码了,一旦我改了,Zookeeper一定要告诉104对吧!
102:set /wangleijia “liuyue”
此时,104已经得到了通知:
到此,监听机制就是这样,104就知道了wangleijia已经被篡改了,太危险了!!!!