一、简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
使用场景
二、安装
Zookeeper集群搭建(基于外网ip的云服务器搭建) ^1
服务器上搭建集群时,需要开放端口,且在zoo.conf加上quorumListenOnAllIPs=true
安装包地址^4
配置环境变量
1
2
3
4set zookeeper environment
export ZK_HOME=/root/zookeeper-3.4.14
export PATH=$PATH:$ZK_HOME/bin
source /etc/profile配置文件将在根目录下的conf文件夹下,需要先将其重命名为zoo.cfg
1
2cd zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg修改配置文件 zoo.cfg,在安装目录下创建data和log文件夹
1
2
3
4
5
6
7
8
9
10
11
12dataDir=/home/environment/zookeeper-3.6.2/data
dataLogDir=/home/environment/zookeeper-3.6.2/log
添加集群配置
server.1=114.55.26.230:2888:3888
2181 : 对 client 端提供服务
2888 : 集群内机器通信使用
3888 : 选举 leader 使用
修改默认的8080端口
admin.serverPort=8081
如果出现配置集群时,集群启动失败,配置的阿里云外网地址,显示地址无法请求问题
因为配置的结点不是在同一内网中,设置的是公网ip。所以需要在配置文件中添加设置
quorumListenOnAllIPs=true在data文件夹下创建myid文件,touch myid

myid的内容与zoo.cfg的内容ip一致
启动节点
1
2
3
4启动命令=》zkServer.sh start
停止命令=》zkServer.sh stop
重启命令=》zkServer.sh restart
查看集群节点状态=》zkServer.sh status
三、使用
1 | 查看启动日志./zkServer.sh start-foreground |
四字命令
1 | 开启四字命令(修改config的zoo.cfg文件) |
[permissions]:有五种类型(create、read、write、delete、admin),含义如下:
create:创建节点的权限,简写为c;
read:读节点的权限,简写为r;
write:写节点的权限,简写为w;
delete:删除节点的权限,简写为d;
admin:为节点分配权限的权限,简写为a。

auth 用于授予权限
1 | setAcl /runoob/child auth:user1:123456:cdrwa |
digest 退出当前用户,重新连接终端,digest 可用于账号密码登录和验证
1 | ls /runoob |
ip 限制 IP 地址的访问权限,把权限设置给 IP 地址为 192.168.3.7 后,IP 为 192.168.3.38 已经没有访问权限
1 | create /runoob/ip 0 |
四、常用使用场景
1、分布式锁
对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执行完另外一个机器再执行。那么此时就可以使用 zookeeper 分布式锁,一个机器接收到了请求之后先获取 zookeeper 上的一把分布式锁,就是可以去创建一个 znode,接着执行操作;然后另外一个机器也尝试去创建那个 znode,结果发现自己创建不了,因为被别人创建了,那只能等着,等第一个机器执行完了自己再执行。


分布式锁代码-阿里云盘地址:关注公众号原棵哈回复zookeeper获取

2、分布式协调
这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zookeeper 就可以实现分布式系统之间的协调工作。A 系统发送请求之后可以在 zookeeper 上对某个节点的值注册个监听器,一旦 B 系统处理完了就修改 zookeeper 那个节点的值,A 系统立马就可以收到通知,完美解决。

3、元数据/配置信息管理

4、HA 高可用性
hadoop、hdfs、yarn 等很多大数据系统,都选择基于 zookeeper 来开发 HA 高可用机制,就是一个重要进程一般会做主备两个,主进程挂了立马通过 zookeeper 感知到切换到备用进程。
