zookeeper 分布式协调技术主要解决分布式环境当中多个进程之间的同步控制,放他们访问某种临界资源防止造成脏数据的后果。
分布式系统怎样对进程进行调度?
当第一台机器挂载一个资源,然后这三个物理分布进程都进行竞争资源,但不希望他们同事访问,这时就要一个协调器,让他们有序访问这个资源。这时我们想到了锁机制,在分布式环境中称为分布式锁。
分布式锁实现
zookeeper 是一种分布式应用所涉及的高可用、高性能且一致的开源协调服务,它提供基本服务:分布式服务,后来开发者在分布式锁的基础上使用zookeeper进行一些配置维护、组服务、分布式消息队列、分布式通知/协调等。
zk不会因为一个节点错误而奔溃,zk在一致性、可用性、容错性等方面都很成功,主要它采用zab协议。
zk数据模型:采用了树型层次结构,每个节点被称为Znode。和文件系统目录树一致。但也有不同之处
1)引用方式:通过路径引用
2)Znode结构 每个节点包括3部分 stat状态信息,data与znode关联的数据 ,children该Znode下的子节点
3)数据访问 节点上存储的数据要被原子性的操作
4)节点类型: 临时节点和永久节点,临时节点依赖创建的会话。一旦结束临时节点会被自动删除。
5)顺序节点
6)观察 ,客户端可在节点上设置watch监视器。当节点发生改变,watch会被触发。
zookeeper应用举例
分布式锁应用场景
单节点故障:通常分布式采取主从模式,一个主控机连接多个处理节点,主节点分发任务,从节点负责处理任务,当主节点发生故障,整个系统瘫痪。
传统解决方案:采用备用节点,这个备用节点定期给主节点发送ping包,主节点收到后会向备用节点发送回复ack,当备用节点收到会任务当前主节点还存活,让他继续提供服务。当主节点挂了,备用几点收不到回复,备用节点会替代成为主节点。但如果是网络问题,主节点没有挂,这样备用节点会认为主节点挂了然后备用节点将它的master实例启动,这样分布式系统存在双master。这样从节点一部分汇报主节点,一部分汇报备用节点。服务出现混乱。为防止这种情况,引入了zookeeper。虽不能保证网络故障,但保证每一时刻只有一个zookeeper.
zookeeper解决方案:我们启动两个主节点,A和B都向zookeeper注册一个节点。注册完后需要进行选举。假设A节点获胜进行任务分配,如果节点A挂了,它锁注册的节点会被自动删除,zk感知节点的变化,然后再次发出选举,这是B获胜替代了节点A,并进行任务分发。zookeeper保证主节点随时只有一个。
网友评论