标签:大数 初始 实时 更改 需要 临时 读取 单点故障 自带
通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中涉及的核心功能,比如 数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列 等功能
当某些数据由几个机器共享,且这些信息经常变化数据量还小的时候,这些数据就适合存储到ZK中
基于ZooKeeper的分布式锁一般有如下两种:
多个服务将各自信息(IP:port)注册到ZooKeeper中,客户端获取中间件地址集合,从集合中随机选一个服务执行任务
ZooKeeper负载均衡和Nginx负载均衡区别:
- ZooKeeper不存在单点问题,zab机制保证单点故障可重新选举一个leader只负责服务的注册与发现,不负责转发,减少一次数据交换(消费方与服务方直接通信),需要自己实现相应的负载均衡算法。
- Nginx存在单点问题,单点负载高数据量大,需要通过 KeepAlived + LVS 备机实现高可用。每次负载,都充当一次中间人转发角色,增加网络负载量(消费方与服务方间接通信),自带负载均衡算法。
命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk 创建一个全局唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。
大数据体系下的大部分集群服务好像都通过ZooKeeper管理的,主要关注的是机器的动态上下线跟Leader选举。
- 动态上下线:比如在zookeeper服务器端有一个znode叫 /Configuration,那么集群中每一个机器启动的时候都去这个节点下创建一个EPHEMERAL类型的节点,比如server1 创建 /Configuration/Server1,server2创建/Configuration /Server1,然后Server1和Server2都watch /Configuration 这个父节点,那么也就是这个父节点下数据或者子节点变化都会通知到该节点进行watch的客户端。
- Leader选举:
- 利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /Master 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群选举了。
- 就是动态Master选举。这就要用到 EPHEMERAL_SEQUENTIAL类型节点的特性了,这样每个节点会自动被编号。允许所有请求都能够创建成功,但是得有个创建顺序,每次选取序列号最小的那个机器作为Master 。
标签:大数 初始 实时 更改 需要 临时 读取 单点故障 自带
原文地址:https://www.cnblogs.com/z-dk/p/14674358.html