1 简介
(1) Zookeeper是分布式锁服务,为分布式系统提供名字服务器,分布式同步,组服务的开源高效可靠的协同工作,对集群的稳定性起到了关键作用。
(2) 一个松散耦合的分布式系统中粗粒度锁以及可靠性存储(低容量)的系统。
松散耦合:对于硬件要求不过严格
分布式:多个节点
粗粒度锁:在面对节点之间物品隔离的状态下,需要一把锁来维持整个生态秩序
存储:类似于共享资源角色
(3) Zookeeper和其他分布式应用一样,被设计成多点的服务,以避免单点故障。
(4) 数据模型:命名空间、与标准文件系统很相似;以/为间隔的路径名序列组成;只有绝对路径,没有相对路径;
(5) 每个节点自身信息:数据、数据长度、创建时间、修改时间;
(6) 具有文件,路径的双重特点。
2 结构
ZooKeeper 拥有一个层次的命名空间,这个和标准的文件系统非常相似。
(1) ZooKerper树中的每个节点被称为Znode;
(2) 访问节点必须指定绝对路径,路径必须由斜杆字符来开头
(3) Znode兼具文件和目录特点,即像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分,每个znode由三部分组成:
stat:此为状态信息,描述该Znode的版本,权限等信息
data:与该Znode关联的数据(Znode可以存储数据)
children:该Znode下的子节点(Znode可以拥有子节点目录)
3 节点类型
(1) Persistent nodes:永久有效节点,除非client删除,否则一直存在;
(2) Ephemeral nodes:临时节点,仅在创建该节点client保持连接期间有效,一旦连接丢失,zookeeper会自动删除该节点;
(3) Sequence nodes:顺序节点,client申请创建该节点时,zk会自动在节点路径末尾添加递增序号,这种类型是实现分布式锁,分布式queue等特殊功能的关键。
(4) 顺序节点不能单独存在,所以会有四种节点类型:永久有效节点、临时节点、永久有效顺序节点、临时顺序节点。
4 监控机制
(1) 监控机制(watch):数据节点上设置,客户端被动收到通知;各种读请求,如
getData():监控数据是否被休息
getChildren():监控父节点下的子节点列表是否发生变化
exists():监控某个节点是否存在
(2) 一旦监控被触发,若不重新置位,当再次发生同样的事件时,不会获得触发
(3) 一次性监控,触发后,需要重新设置
(4) 保证先收到事件,再收到数据修改的信息
(5) 传递性:如create会触发节点数据监控点,同时也会触发父节点的监控点;如delete会触发节点数据监控点,同时也会触发父节点的监控点。
(6) 关联关系:监控功能、临时节点、流量分发器、getChildren()
Sever1与zookeeper连接,建立临时节点node1,node1会存储server1的元数据,包括IP地址,其它网络信息等,这个时候就知道了node1和server1的映射关系,当然这个架构了不止一个server1,所以也就不止一组node和server的映射关系,流量分发器就可以通过这个映射关系,知道server1的状态,从而判定给不给它流量。
(7) 风险
客户端有可能看不到所有数据变化。
多个事件的监控,有可能只会触发一次;例如,一个客户端设置了关于某个数据点exists和getData的监控,则当该数据被删除的时候,只会触发“文件被删除”的通知。
客户端网络中断的过程的无法收到监控的窗口时间,要由模块进行容错设计。
5 权限控制
(1) 数据访问,每个节点上的“访问控制链”(ACL)保存了各客户端对于该节点的访问权限
(2) zookeeper本身提供了ACL机制,用一个三元组来定义客户端的访问权限,表示为scheme:id:permissions,第一个字段表示采用哪一种模式,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等)
(3) 模式
World:它下面只有一个id,叫anyone,
world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的;
Auth:已经被认证的用户;
Digest(访客):通过username:password字符串的MD5编码认证用户;
Host(域名):匹配主机后缀,如host:corp.com匹配host:host1.corp.com,
host:host2.corp.com,但不能匹配host:host1.store.com;
IP:通过IP识别用户,表达式格式为addr/bits;
(4) 权限:
create,read,write,delete,admin
(5) 例如:(ip:192.168.0.0/16,READ)表示IP地址以192.168开头的主机有该数据节点的读权限。
6 应用场景
6.1 配置管理
全局系统配置,统一容错,是数据发布与订阅的配置中心,发布者将数据发布到ZK节点上,供订阅者动态获取数据,使用永久节点,getData来监控配置是否发生变化,实现配置信息的集中或管理和动态更新,例如全局的配置信息,服务式服务框架的服务地址列表等场景。
6.2 集群管理
(1) 对服务器状态监控:使用临时节点类型,所有的servergetChildren(String path,boolean watch)和exists方法,某一个服务器下线,节点自动删除;
(2) 选主节点:使用临时顺序节点类型,选择当前最小编号的Server为Master,最小编号的Server死去,由于是EPHEMERAL节点,死去的Server对应的节点也被删除,所以当前的节点列表中又出现一个最小编号的节点。
(3) 分布式lock:这个主要得益于zookeeper为我们保证了数据的强一致性。锁服务是用来控制不同节点协调工作,可以分为两类,一个是保持独占,另一个是控制时序,可使用临时顺序节点。
6.3 队列管理
(1) 同步队列:所有成员聚齐后才可以使用
(2) FIFO队列:生产者和消费者模式
创建sequential类型的子目录/queue_i,这样就能保证所有成员加入队列时都是有编号的,出队列时通过getChildren()方法可以返回当前所有的队列中的元素,然后消费其中最小的一个,这样就能保证FIFO文章来源:https://www.toymoban.com/news/detail-462577.html
(公司应用最多是配置管理和对服务器状态监控)文章来源地址https://www.toymoban.com/news/detail-462577.html
到了这里,关于Zookeeper学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!