zookeeper的工作机制、应用场景,及实际部署使用

1、zookeeper是什么?

zookeeper是一个分布式服务框架,基于文件系统+通知机制,解决分布式应用的数据管理和协调问题,如:统一命名、状态同步、集群管理、应用配置项管理等。

2、zookeeper工作机制

Zookeeper是基于观察者模式设计的管理框架,它负责存储和管理大家都关心的数据,然后接受被观察者的注册,一旦这些数据的状态发生变化,Zookeeper负责通知已注册的被观察者做出反应。

虽然Zookeeper集群在配置时,并不指定Master和Slave,但是在集群工作时,通过内部选举机制产生一个Leader,其他节点作为Follower。集群需要半数以上节点存活才可用,所以适合安装奇数台server。

每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的,同一个client的更新请求,按其发送顺序依次执行,一次数据更新要么成功,要么失败,在一定时间范围内,client能读到最新数据,保证数据一定的实时性。

3、应用场景

1、Hadoop的应用
Hadoop采用排他锁,来完成master的选举,控制同时只有一个active状态的namenode和resourcemanager在工作。在yarn上跑任务时,所有任务启动过程中都会把任务信息写入zookeeper里面,假如执行中active状态的resourcemanager突然宕机了,standby状态的节点转换成active后,会接管挂之前的任务,这样resourcemanager主从的切换不会影响正在yarn运行的任务。

2、hbase的应用
zookeeper是hbase集群的"协调器",hbase regionserver启动时会向zookeeper注册,提供hbase regionserver的状态信息(是否在线),HMaster通过watcher监听regionserver的存活情况。在HMaster启动时,会将hbase系统表-ROOT- 加载到zookeeper cluster,通过zookeeper cluster可以获取,当前系统表.META.存储的对应的regionserver信息。

3、kafka的应用
kafka通过zookeeper做集群的管理,所有的broker在启动时,会在zookeeper里面创建Znode,通过事件监听的机制,在各个broker之间同步其他broker的存活状态。在新topic创建时,kafka会把topic的name、partition、leader、topic分布信息等写入zookeeper,当broker退出时,会触发zookeeper更新其对应topic分区的isr列表,并决定是否需要做消费者的负载均衡。在新消费者注册时,会在zookeeper中创建Znode保存信息,设置消费者参数enable.auto.commit为true,应用消费kafka数据时会自动更新offset信息。

4、hive的应用
hiveserver2使用zookeeper共享锁进行选举,当多个节点在zookeeper中注册时,会创建有序的Znode临时节点,每个Znode都有一串数字后缀,zookeeper默认是从同一个锁路径下id最小的那个znode获取锁,设定对应hiveserver2节点是主的状态。假如这个节点挂了,这个znode会自动删除,watcher机制会通知另一个hiveserver2上位。同时,为了支持并发读写的原子性,Hive使用表数据锁机制,当一个sql在insert数据时锁住表,不让其它sql去读取表数据,等到释放锁之后,其它客户端才能读取这个表,hive表的锁机制可通过hive.support.concurrency=true配置来开启。

4、Zookeeper分布式安装

在三节点集群hadoop1、hadoop2、hadoop3上,进行Zookeeper分布式部署,开始前确保jdk1.8已安装。
1、访问zookeeper官网https://zookeeper.apache.org/releases.html,下载最新版二进制安装包,如apache-zookeeper-3.8.0-bin.tar.gz。

2、上传安装包到三个节点上,分别进行解压安装。

tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /usr
mv  /usr/apache-zookeeper-3.8.0-bin  /usr/zookeeper-3.8.0
cd /usr/zookeeper-3.8.0/conf
cp zoo_sample.cfg zoo.cfg

3、三个节点上,修改vim zoo.cfg文件,配置以下内容:

server1=hadoop1:2888:3888
server2=hadoop2:2888:3888
server3=hadoop3:2888:3888

4、三个节点,执行启动zookeeper命令,查看状态。

bin/zkServer.sh start  #启动服务
bin/zkServer.sh status   #查看状态

5、zookeeper客户端操作

新打开一个终端,执行以下命令:

bin/zkCli.sh  #启动客户端
ls /  #查看znode包含的内容
ls2 /  #查看znode节点详细数据
create /test "mynode"  #创建znode节点test
set /test "testnode"   #修改节点值
get /test  watch  #监听节点的值的变化
delete /test  #删除节点

你可能感兴趣的:(zookeeper的工作机制、应用场景,及实际部署使用)