zookeeper
在分布式环境中,为了解决多个进程的同步控制,让进程有序的访问某种资源,防止造成‘脏数据’的后果,我们需要分布式协调技术控制,而针对分布式协调技术核心就是分布式锁的实现,分布式锁的实现的其中之一就是zookeeper。
zookeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务: 分布式锁服务
,后来开发者在分布式锁的基础上摸索出其他使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。
zookeeper应用
分布式锁应用场景
在分布式锁服务中,有一种最典型应用场景,就是通过对集群进行Master选举,来解决分布式系统中的单点故,障通常分布式系统采用主从模式,就是一个主控机连接多个处理节点,主节点负责分发任务,从节点负责处理任务,当我们的主节点发生故障时,整个系统就瘫痪了,这就是常说的单点故障。
传统解决方案
传统方式是采用一个备用节点,这个备用节点定期给主节点发送ping包,主节点收到ping包以后向备用节点发送ack,当备用节点收到回复的时候就会认为当前主节点还活着,让他继续提供服务。
当主节点挂了,这时候备用节点收不到主节点的回复,然后认为主节点挂啦,备节点接替成为主节点。但是这种情况下难免出现脑裂问题,网络往往是不可信的,所以就会出现双主的问题,从而产生脏数据。
为了防止出现这样的情况,我们要引入爆头机制,即是进行更换主节点的时候,要彻底杀死原主节点。
zookpeer解决方案
在引入了Zookeeper以后我们启动了两个主节点,”主节点-A”和”主节点-B”他们启动以后,都向ZooKeeper去注册一个节点。我们 假设”主节点-A”锁注册地节点是”master-00001”,”主节点-B”注册的节点是”master-00002”,注册完以后进行选举,编号最 小的节点将在选举中获胜获得锁成为主节点,也就是我们的”主节点-A”将会获得锁成为主节点,然后”主节点-B”将被阻塞成为一个备用节点。那么,通过这 种方式就完成了对两个Master进程的调度。
如果主节点A挂了,这时候所注册的节点将自动被删除,zookeeper会自动感知节点变化,然后再次发出选举,这时主节点就会发生改变。
总结: zookeeper虽然不能避免网络不稳定导致的问题,但是却可以保障在整个分布式系统中存在唯一的master节点