zookeeper的一些定义描述

1.为什么zookeeper的集群大多数是部署的基数台服务器?
zookeeper集群有这样一个特性,当集群中有几台服务器宕机后,剩下的服务器必须大于宕机的服务器数量,这样真个集群才能接着对外使用,例如你的集群是三台服务器搭建的,如果宕机了一台,剩下两台还能接着使用,如果宕机两台的话,那这个集群也就不能用了,假如是四台服务器,宕机一台,还能用,宕机两台的话,整个集群也就不能用了,也就是说,假如集群是n台服务器搭建的,当发生宕机事件后,剩下的服务器数量必须大于n/2,才能继续使用,所以,当集群分别是三台和四台服务器搭建时,都宕机两台,集群都不能使用,使用基数台服务器搭建,也就是为了节省成本。
2.zookeeper的脑裂问题
比如当你的cluster里面有两个节点时,leader就会从这两个中产生,当他们之间的通信没有问题时,就会达成共识,但是当他们的通信出现问题时,这两个节点就会认为现在没有master,所以就会把自己当成master,此时,在一个节点中就会有两个人master。再来说,在zookeeper中是根据什么来判断一个节点是否死亡down掉了呢,在分布式系统中都是用监控者来判断的,但是有时监控者也很难判断节点的状态,唯一可靠地途径就是通过心跳,在zookeeper中也是通过心跳来判断节点是否依然活着;使用ZooKeeper来做master HA基本都是同样的方式,每个节点都尝试注册一个象征master的临时节点其他没有注册成功的则成为slaver,
并且通过watch机制监控着master所创建的临时节点,Zookeeper通过内部心跳机制来确定master的状态,
一旦master出现意外Zookeeper能很快获悉并且通知其他的slaver,其他slaver在之后作出相关反应。这样就完成了一个切换。
这种模式也是比较通用的模式,基本大部分都是这样实现的,但是这里面有个很严重的问题,
如果注意不到会导致短暂的时间内系统出现脑裂,因为心跳出现超时可能是master挂了,
但是也可能是master,zookeeper之间网络出现了问题,也同样可能导致。这种情况就是假死,
master并未死掉,但是与ZooKeeper之间的网络出现问题导致Zookeeper认为其挂掉了然后通知其他节点进行切换,
这样slaver中就有一个成为了master,但是原本的master并未死掉,这时候client也获得master切换的消息,
但是仍然会有一些延时,zookeeper需要通讯需要一个一个通知,这时候整个系统就很混乱可能有一部分
client已经通知到了连接到新的master上去了,有的client仍然连接在老的master上如果同时有两个client
需要对master的同一个数据更新并且刚好这两个client此刻分别连接在新老的master上,就会出现很严重问题。
最后总结一下:
假死的定义:由于心跳超时,认为master死了,但其实master还活着,即为假死。
脑裂:由于假死情况会发起新的master选举,导致出现两个新旧master,有的客户端连接的是旧的master,有的连接的时新的master,这就是脑裂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值