干货:
什么是Zookeeper?Zookeeper是个什么东西?
1.Zookeeper可以被用作注册中心。
2.Zookeeper是Hadoop生态系统的一员。
3.构建Zookeeper集群的时候,使用的服务器最好是奇数台。
你以为就完了?错
Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,master选举,分布式和分布式队列;;
Zookeeper最常用的一个使用场景就是用于担任服务生产者和服务消费者的注册中心。
Zookeeper主要一共以下几个方面:
集群管理:容错,负载均衡
配置文件的集中管理
集群的入口
**************************************************************************************************************Zookeeper本省就是一个分布式程序;
为了保证高可用,最好是以集群形态来部署Zookeeper;
Zookeeper将数据保存在内存中,这也就验证了高吞吐量和低延迟;
Zookeeper是高性能的;
Zookeeper有临时节点的概念;
Zookeeper地城其实子提供了两个功能;
**************************************************************************************************************
Zookeeper安装:
打开三台虚拟机
下载地址:
根据自己所需 版本 点击download下载即可 在这里就不给大家演示了。
一、安装前准备:
1.检查虚拟机是否有JDK,以及JDK版本;
2.拷贝Zookeeper安装包到Linux系统下;
解压到目录下,建议和Hadoop,hive,放在一起即可
tar -zxvf zookeeper-3.4.10.tar.gz -C 解压目录
二、修改配置文件:(我之前全部修改完毕,只是演示一遍 如有不懂可私信指导,或自行查阅)
1./zookeeper/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
mv zoo_sample.cfg zoo.cfg
2.在zookeeper目录下 新建文件夹存在zookeeper数据:
mmkdir zkdata
我这里边已经操作完毕 所有在这里我就不做修改 梳理处理即可
3.修改zoo.cfg文件里边的datadir:
cd conf
vim zoo.cfg
进去之后将datadir修改成以下:
/export/server/zookeeper/zkdata
如果不修改的话 默认路径的话 是临时的tmp 这样是存在不久的 do not use /tmp--不允许使用临时目录!!! 集群无法启动。
4.操作完毕后在zookeeper目录下启动Zookeeper:
bin/zkServer.sh start
5.查看进程是否启动:
jps
6.查看zookeeper状态:
bin/zkServer.sh status
7.启动客户端:
8.退出客户端,停止Zookeeper
quit
bin/zkServer.sh stop
一键启动Zookeeper集群脚本
在~目录下新建bin文件夹
mkdir bin
新建脚本文件:
vim zk.sh
输入以下内容:
#!/bin/bash
case $1 in
"start"){
for i in node1 node2 node3
do
echo ----------zookeeper $i 启动----------
ssh $i "/export/server/zookeeper/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in node1 node2 node3
do
echo ----------zookeeper $i 停止----------
ssh $i "/export/server/zookeeper/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in node1 node2 node3
do
echo ----------zookeeper $i 状态----------
ssh $i "/export/server/zookeeper/bin/zkServer.sh status"
done
}
;;
esac
node1 node2 node3 更换自己机器名称即可以及路径;
Zookeeper配置参数解读:
Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径
主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口
监听客户端连接的端口。
Zookeeper客户端 以及客户端常用命令:
在学习客户端以及客户端命令时候需要先了解下选举机制(重点):
涉及后期集群启动
1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
2)Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
3)以一个简单的例子来说明整个选举的过程。
假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么,如图所示。
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,所以它的选举状态一直是LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader。
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。
(5)服务器5启动,同4一样当小弟。
Stat结构体
1)czxid-创建节点的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
2)ctime - znode被创建的毫秒数(从1970年开始)
3)mzxid - znode最后更新的事务zxid
4)mtime - znode最后修改的毫秒数(从1970年开始)
5)pZxid-znode最后更新的子节点zxid
6)cversion - znode子节点变化号,znode子节点修改次数
7)dataversion - znode数据变化号
8)aclVersion - znode访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10)dataLength- znode的数据长度
11)numChildren - znode子节点数量
一、启动客户端:
bin/zkCli.sh
集群提前启动 否则报错拒绝连接
此时机器名称显示localhost:
如何更改为自己机器名字?
bin/zkCli.sh -server node1(自己机器名字)
查看帮助,里边有所有命令提示:
help
查看当前内容:
ls /
目前客户端什么都没有 所以只显示zookeeper;
查看当前节点详细数据:
ls2 /
创建节点 二个普通节点:
create /sanguo "diaochan"
获取节点值以及详细信息:
get /sanguo
get -s /sanguo
创建短节点以及查看:
create -e /sanguo/wuguo "zhouyu"
get -s /sanguo/wuguo
ls /sanguo
退出客户端在查看发现短节点以及删除:
quit
bin/zkCli.sh -server node1
ls /
ls /sanguo
create /sanguo/weiguo "caocao"
ls /
create -s /sanguo/weiguo "caizhi"
获取数据 get 修改数据set:
get /sanguo/weiguo
--caocao
set /sanguo/weiguo "dainwei"
get /sanguo/weiguo
---dianwei
监听设置:监听是在修改数据时侯会提示:
get -w /sanguo
再次在sanguo下修改会有提示:
监听只适用一次!
删除节点:delete 写路径
删除全部节点 deleteall
递归删除 rmr
查看删除的节点状态:
stat /sanguo
因为已经删除 所以不存在。
关闭集群:
zk.sh stop
至此 常用命令完毕,下篇文章更新,Zookeeper--API应用