基于Zookeeper实现高可用架构
创始人
2024-02-11 16:03:58
0

Zookeeper高可用相关特性

Zookeeper介绍

在这里插入图片描述

ZooKeeper is a distributed, open-source coordination service for distributed applications

It exposes a simple set of primitives that distributed applications can build upon to implement higher level services for synchronization, configuration maintenance, and groups and naming

Zookeeper技术本质

在这里插入图片描述

At the heart of ZooKeeper is an atomic messaging system that keeps all of the servers in sync

FLP proved that consensus cannot be achieved in asynchronous distributed systems if failures are possible. To ensure we achieve consensus in the presence of failures we use timeouts

ZAB is not Paxos, it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication

Zookeeper应用

在这里插入图片描述

Zookeeper数据模型

在这里插入图片描述

Watches

Clients can set watches on znodes. Changes to that znode trigger the watch and then clear the watch. When a watch triggers,ZooKeeper sends the client a notification

Data Access

The data stored at each znode in a namespace is read and written atomically

Ephemeral Nodes

These znodes exists as long as the session that created the znode is active

Sequence Nodes

When creating a znode you can also request that ZooKeeper append a monotonicly increasing counter to the end of path.This counter is unique to the parent znode

Zookeeper设计步骤

在这里插入图片描述

  1. 设计path。/app/p_1
  2. 选择znode类型。Ephemeral(临时)、Sequence(有序)、Normal
  3. 设计znode数据。节点里面存放什么数据
  4. 设计Watch。client关注什么事件,事件发生后如何处理

Zookeeper实现主备切换

主备切换基本架构

在这里插入图片描述

主备切换Zookeeper方案

设计Path

由于只有2个角色,因此直接设置两个 znode 即可:master、slave

选择节点类型

当 master 节点挂掉的时候,原来的 slave 升级为 master 节点,因此用 ephemeral 类型的 znode

设计节点数据

由于 slave 成为 master 后,会成为新的复制源,可能出现数据冲突,因此 slave 成为 master 后,节点写入成为 master 的时间,这样方便人工修复冲突数据

设计Watch

  1. 节点启动的时候,尝试创建 master znode,创建成功则切换为master,否则创建 slave znode,成为 slave
  2. 如果 slave 节点收到 master znode 删除的事件,就自己去尝试创建 master znode,创建成功,则自己成为 master,删除自己创建的slave znode

Zookeeper实现集群选举

方案1-最小节点获胜

在这里插入图片描述

设计Path

集群共用父节点 parent znode,集群中的每个节点在 parent 目录下创建自己的 znode

选择节点类型

当 Leader 节点挂掉的时候,持有最小编号 znode 的集群节点成为新的 Leader,因此用ephemeral_sequential 类型 znode

设计节点数据

可以根据业务需要灵活写入各种数据

设计Watch

  1. 节点启动或者重连后,在 parent 目录下创建自己的 ephemeral_sequntial znode
  2. 创建成功后扫描 parent 目录下所有 znode,如果自己的 znode 编号是最小的,则成为 Leader,否则 watch parent 目录
  3. 当 parent 目录有节点删除的时候,首先判断其是否是 Leader 节点,然后再看其编号是否正好比自己小1,如果是则自己成为 Leader,如果不是继续 watch

方案2-抢建唯一节点

在这里插入图片描述

设计Path

集群所有节点只有一个 leader znode,本质上就是一个分布式锁

选择节点类型

当 Leader 节点挂掉的时候,剩余节点都来创建 leader znode,看谁能最终抢到 leader znode,因此用ephemeral 类型

设计节点数据

可以根据业务需要灵活写入各种数据

设计Watch

  1. 节点启动或者重连后,尝试创建 leader znode,尝试失败则 watch leader znode
  2. 当收到 leader znode 被删除的事件通知后,再次尝试创建 leader znode,尝试成功则成为 leader ,失败则 watch leader znode

方案3-法官判决

在这里插入图片描述

设计Path

集群共用父节点 parent znode,集群中的每个节点在 parent 目录下创建自己的 znode

选择节点类型

当 Leader 节点挂掉的时候,持有最小编号 znode 的集群节点成为“法官” ,因此用 ephemeral_sequential 类型 znode

设计节点数据

可以根据业务需要灵活写入各种数据,例如写入当前存储的最新的数据对应的事务 ID

节点设计

  1. parent znode:图中的 operating,代表一个集群,选举结果写入到这里,例如:leader=server6
  2. 法官 znode:图中的橙色 znode,最小的 znode,持有这个 znode 的节点负责选举算法/规则
  3. 成员 znode:图中的绿色 znode,每个集群节点对应一个,在选举期间将选举需要的信息写入到自己的 znode。例如:Redis 存储集群,各个 slave 节点可以将自己存储的数据最新的 trxID 写入到 znode,然后法官节点将 trxID 最大的节点选为新的 Leader
  4. Leader znode:图中的深蓝色 znode,集群里面只有一个,由法官选出来

设计Watch

  1. 节点启动或者重连后,在 parent 目录下创建自己的 ephemeral_sequntial znode,并 watch parent 目录
  2. 当 parent 目录有节点删除的时候,所有节点更新自己的 znode 里面和选举相关的数据
  3. “法官”节点读取所有 znode 的数据,根据规则或者算法选举新的 Leader,将选举结果写入parent znode
  4. 所有节点 watch parent znode,收到变更通知的时候读取 parent znode 的数据,发现是自己则成为 Leader

Zookeeper集群模式对比

实现复杂度选举灵活性应用场景
最小节点获胜计算集群
抢建唯一节点计算集群
法官判决高,可以设计满足业务需求的复杂选举算法和规则存储集群

相关内容

热门资讯

关税战为何适得其反?听完意大利...   意大利锡耶纳大学经济学教授保罗·宾7月29日在《中国日报》撰文,以中美欧葡萄酒贸易为例阐述加征关...
石榴花开北疆红·籽籽同心家国情...   中国网讯 7月29日,蓝天白云,碧草如茵,牛羊成群,“守望草原巡防队”的队旗猎猎作响,随风飘扬。...
抗战影像记忆|“失联”88年的...   “伟大的卢沟桥也许将成为伟大的民族解放战争的发祥地了!”  1937年8月1日,《世界知识》杂志...
闻“风”而动!浙江各地严阵以待...   据浙江天气,台风“竹节草”将以每小时10-15公里的速度向西北方向移动,强度变化不大;将于30日...
北京强降雨已造成30人死亡 北...   中央气象台7月29日6时继续发布  暴雨橙色预警和强对流天气黄色预警  7月28日晚  国家防总...
老人自带毯子躺地铁车厢睡觉 武...   7月28日,有网友发布视频,地铁四号线上一位老人铺着毯子在地铁车厢内睡觉,手机还开着外放,对此,...
罗大美遇害案29日一审二次开庭   罗大美遇害案今日(29日)一审二次开庭,罗大美妹妹:他们不承认故意杀人和抢劫,庭审外采访间隙,大...
造谣“沧源飞往昆明飞机失事”,...   近日,云南临沧网警工作中发现,一网民在网络平台发布一段飞机冲出跑道、起落架陷入跑道外草地的视频,...
三个小孩卖冰棒遭遇“霸王餐” ...   三个小孩卖冰棒遭遇“霸王餐”,顾客吃完仅剩2支冰棍称要第3支才付钱。7月29日,视频拍摄者谢先生...