一、简介
目前创新互联已为数千家的企业提供了网站建设、域名、网络空间、网站托管、服务器托管、企业网站设计、华亭网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换等服务。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。Hadoop、Storm、消息中间件、RPC服务框架、分布式数据库同步系统,这些都是Zookeeper的应用场景。
Zookeeper集群中节点个数一般为奇数个(>=3),若集群中Master挂掉,剩余节点个数在半数以上时,就可以推举新的主节点,继续对外提供服务。
1、典型应⽤用场景
1)分布式通知/协调
⽤用于分布式系统的任务分发与任务执⾏行结果反馈
2) 集群管理
– 可以监控节点的存活状态
3)Master选举
Master/slave结构的系统中,避免单点故障,需要多个master,其中
只有⼀一个active master,ZooKeeper帮助选择active master
4) 分布式锁
– 独占:某⼀一时刻只有⼀一个client能够获得
– 控制时序:多个客户端的某些过程按照顺序执⾏行
5) 分布式队列
https://blog.csdn.net/king866/article/details/53992653/
2、架构
2.1、节点
– 2N+1个server组成,N+1个节点可⽤用时,整个系统保持可⽤用
2.2、server⾓角⾊色类型
– Server:存放数据(in-memory)
– Leader:不接受client的请求,负责进⾏行投票的发起和决议,最终更新状态 – Follower:接收客户请求并返回客户结果,参与Leader发起的投票
3、ObServer节点
问题
当client变多,ZK集群变⼤大时,节点都为follower时,更新成 本较⼤大
• 解决方案
ObServer节点:和client交互,存有数据的副本,不参与投票
4、角色
5、ZooKeeper承诺
5.1、顺序性
client的update请求都会根据他发出的顺序被顺序的处理
5.2、原子性
一个update操作要么成功要么失败,没有其他可能的结果
5.3、强一致性
client无论连接到那个server,展⽰示给它的都是同⼀一个视图
5.4、 可靠性
update一旦成功,就被持久化了,除⾮非另⼀一个update请求更 新了当前值
5.5、实时性
对于每⼀一个client,它的系统视图都是最新的
二、准备工作
1、系统环境
主机名 | 系统 | 服务版本 | IP |
master | CentOS7.4 | 3.4.12 | 192.168.56.129 |
slave1 | CentOS7.4 | 3.4.12 | 192.168.56.130 |
slave2 | CentOS7.4 | 3.4.12 | 192.168.56.131 |
2、暂时关闭防火墙和selinux
3、软件下载
下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/
4、Java环境
三、服务搭建
1、解压三个节点的文件
[root@master ~]# cd /home/
[root@master home]# tar -zxvf zookeeper-3.4.12.tar.gz
[root@master home]# ln -s zookeeper-3.4.12 zookeeper
备注:三个节点相同操作
2、在conf目录下创建zoo.cfg文件,三个节点配置相同,如下
[root@master ~]# cd /home/zookeeper/conf/
[root@master conf]# cp zoo_sample.cfg zoo.cfg
[root@master conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=50
server.1=192.168.56.129:2888:3888
server.2=192.168.56.130:2888:3888
server.3=192.168.56.131:2888:3888
3、创建文件/var/lib/zookeeper/myid,3个节点的 内容分别为1、2、3
[root@master conf]# mkdir -p /var/lib/zookeeper
[root@master conf]# cd /var/lib/zookeeper/
[root@master zookeeper]# vim myid
4、启动三个节点
[root@master zookeeper]# bin/zkServer.sh start
[root@master zookeeper]# jps
[root@master zookeeper]# bin/zkServer.sh status
5、测试
5.1、在zookeeper中任意一个节点,执行指令zkCli.sh
[root@master zookeeper]# ./bin/zkCli.sh
5.2、输入:help #帮助信息
ls / 查找根目录
create /test abc 创建节点并赋值
get /test 获取指定节点的值
set /test cb 设置已存在节点的值
rmr /test 递归删除节点
delete /test/test01 删除不存在子节点的节点
5.3、相关操作命令
新建操作
删除操作
5.4、查看工具
在Eclipse中查看Zookeeper集群节点
也可以使用ZooInspector查看
这里使用ZooInspector工具进行查看
下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
解压,进入目录ZooInspector\build,双击运行zookeeper-dev-ZooInspector.jar;
备注:前提是Windows环境安装了Java
4.5、点击左上角连接按钮,输入zk服务地址:ip:2181
点击OK,即可查看ZK节点信息
6、异常
6.1、CONNECTION_LOSS(连接丢失)
– eg:连接的server down掉
6.2、 SESSION_EXPIRED(会话失效)
– 由ZooKeeper集群管理,⾮非client管理
– ZooKeeper清除和该session有关的信息 – 正常运⾏行的ZK不会出现这种情况