zookeeper的简介及全分布式部署
Zookeeper简介
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目,针对大型分布式系统设计,主要用来解决实际分布式应用场景中存在的一些问题,提供配置维护、名字服务、分布式同步、组服务等功能,在分布式模式下,能够为分布式应用提供高性能和高可靠的协调服务,极大的降低了开发分布式应用的成本。
Zookeeper的架构及特点
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4)更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。
6)实时性,在一定时间范围内,Client能读到最新数据。
7)保持leader和flower的数据同步,才能使得Zookeeper保证事务的顺序一致性。
Zookeeper工作原理
1)Client 向 ZooKeeper 的 Server1 上写数据,发送一个写请求。
2)如果Server1不是Leader,那么Server1 会把接受到的请求进一步转发给Leader,因为每个ZooKeeper的Server里面有一个是Leader。这个Leader 会将写请求广播给各个Server,比如Server1和Server2,各个Server写成功后就会通知Leader。
3)当Leader收到大多数 Server 数据写成功了,那么就说明数据写成功了。如果这里三个节点的话,只要有两个节点数据写成功了,那么就认为数据写成功了。写成功之后,Leader会告诉Server1数据写成功了。
4)Server1会进一步通知 Client 数据写成功了,这时就认为整个写操作成功。ZooKeeper 整个写数据流程就是这样的。
Zookeeper数据模型
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一 个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过路径识别。
Zookeeper中Znode的两种类型:短暂(ephemeral)节点:客户端与服务器端断开连接后,创建的节点自己删除;永久(persistent)节点:客户端与服务器端断开连接后,创建的节点依然存在。
四种形式:持久化节点(Persistent),持久化顺序编号目录节点(Persistent_sequential),临时目录节点(Epherneral),临时顺序编号目录节点(Epherneral_Sequential)。
Zookeeper的应用场景
统一配置管理,统一集群管理,服务器动态上下线,软负载均衡。
(1) Zookeeper在Hbase中的使用。HBase内置了Zookeeper来完成集群的协调。使用Zookeeper,HBase集群中可以启动多个HMaster(HBase的主节点)节点,并且保证只有一个HMaster在运行。
(2) Zookeeper在Hadoop集群中的使用。前面已经介绍过,在Hadoop集群中只能有一个活动的Namenode,为了避免单点故障,通常都要配置NameNode的高可用机制,NameNode的高可用就是使用Zookeeper来实现的。
(3) Zookeeper在YARN高可用中的使用。第4章介绍过YARN自动重启机制和好可用机制都是使用Zookeeper来实现的。
Zookeeper全分布式部署
1、解压zookeeper安装包
链接:https://pan.baidu.com/s/1sczNlJgBvxH5DY2vZsOg9Q
提取码:bvsu
2、创建/usr/local/zookeeper/data
3、配置环境变量
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.6/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
4、配置文件
cd /usr/local/zookeeper/zookeeper-3.4.6/conf/zoo.cfg
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/usr/local/zookeeper/data
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
5、每台节点添加myid
$>echo 1 > /usr/local/zookeeper/data /myid
$>echo 2 > /usr/local/zookeeper/data /myid
$>echo 3 > /usr/local/zookeeper/data /myid
非脚本启动
每台节点 zkServer.sh start status查看服务器状态
脚本启动(推荐)
vim zkManger.sh
#! /bin/bash
for host in hadoop1 hadoop2 hadoop3
do
echo "${host}:${1}ing......"
ssh $host "source /etc/profile;/usr/local/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start"
done
给脚本赋予权限:
chmod +x zkManger.sh
jps 查看进程
QuorumPeerMain是zookeeper进程
查看每台服务器的状态
zkServer.sh status
注意事项
如果集群上同时安装了Hadoop、Zookeeper,需要注意两者之间有先后启动顺序:
Hadoop——>Zookeeper
本文地址:https://blog.csdn.net/z7634057957/article/details/110499851