1 |  |
---|
123456789101112131415161718192021222324252627 |  > 在分布式系统设计中一个得到广泛应用的架构:一个主-从(master-worker)架构,该系统中遵循这个架构的一个重要例子是HBase——一个Google的数据存储系统(BigTable)模型的实现,在最高层,主节点服务器(HMaster)负责跟踪区域服务器(HRegionServer)是否可用,并分派区域到服务器。 * master-worker模式面临的问题 * 主节点崩溃 > 如果主节点发送错误并失效,系统将无法分配新的任务或重新分配已失败的任务。这就需要重选备份主节点接管主要主节点的角色,进行故障转移,数据恢复等等,更糟的是,如果一些从节点无法与主要主节点通信,如由于网络分区(network partition)错误导致,这些从节点可能会停止与主要主节点的通信,而与第二个主要主节点建立主-从关系。针对这个场景中导致的问题,我们一般称之为脑裂(split-brain):系统中两个或者多个部分开始独立工作,导致整体行为不一致性。我们需要找出一种方法来处理主节点失效的情况,关键是我们需要避免发生脑裂的情况。 * 从节点崩溃 > 如果从节点崩溃,已分配的任务将无法完成。如果从节点崩溃了,所有已派发给这个从节点且尚未完成的任务需要重新派发。其中首要需求是让主节点具有检测从节点的崩溃的能力。主节点必须能够检测到从节点的崩溃,并确定哪些从节点是否有效以便派发崩溃节点的任务。一个从节点崩溃时,从节点也许执行了部分任务,也许全部执行完,但没有报告结果。如果整个运算过程产生了其他作用,我们还有必要执行某些恢复过程来清除之前的状态。 * 通信故障 > 如果主节点和从节点之间无法进行信息交换,从节点将无法得知新任务分配给它。如果一个从节点与主节点的网络连接断开,比如网络分区(network partition)导致,重新分配一个任务可能会导致两个从节点执行相同的任务。如果一个任务允许多次执行,我们在进行任务再分配时可以不用验证第一个从节点是否完成了该任务。如果一个任务不允许,那么我们的应用需要适应多个从节点执行相同任务的可能性。 * 主从模式总结 * 主节点选举 > 这是关键的一步,使得主节点可以给从节点分配任务。 * 崩溃检测 > 主节点必须具有检测从节点崩溃或失去连接的能力。 * 组成员关系管理 > 主节点必须具有知道哪一个从节点可以执行任务的能力。 * 元数据管理 > 主节点和从节点必须具有通过某种可靠的方式来保存分配状态和执行状态的能力。 * 期望  > 理想的方式是,以上每一个任务都需要通过原语(内核或微核提供核外调用的过程或函数称为原语(primitive))的方式暴露给应用,对开发者完全隐藏实现细节。ZooKeeper提供了实现这些原语的关键机制,因此,开发者可以通过这些实现一个最适合他们需求、更加关注应用逻辑的分布式应用。 |
---|
echo mntr | nc localhost 2181
.
(tickTime也是一个配置项。是Server内部控制时间逻辑的最小时间单位) 如果客户端发来的sessionTimeout超过min-max这个范围,server会自动截取为min或max.
一旦客户端开始创建Zookeeper对象,那么客户端状态就会变成CONNECTING状态,同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED,通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重新连上服务端后,状态又变为CONNECTED,在通常情况下,客户端的状态总是介于CONNECTING和CONNECTED之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态。
分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。
这三个基本需求,最多只能同时满足其中的两项,一致性和可用性不可能同时成立,因为可能通信失败(即出现分区容错)。