1.Zookeeper 简介
Zookeeper 分布式服务框架主要是用来解决分布式应用中经常遇到的一些数据管理问题,提供分布式、高可用性的协调服务能力,在 FusionInsight 集群中主要用途是保存上层组件的元数据,并保证其主备倒换。
Zookeeper 的作用
(1) 配置管理这个好理解。分布式系统都有好多机器,比如我在搭建 hadoop 的 HDFS 的时候,需要在一个主机器上(Master 节点)配置好 HDFS 需要的各种配置文件,然后通过 scp 命令把这些配置文件拷贝到其他节点上,这样各个机器拿到的配置信息是一致的,才能成功运行起来 HDFS 服务。 Zookeeper 提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。这样就省去手动拷贝配置了,还保证了可靠和一致性。这里写图片描述
(2) 名字服务这个可以简单理解为一个电话薄,电话号码不好记,但是人名好记,要打谁的电话,直接查人名就好了。分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务;类似于域名与 ip 之间对应关系,域名容易记住;通过名称来获取资源或服务的地址,提供者等信息
(3) 分布式锁,单机程序的各个进程需要对互斥资源进行访问时需要加锁,那分布式程序分布在各个主机上的进程对互斥资源进行访问时也需要加锁。很多分布式系统有多个可服务的窗口,但是在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即 failover 到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫
LeaderElection(leader 选举)。举个通俗点的例子,比如银行取钱,有多个窗口,但是呢对你来说,只能有一个窗口对你服务,如果正在对你服务的窗口的柜员突然有急事走了,那咋办?找大堂经理(zookeeper)!大堂经理指定另外的一个窗口继续为你服务!
(4) 集群管理,在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中有些机器(比如 Master 节点)需要感知到这种变化,然后根据这种变化做出对应的决策。我已经知道 HDFS 中 namenode 是通过 datanode 的心跳机制来实现上述感知的,那么我们可以先假设 Zookeeper 其实也是实现了类似心跳机制的功能吧!
Zookeeper 的特点
(1) 最终一致性:为客户端展示同一视图,这是 zookeeper 最重要的功能。
(2) 可靠性:如果消息被到一台服务器接受,那么它将被所有的服务器接受。
(3) 实时性:Zookeeper 不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用 sync()接口。