zookeeper选主机制

Zookeeper

在这里插入图片描述

Zookeeper怎么帮自己选主

帮自己选组是通过投票的,当票数过半的时候,这台服务器就会成为主;

如果是多台服务器一起启动的话,服务器id(myid)最大的就是主;

如果是一台一台服务器启动,当启动到第二台服务器的时候,第二台服务器就是主,不管后面启动多少台;

如果遇到了网络分区怎么办

如果选主的时候活锁了怎么办

使用有主(总统)模型解决

无主模型:

  1. 所有的服务器都是公平的,都可以发出提议
  2. 整个集群不能保证所有的服务器的记事本上的编号总是相同的,也就是事务的id
  3. 服务器如果宕机,重启后同步数据需要向多个节点进行同步
  4. 活锁问题

有主模型:

  1. 所有的事务必须有总统提出
  2. 集群同一时间只能有一个总统
  3. 总统节点的数据肯定是最全的
  4. 新的主产生后将自己的数据同步给其他服务器

有主模型

主怎么来的

帮自己选组是通过投票的,当票数过半的时候,这台服务器就会成为主;

如果是多台服务器一起启动的话,服务器id(myid)最大的就是主;

如果是一台一台服务器启动,当启动到第二台服务器的时候,第二台服务器就是主,不管后面启动多少台;

主宕机了怎么办

如果主宕机了,剩下的服务器会比较他们自己的事务id,看看是不是最新的事务id,然后选取满足条件的myid最大的服务器作为主。

如果是其他的follower服务器宕机了,就去找主同步数据

服务器太多了怎么办

集群初始化

  1. 加入投票机制–过半原则
  2. 无脑投票给myid最大的服务器–为了快速选主
  3. 加入主朝代标记–解决脑裂(多主)问题

多主问题:当主(朝代1)的服务器网络波动的时候,选出来了新的主(朝代2),当原来朝代1的主恢复网络之后,发现自己的朝代现在的主的朝代低,就会成为follewer ,同步数据。

额外总结:集群环境推荐使用奇数台服务器

Zookeeper存储模型

在这里插入图片描述

  • zookeeper是一个树状结构,维护一个小型的数据节点znode
  • 数据以keyvalue的方式存在,目录是数据的key
  • 所有的数据访问都必须以绝对路径的方式呈现

分类:

  • 持久化节点(PERSISTENT)
    默认创建的就是持久化节点
  • 临时节点(Ephemral)
    只要创建节点的会话有效,节点就不会失效
    可以被所有的客户端所查看
    事务编号和临时节点编号是一致的
    create -e
    一旦会话结束,临时节点也会被自动删除,一般这个功能用于判断节点和服务器是否保持连接
  • 序列化节点(Sequential)
    在名字的后面添加一个序列号(有序)
    create -s

ZooKeeper监听机制

语法格式: addWatch [-m mode] path # optional mode is one of [PERSISTENT,PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE 。

addWatch 的作用是针对指定节点添加事件监听,支持两种模式:

​ PERSISTENT :持久化订阅,针对当前节点的修改和删除事件,以及当前节点的子节点的新增和删除事件。

​ PERSISTENT_RECURSIVE :持久化递归订阅,在 PERSISTENT 的基础上,增加了子节点修改的事件触发,以及子节点的子节点的数据变化都会触发相关事件(满足递归订阅特性)。默认模式。

Zookeeper怎么帮别人选主

利用了zookeeper的分布式锁,谁跑得快 谁就是主

我们知道Zookeeper的临时节点可以用来实现分布式锁,多个客户端分别创建一个节点,创建成功即成功获取到了锁,创建失败的客户端们则会监听这个临时节点,获取锁的客户端释放锁(删除临时节点)或 与ZK服务端断开连接后(ZK会删除临时节点),其他客户端会收到Watch发来的通知,兄弟们,它释放锁了,你们过来抢占锁吧。这个临时节点只会有一个,当服务器断开,自动失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值