首页 > 大数据 > 数据挖掘 > 好程序员大数据技术分享Zookeeper集群管理与选举
大数据技术的学习,逐渐成为很多程序员的必修课,同时也出现了很多技术论坛供大家探讨,所以今天 好程序员分享大数据技术 Zookeeper 集群管理与选举,大家可以一起学习 !
1. 集群机器监控
这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段 ( 比如 ping) 定时检测每个机器,或者每个机器自己定时向监控系统汇报“我还活着”。 这种做法可行,但是存在两个比较明显的问题:
集群中机器有变动的时候,牵连修改的东西比较多。
有一定的延时。
利用 ZooKeeper 有两个特性,就可以实时另一种集群机器存活性监控系统:
客户端在节点 x 上注册一个 Watcher ,那么如果 x? 的子节点变化了,会通知该客户端。
创建 EPHEMERAL 类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。
例如,监控系统在 /clusterServers 节点上注册一个 Watcher ,以后每动态加机器,那么就往 /clusterServers 下创建一个 EPHEMERAL 类型的节点: /clusterServers/{hostname}. 这样,监控系统就能够实时知道机器的增减情况,至于后续处理就是监控系统的业务了。
2.Master 选举
在分布式环境中,相同的业务应用分布在不同的机器上,有些业务逻辑 ( 例如一些耗时的计算,网络 I/O 处理 ) ,往往只需要让整个集群中的某一台机器进行执行,其余机器可以共享这个结果,这样可以大大减少重复劳动,提高性能,于是这个 master 选举便是这种场景下的碰到的主要问题。
利用 ZooKeeper 的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,终究一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群选取了。
另外,这种场景演化一下,就是动态 Master 选举。这就要用到 ?EPHEMERAL_SEQUENTIAL 类型节点的特性了。
上文中提到,所有客户端创建请求,最终只有一个能够创建成功。在这里稍微变化下,就是允许所有请求都能够创建成功,但是得有个创建顺序,于是所有的请求最终在 ZK 上创建结果的一种可能情况是这样:
/currentMaster/{sessionId}-1 ,?/currentMaster/{sessionId}-2 ,?/currentMaster/{sessionId}-3 … .. 每次选取序列号最小的那个机器作为 Master ,如果这个机器挂了,由于他创建的节点会马上小时,那么之后最小的那个机器就是 Master 了。
3. 搜索系统
在搜索系统中,如果集群中每个机器都生成一份全量索引,不仅耗时,而且不能保证彼此之间索引数据一致。因此让集群中的 Master 来进行全量索引的生成,然后同步到集群中其它机器。另外, Master 选举的容灾措施是,可以随时进行手动指定 master ,就是说应用在 zk 在无法获取 master 信息时,可以通过比如 http 方式,向一个地方获取 master 。
在 Hbase 中,也是使用 ZooKeeper 来实现动态 HMaster 的选举。在 Hbase 实现中,会在 ZK 上存储一些 ROOT 表的地址和 HMaster 的地址, HRegionServer 也会把自己以临时节点 (Ephemeral) 的方式注册到 Zookeeper 中,使得 HMaster 可以随时感知到各个 HRegionServer 的存活状态,同时,一旦 HMaster 出现问题,会重新选举出一个 HMaster 来运行,从而避免了 HMaster 的单点问题
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2645747/ ,如需转载,请注明出处,否则将追究法律责任。