ZooKeeper理解(1)
zk是一个分布式协同系统。可以存储并协同一些重要的数据,但是不适用于数据量大的存储,毕竟不是数据库服务。
典型的应用场景有
- 配置中心
- 注册中心
- 分布式锁
- 主从选举
zk实现master-worker协同
master-worker是一种分布式架构,master负责监控worker的状态,并给worker分配任务。kafka,Hbase,HDFS都是采用的此架构。规则如下:
- 任意时刻master只有一个,如果出现多个就是脑裂问题,要避免脑裂。那么master就是单点的。
- 为了保证master的高可用需要有一个备份master,当活跃的master失败后备份的master可用快速启动。
- master要实时监控worker的状态,保证及时收到worker成员变化的通知。如果master收到worker的变化就可以重新进行任务的分配。
zk的master-worker实现
- 选主的流程:假设集群有2个master,一个活跃master1,一个备份master2。在master1行使master的职能之前,要在zk中创建临时节点/master的znode,如果创建成功master1就是active(活跃的),开始行使master的职能。否则,进行backup(备份的)状态。同时master2要watch临时节点/master,如果在master1在运行过程中崩溃或失败,zk会将临时节点/master删除,master2的watch机制会及时发现,则master2在zk中创建临时节点/master变为新的活跃master,行使master的职能。如下图:
- worker的集群加入:worker通过在/workers节点下创建各自的临时节点来加入集群。
- master对worker的监控:active的master通过监控/workers节点下的znode列表来实时获取worker成员的变化。