1、ZooKeeper简介
ZooKeeper是一个为分布式应用所设计的开源协调服务。可以为用户提供同步、配置管理、分组和命名等服务。ZooKeeper提供一个易于编程的环境,它的文件系统使用了我们熟悉的目录树结构,ZooKeeper是使用Java编写的,但是它支持Java和C两种编程语言接口。
2、ZooKeeper的设计目标
分布式环境下的程序和活动为了达到协调一致的目的,通常具有某些共同的特点,例如:简单性、有序性等。
①简单化
ZooKeeper允许分布式的进程通过共享体系的命名空间来进行协调,这个命名空间的组织与标准的文件系统非常相似,是由一些数据寄存器组成的。简称Znode,它们和文件及目录非常相似。ZooKeeper的数据发在内存中,即ZooKeeper可以达到一个高的吞吐量,并且延迟低。ZooKeeper的实现非常注重高性能、高可靠性,以及严格的有序访问。
②健壮性
组成ZooKeeper服务的服务器必须互相知道其他服务器的存在。它们维护着一个处于内存中的状态镜像,以及一个位于存储器中的交换日志和快照。只要大部分的服务器可用,那么ZooKeeper服务就可用。
如果客户端链接到单个ZooKeeper服务器上,那么这个客户端就管理着一个TCP连接,并且通过这个TCP连接来发送请求、获得响应、获取检测时间,以及发送心跳。如果连接到服务器上的TCP连接断开,客户端将链接到其他的服务器上。
③有序性
ZooKeeper可以为每一次更新操作赋予一个版本号,并且此版本号是全局有序的,不存在重复的情况。ZooKeeper所提供的很多服务也是基于此有序性的特点来完成。
④速度优势
它在读取主要负载时尤其快。ZooKeeper应用程序在上千台机器的节点上运行。
⑤其他(原子性,单系统镜像、可靠性和及时性)
*3、ZooKeeper的安装与基础配置
上传ZooKeeper的压缩包——>解压缩到/opt/modules/目录——>在zookeeper目录下创建临时数据目录——>配置 zookeeper的配置文件——>启动zookeeper
①上传ZooKeeper的压缩包
②解压缩到/opt/modules目录
sudo chmod u+x zookeeper-3.4.10.tar.gz
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/modules
③在ZooKeeper目录下,创建临时数据目录
mkdir -p data/zkData
④配置ZooKeeper的配置文件
cd conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
在zoo.cfg配置文件中增加以下内容:
dataDir=/opt/moduleszookeeper-3.4.10/data/zkData
server.1=hadoop-sk.skedu.com:2888:3888
server.2=hadoop-sk2.skedu.com:2888:3888
server.3=hadoop-sk3.skedu.com:2888:3888
⑤在data/zkData目录下创建myid
touch myid
vi myid
编辑myid内容为:1
⑥分发到其他节点上
scp -r zookeeper-3.4.10/ zzxb@zhangkai2:/opt/modules/
scp -r zookeeper-3.4.10/ zzxb@zhnagkai3:/opt/modules/
⑦修改各个节点中的myid值
zhangkai2:2
zhangkai3:3
⑧分别在各个节点上启动zookeeper
bin/zkServer.sh start
⑨查看各个节点的状态
bin/zkServer.sh status
*4、ZooKeeper的服务分配情况
第一台机器:zhangkai
第二台机器:zhangkai2
第三台机器:zhangkai3
ZooKeeper遵循内部选举机制,可以理解成随机确定leader节点,在此次启动中,第一台机器担任了leader的角色,而第二、第三台机器担任了follow的角色。
*5、ZooKeeper配置文件解释
①Initlimit:配置zookeeper接受客户端初始化时最常能忍受多少个心跳时间间隔数102000=20S。
②SyncLimit:标识leader和follower之前发送信息,请求和应答世界长度,最常不能超过多少个tickTime的世界长度,总的世界就是52000=10S。
③Server.A=B:C:D :A是数字表示第几号服务器;B是服务器的ip地址或域名;C表示如果这个服务器宕机了,需要一个端口重新选举,选出一个新的leader,这个端口就是用来执行选举服务器相互通信端口。
④集群模式下配置一个文件myid:这个文件在data/zkData目录下,这个文件里有一个数据就是A的值,zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。