Hadoop之ZooKeeper

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zkzbhh/article/details/78775278

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接受客户端初始化时最常能忍受多少个心跳时间间隔数10*2000=20S。
  ②SyncLimit:标识leader和follower之前发送信息,请求和应答世界长度,最常不能超过多少个tickTime的世界长度,总的世界就是5*2000=10S。
  ③Server.A=B:C:D :A是数字表示第几号服务器;B是服务器的ip地址或域名;C表示如果这个服务器宕机了,需要一个端口重新选举,选出一个新的leader,这个端口就是用来执行选举服务器相互通信端口。
  ④集群模式下配置一个文件myid:这个文件在data/zkData目录下,这个文件里有一个数据就是A的值,zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

猜你喜欢

转载自blog.csdn.net/zkzbhh/article/details/78775278