Java for You 架构设计 5.5 分布式一致性ZooKeeper

5.5 分布式一致性ZooKeeper

分布式系统脑裂

在一个分布式系统中,不同服务器获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,称作分布式系统脑裂。

数据库主主备份

zooKeeper 保证多台服务器数据存储的一致性。

zooKeeper 作为管理中心,对故障服务器做仲裁。

屏幕快照 2020-11-14 下午8.21.28.png

分布式一致性算法 Paxos

屏幕快照 2020-11-14 下午9.47.54.png

三个角色

  1. Proposer:提交提案。
  2. Acceptor:接受提案。
  3. Learner:Acceptor 超过半数,Learner 就会接受这个提案。

​

三个阶段

屏幕快照 2020-11-14 下午9.54.04.png

  • 第一阶段:Prepare 阶段。Proposer 向 Acceptors 发出 Prepare 请求,Acceptors 针对收到的 Prepare 请求进行 Promise 承诺。
  • 第二阶段:Accept 阶段。Proposer 收到多数 Acceptors 承诺的 Promise 后,向 Acceptors 发出 Propose 请求,Acceptors 针对收到的 Propose 请求进行 Accept 处理。
  • 第三阶段:Learn 阶段。Proposer 在收到多数 Acceptors 的 Accept 之后,标志着本次 Accept 成功,决议形成,将形成的决议发送给所有 Learners。

唯一性

Proposer 生成全局唯一且递增的 Proposal ID(可使用时间戳加 ServerID),向所有 Acceptors 发送 Prepare 请求,这里无需携带提案内容,只携带 Proposal ID 即可。

Acceptors 收到 Prepare 和 Propose 请求后

  1. 不再接受 Proposal ID 小于等于当前请求的 Prepare 请求。
  2. 不再接受 Proposal ID 小于当前请求的 Propose 请求。

ZooKeeper 架构

屏幕快照 2020-11-14 下午10.01.05.png

Zab 协议

客户端发起请求,会走到 leader。leader 向 follower 发起 Propose,如果返回 ack,说明状态正常。

屏幕快照 2020-11-14 下午10.02.22.png

屏幕快照 2020-11-14 下午10.03.37.png

Zookeeper 的树状记录结构

屏幕快照 2020-11-14 下午10.07.30.png

Zookeeper API

配置管理

Administrator

• setData(“/config/param1”, "value”,-1)

Consumer

• getData("/config/param1", true)

屏幕快照 2020-11-14 下午10.09.24.png

选 master

  1. getdata(“/servers/leader”, true)
  2. if successful follow the leader described in the data and exit
  3. create(“/servers/leader”, hostname, EPHEMERAL)
  4. if successful lead and exit
  5. goto step 1 

屏幕快照 2020-11-14 下午10.10.48.png

选 master(Python)

屏幕快照 2020-11-14 下午10.13.16.png

集群管理(负载均衡与失效转移)

屏幕快照 2020-11-14 下午10.17.28.png

Monitoring process: 

  1. Watch on /nodes
  2. On watch trigger do getChildren(/nodes, true) 3. Track which nodes have gone away 

​

Each Node: 

  1. Create /nodes/node-${i} as ephemeral nodes
  2. Keep updating /nodes/node-${i} periodically for node status changes (status updates could be load/iostat/cpu/others)

Zookeeper 性能

屏幕快照 2020-11-14 下午10.19.37.png

  • 读比写的吞吐能力更强;
  • 3 servers 比 13 server 初期吞吐量更低。
本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/architecture/3690.html

作者: 蜗牛

5.4 分布式数据库架构

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部