ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
总结:Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.
网址: http://zookeeper.apache.org/releases.html
下载路径,点击download.
下载Zookeeper地址.
http://mirrors.hust.edu.cn/apache/zookeeper/
因为 zookeeper 是使用 Java 语言开发的所以要安装 jdk 才可以使用。
将JDK1.8文件上传到Linux操作系统中/ usr / /local/src/java/文件下.
如图
tar -xvf jdk-8u51-linux-x64.tar.gz
vim /etc/profile
如图所示
使JDK生效,之后检查jdk安装是否成功
source /etc/profile
如图
tar -xvf zookeeper-3.4.8.tar.gz
mkdir data log
跳转到bin目录中 zk启动关闭命令如下.
sh zkServer.sh start 或者 ./zkServer.sh start
sh zkServer.sh stop
sh zkServer.sh status
在zookeeper根目录中创建新的文件夹zkCluster.
如图
如图所示
创建zk1/zk2/zk3文件夹.
在每个文件夹里创建data/log文件夹.
mkdir {zk1,zk2,zk3}/{data,log}
分别在zk1/zk2/zk3中的data文件夹中创建新的文件myid.其中的内容依次为1/2/3,与zk节点号对应.
如图所示
编辑myid文件,定义编号.
如图所示
将zoo_sample.cfg 复制为zoo1.cfg之后修改配置文件.
如图所示
配置完成后将zoo1.cfg复制2份.之后需要修改对应的文件夹目录.和不同的端口即可.
通过下面的命令启动zk集群.
# 启动命令
sh zkServer.sh start zoo1.cfg
# 暂停命令
sh zkServer.sh stop zoo1.cfg
# 查看状态
sh zkServer.sh status zoo1.cfg
检查主从关系,从机情况说明.
如图所示
检查主从关系,主机情况说明.
如图所示
Zookeeper集群中leader负责监控集群状态,follower主要负责客户端链接获取服务列表信息.同时参与投票.
公式: 剩余存活节点的数量 > n/2
问题分析:
1个节点 不满足公式 ,所以不能搭建集群.
2个节点 1>1 不满足公式 所以不能搭建集群.
3个节点 2>1.5 满足公式 可以搭建集群.
结论:集群的最小的单位3台.
4个节点 3>2 满足公式 偶数台也可以搭建集群
性价比问题:
3个节点: 最多宕机1台.否则集群崩溃.
4个节点: 最大宕机1台,否则集群崩溃.
结论: 3台的效果与4台效果相同.所以选择奇数.
问题: 为什么启动zk1的时候检查状态,显示报错.之后启动第二台/第三天.为什么zk1就显示正常并且还是follower
答案:只有当集群超半数以上启动时才能正常工作.
说明:在集群中,由于需要进行高可用的配置,当主机宕机时,需要重新选举新的主机.当连续多次出现平票时,则可能出现多台主机的现象.称之为脑裂.
高中数据问题: 连续3次平票的概率是多少?
(1/2)^3=1/8 12.5%
问题:如何有效的降低脑裂现象的发生. 可以适当的调整节点的数量.
说明:在搭建集群时,会动态的分配myid的序号.zk集群的选举规则秉承着序号最大值优先的策略.集群选举时超半数同意即当选新的主机.
答案:1-3台永远不能当主机.
zk集群中 主机只负责监控和数据同步. 从机负责与客户端交互. 代码中的链接zk的一般都是从机.