前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zookeeper集群为何是奇数

Zookeeper集群为何是奇数

作者头像
大数据真好玩
修改2019-08-27 14:11:01
7110
修改2019-08-27 14:11:01
举报
文章被收录于专栏:暴走大数据暴走大数据

1. 简介

在 ZooKeeper 集群中,会有三种角色,leader、 follower、 observer 分别对应着总统、议员、观察者。

半数以上投票通过:客户端的增删改操作无论访问到了哪台 ZooKeeper 服务器,最终都会被转发给 leader 服务器,再由 leader 服务器分给 ZooKeeper 集群中所有 follower 服务器去投票(投票指的是在内存中做增删改操作),半数投票通过就被认为操作可执行(commit),否则不可执行。

observer 观察者服务器是针对于查询操作做负载的,observer 与 follower 服务器最大的不同在于 observer 没有投票权,在客户端发起的增删改操中,leader 服务器是不会把消息传递给 observer 服务器让其投票的。但是查询操作跟 follower 一样,客户端的查询到了 observer 服务器节点,observer 服务器去访问 leader 服务器取最新的数据然后返回给客户端。其中 observer 并不计算在投票机器数目中,半数工作不包括 observer 机器数。

2. 容错

由于在增删改操作中需要半数以上服务器通过,来分析以下情况:

  • 2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉。
  • 3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉。
  • 4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉。
  • 5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉。
  • 6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉。

通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2 台服务器挂掉。但是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5台服务器成本,这是由于半数以上投票通过决定的。

3. 防脑裂

一个 ZooKeeper 集群中,可以有多个 follower、observer 服务器,但是必需只能有一个 leader 服务器。如果 leader 服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的leader服务器。

集群互不通讯情况:

  • 一个集群3台服务器,全部运行正常,但是其中1台裂开了,和另外2台无法通讯。3台机器里面2台正常运行过半票可以选出一个leader。
  • 一个集群4台服务器,全部运行正常,但是其中2台裂开了,和另外2台无法通讯。4台机器里面2台正常工作没有过半票以上达到3,无法选出 leader 正常运行。
  • 一个集群5台服务器,全部运行正常,但是其中2台裂开了,和另外3台无法通讯。5台机器里面3台正常运行过半票可以选出一个 leader。
  • 一个集群6台服务器,全部运行正常,但是其中3台裂开了,和另外3台无法通讯。6台机器里面3台正常工作没有过半票以上达到4,无法选出 leader 正常运行。

通可以上分析可以看出,为什么 ZooKeeper 集群数量总是单出现,主要原因还是在于防脑裂。如果出现脑裂,ZooKeeper 集群就无法正常运行了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据真好玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 容错
  • 3. 防脑裂
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档