zookeepeer选举master

来源:互联网 发布:react java 混合 编辑:程序博客网 时间:2024/05/05 19:57

zookeepeer选举master

分布式最核心的功能就是将具有独立运算能力的系统单元部署到不同的机器上,构成完成的分布式系统,而与此同时,也需要在这些不同机器上知道一个老大,在计算机中称之为master

在爬虫系统中,往往需要一个中心系统来控制爬虫任务的调度,分配,根据每个worker上的负载情况的,动态的进行负载均衡,在此之前,是通过固定配置的方式,配置出那一台机器属于是master,但这样的话就容易发生风险,一旦master挂了,那么爬虫系统地调度,负载往往就会出现一些问题,通过zookeeper选举master的方式,可以在检测到master挂了以后,迅速的用余下的机器选举出一台新的机器承载master的责任,从而可以保证服务不会挂掉。

选举方式一 基于数据库主键

鉴于master的唯一性,可以使用数据库主键的方式来选举出一个master,所有机器想master中插入一条形同主键的数据,这样的话只有插入成功的那一台机器可以作为选举成功的master,这样的方式可以选举出一个master。
这个方案可以选举出一个master,但是如果在master挂掉的情况下,没有办法及时的通知其他机器进行重新选举,数据库不具备这个机制,所有不是一种非常好的方式.

选举方式二 基于zookeeper

zookeeper的节点具有排他性,同一时间,只有一台机器可以创建成功一个(临时)节点,通过这个就也可以选举出一台master出来,比如,所有的机器同时尝试创建 /crawler/createmaster 节点,如果创建成功,则吧自己的ip信息写入到这个节点中,如果创建失败,则获取这个节点的内容,从而知道那台机器承担master的功能。
所有机器添加对该节点的监听。
一旦master机器挂掉以后,该节点消失,通过wather机制,监听到节点消失的时间,这时所有的机器再次重新发起选举,再选出来新的master。

问题

这个地方有个问题,如果同时之前的master因为网络问题还是其他问题再次复活了并且还以为自己是master该怎么办,这个地方的处理是master也需要定时从节点获取master信息,同比对自身情况的,如果身份不一致,则以节点上的信息为主,保证数据一致性。

0 0
原创粉丝点击