之前启动的每个服务都有不同的状态,查看信息看到的是角色,zookeeper是典型的主从结构,任意一个都可以做主,但是主只能有一个,这个主就是leader(数据最新最权威,一切数据以它为准)
在3.2之前,所有的服务角色为两种,一种是follower,一种是leader,3。2之后加入新角色observer观察者,paxos算法有一个选举制度,可以认为红色server为议员长,蓝色的server是议员,observer是旁听者,这些服务器问它们要数据其实都知道。
三种角色,老大是选举出来的,没有投票权
follower有投票权

所有的follower选举出来,leader的数据是最权威的,所有服务器,包括observer都从这里领取最新的服务器,从leader同步数据,是放在内存里的,follower和observer都可以收到客户的读和写操作。因为每个服务器都同步leader,所有找数据不用找leader。
但是一旦有写请求,把数据提交给leader,由follower投票过半,就可以进行操作


红色线是选举线,有投票权的才能选举,observer只能同步数据,提交用户的写请求发给leader,所有的节点都可以提供数据的读服务

投票权不宜过大,否则会很慢,zookeeper一般搞个5台就很够用了,observer可以多几台,因为是分担读压力的,这样observer就是做读的分流的


ls可以访问节点,ls2访问节点的详细信息,get获得节点里保留的数据,set设置节点数据,create,来创建节点,delete删除节点

链接2183

链接哪个节点都行,因为分布式程序要求的数据都一致,其实zookeeper也是存数据的,只不过数据按照树形文件系统的方式来存数据,一个树形结构的kv

创建一个路径

这样不加信息等于没创建成功

一定从跟开始,添加一个信息


这是一些元数据信息,czxid是创建事务

ls类似查目录,get就是拿目录节点上保存的信息

set可以修改节点上的信息

在其他节点那上get,信息都一样

创建子路径,下面还是用get,set操作,ls查一下

可以把目录删除

创建几个特殊的东西

这里显示的是ephemeral,短暂的临时的,还是owner,也就是谁创建的退出了就没了

由这个会话的,现在退出


这个sessionid就看到了,没了

现在agent挂了就可以知道,可以让agent不发心跳包了,让agent操作zookeeper,注册一个节点ephemeral 节点,短暂的节点,一旦连接断掉,主节点就知道了少了,我们就可以把计数-1

比如可以类似这样,只要agent消失了,这里也消失了

这样写ip1可能有点麻烦,可以这么写

agent注册,相当于自己来创建,但是现在提示临时节点,不能这么创建

-e,ephemeral 节点消失后,它的子节点是不能有children的,-s 是sequence序列

等于是一个序列的


创建一个序列化的,短暂的,然后退出

到另外一边看一下,之前短暂的agent消失了

之前返回的是7


现在7就没了

再创建一个,就是8了

创建另外的就从头开始,但是回到刚才创建序列的目录,有一个基数。不同节点,基数不同,都有自己重新计数的东西

这样创建是永久的,也就是没有ephemeralowner,也就是永久的节点。-e就是现在的会话值,会话消失了也就没了,-s在当前节点下创建一个节点跟一个序号,序号是自增的意思

一般节点可以是临时的也可以持久的。
sequence是顺序节点


组合出来有4种形式节点


持久的顺序节点,临时的顺序节点

临时节点不允许有子节点

如何知道zookeeper值是哪个,可以在一个t1节点上设置主机名,如果m2链接过去,发现ip是自己,那自己就是老大,m1发现不是自己,就进行等待

只要m1,和m2都登录,可以设置成一个瞬时节点,看到这个节点有值,再次看没有值了,就可以把自己作为老大,一注册信息,agent来看老大是谁就知道了


之前是让agent和m1和m2之间通信,现在可以换成zookeeper,因为配置成集群,高可用是可以保证的。自己写的服务是保证不了的

现在m1和m2谁抢到就是谁当老大,一旦抢到,瞬时节点会保证抢到的信息,其他agent跟它通信,就知道老大是谁了,一旦通信失败,就可以看看是否出问题,还可以做监控和回调,如果瞬时节点\t值发生了改变,zookeeper就可以立马通知agent,agent字节读最新的信息,然后跟最新的服务器ip通信

谁当老大,可以谁的节点序号越小,谁就当老大,-e -s创建了,1号消失了,2号当老大,2号消失,看谁最小,也就是3号当老大,永远是最小的当老大

老大的节点,消失之后,让另一个注册上来,一些注册的信息可以在其他节点上保存,只要老大换了,立马去读取节点下的信息,我们在master上保存了,agents和tasks,这两个一旦master挂掉,信息就没了,就可以存到zookeeper某个节点上,只要一读取都知道了,把zookeeper当数据库用。

将老大注册一个节点,谁挂了谁就消失,另一个看了没人用,就去抢注

现在很多分布式服务都有服务发现,一旦登录后会在某个节点下保存自己的信息,其他人想要了解信息,直接去zookeeper,给他一读,节点就有哪些刷新了,节点退出可以弄一个瞬时的,搞一个短暂的节点,只要一退出,会话就完了,节点就找不到了,相当于注销了自己。所以现在很多服务发现和注销都是用zookeeper做的。

微服务是从SOA,面向服务来的,服务和服务间必须通信,必须协调。这时候需要zookeeper,现在都是把zookeeper当数据库用的,所有的agent注册到这里注册,所有master也是到这里注册,master挂了节点就消失,agent节点挂了也小时,这样,master就知道哪些在线哪些不在线,agent 也可以知道master在不在,


在以前的里面安装一下



定位一下需要client,链接

看一下要你写的样子


school还在

现在链接任意一台都行

先satrt,然后再close,上面拿到了,close报错先不管

这个节点称为znode,每一个一级级目录节点称为znode

假设现在有一个登录了,可以假装是其中一个agent

agent登录可以创建一些信息,用api来写,ensure_path确保这个存在,get准备从这个数据上面拿数据,现在还没数据

没数据,但是这个节点有了

用这个可以保证一定有这个,路径再长,可以递归创建,create函数有递归创建

这里的value想要bytes

现在作为master,想要注册自己的信息,myid把自己注册进去,如果没有myid这个目录,就准备创建,ephemeral就是瞬时的,如果节点不存在就创建一个

再另外一个文件测试一下,一个节点可以有子路径,子路径可以用get_children,watcher是一个观察者,是一个函数,意思就是盯着这个目录,如果children发生了改变,我们就可以知道了

将t先运行起来

现在运行一旦创建成功后,阻塞不消失,加个input就可以不消失了

现在这里就生成一个uuid来了


另外一遍运行就可以拿到值了


看到这个值就准备阻塞,把watcher()括号去掉,get数据的时候,顺便挂一个watch钩子,但凡下一次改变就立马知道变化

想要变化很简单,敲一个回车

这里还继续在做,谁挂了,立马就知道了,只要关注在某个节点上有一大堆agent,某一个agent挂了就可以了解到了,也可以去关注某个节点的存在性

首先不观察你,先把所有的子访问到,然后对所有的子进行一个观察,这个子消失了也知道

在这个目录下有几个东西,现在观察,1,2,3是可以知道,但是不知道是谁

可以先遍历,然后知道123,观察1的时候加个watch,2的时候加个watch

就这么做,可以遍历children,拿到的值是string类型

访问路径从根开始,每访问一个节点加一个watch

现在t和t1都停止就什么都没了


运行3次,假设3个agent上线了

现在就是3个agent


启动下t1看一下谁先挂,现在三个都在

最后一个agent敲回车停止

现在就提示有一个被删除了

get_children就是告诉你,chilren没有变化,但是盯着你就告诉你,是谁,被删除了,现在就只有两个了,master就知道谁挂了,不用给master发心跳包了

这是一个元组,把元组第一项,调用里面的path就可以拿到,直接拿第一个元素的path属性取到路径


在很多方法都有watch,比如存在性

大多数读取的方法都有watch

准备创建个值,在读取方法上加上watch,这样只要发生变化就会知道了

休息2秒做第二次

首先拼出一个路径,然后创建,判断存在性,同时加一个watch,加一个watch,对它的值发生改变,应该可以调用回调,然后再看一下值,再调用一下回调

watch只执行了一次


现在有两个路径,两个路径不存在就创建,对两个节点进行watch

现在两个watch就分别触发,第二次修改就谁都不管了,同一个回调函数大家一起用,但是是各用各的,对每一个节点来说,watch触发,下次不能使用了

watch一般触发了一次,就不会触发第二次,这次watch已经结束了,对于这个节点不会触发第二次。
第一种方法,在回调中可以加watch,但是太累了


有kazoo库


可以看一下文档


提供了一些高级货

路径1设置了两次,触发了一次,第二次没管

再次执行

这里还有递归删除



两次都触发

这两个参数是不一致的,要照着这个来写


这里结果已经是了,刚才自己写watch的时候拿了*args,没有解开,这里是解开两个制,注入到里面去了,所以拿到的跟以前不一样



自己写watch的时候,用一次之后,下回很难挂,所以用它提供了装饰器


现在m1和m2都有

现在把m2也改改,m1改两次触发两次,现在说明变化都知道

正式使用的话,会有sequence,ephemeral这两种节点,用到了就可以判断究竟谁在线,谁不在线。如果有一大批agent注册进来,用sequence变成01 ,02,03,04,往往要监控哪些节点发生哪些变化以判断哪些节点掉线了,和上线了,这时候需要在get_children,get,exist上加watch,然后用watch来判断是否发生改变。
但是一旦watch完了下回还想要监控,可以用它提供的装饰器,可以帮助你循环监控

以前都是让agent自己来注册心跳,现在可以直接用kazoo链接到zookeeper上去注册节点,去读取相应信息即可,把信息set到data当中,有了节点watch,每个节点下线就可以很容易就知道了,这样可以保证所有服务器数据是一致的

主要就是议员,市民,旁听的故事

2020/04/28 07-kazoo库使用和watcher相关推荐

  1. 【图表】java 24年发展历史及长期支持jdk版本(up to 2020.04)

    Oracle官网所有jdk版本的发行说明:参见 jdk 所有发行版本时间点(up to 2020.04) jdk 所有发行版本时间点(up to 2020.04) 年份 java版本 1991.02 ...

  2. 【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动

    前言 iMX6Q 支持多种启动方式,如 emmc启动.SD 卡启动等,这里简单的记录一下 SD卡启动的流程 下载u-boot 使用 NXP 官方提供的 uboot-imx,代码地址为: https:/ ...

  3. 2020低压电工模拟考试题库及低压电工复审模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020低压电工模拟考试题库及低压电工复审模拟考试,包含低压电工模拟考试题库答案解析及低压电工复审模拟考试练习.由安全生产模拟考试一点通公众号结合国家低压 ...

  4. 2020低压电工模拟考试题库及低压电工作业考试题库

    题库来源:安全生产模拟考试一点通公众号小程序 2020低压电工模拟考试题库及低压电工作业考试题库,包含低压电工模拟考试题库答案解析及低压电工作业考试题库练习.由安全生产模拟考试一点通公众号结合国家低压 ...

  5. (学习日记)2023.04.28

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  6. 2020起重机械指挥考试题库及起重机械指挥证考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020起重机械指挥考试题库及起重机械指挥证考试,包含起重机械指挥考试题库答案解析及起重机械指挥证考试练习.由安全生产模拟考试一点通公众号结合国家起重机械 ...

  7. 2020高压电工模拟考试题库及高压电工复审模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020高压电工模拟考试题库及高压电工复审模拟考试,包含高压电工模拟考试题库答案解析及高压电工复审模拟考试练习.由安全生产模拟考试一点通公众号结合国家高压 ...

  8. 2020年氟化工艺考试题库及氟化工艺考试资料

    题库来源:安全生产模拟考试一点通公众号小程序 2020年氟化工艺考试题库及氟化工艺考试资料,包含氟化工艺考试题库答案和解析及氟化工艺考试资料练习.由安全生产模拟考试一点通公众号结合国家氟化工艺考试最新 ...

  9. 谁是 2020 年最强 Python 库?年度 Top10 出炉

    蕾师师 发自 凹非寺  量子位 报道 | 公众号 QbitAI 2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库Top10. 上 ...

最新文章

  1. 对git的使用日常问题及解决
  2. Python.Scrapy.12-scrapy-source-code-analysis-part-2
  3. 网络安全中机器学习大合集 Awesome
  4. C#异步编程的实现方式(1)——异步委托
  5. hdu 4109 Instrction Arrangement 拓扑排序 关键路径
  6. 记录”limxml2剖析:功能特性”之摘抄
  7. 信息学奥赛一本通C++语言——1024:保留3位小数的浮点数
  8. 8086 按开关灯亮 c语言程序,基于MCS-51的交通灯程序设计(c语言控制直行左转)...
  9. 新手如何创建Facebook广告账户?
  10. 浅谈ACM算法学习与有效训练
  11. VMware Workstation 10.0.7 安装
  12. 6.27java斗地主
  13. delphi 可以自定义边框的文本框TSkinNormalEdit思路(QQ2011风格)
  14. android加载大的gif动图
  15. 语音交互的基本概念和设计实践
  16. Spring security oAuth2 密码错误中英文提示问题
  17. 美多商城之商品(2)
  18. 实践是检验真理的唯一标准
  19. ge linux安装apt_Linux是如何安装和更新软件的 apt与apt-get机制详解 | 阿拉灯
  20. Linux下在文件内部指定行(首行、末尾行等)插入内容

热门文章

  1. (20190117)GBT 18314-2009 全球定位系统(GPS)测量规范
  2. 信息系统项目管理师学习笔记14-信息文档管理与配置管理
  3. 【OpenFOAM】-olaFlow-算例4- irreg45degTank
  4. endpoint是什么
  5. 2.MySQL表的增删改查(进阶)
  6. 从零开始成为GStreamer专家——RTSP播放开发
  7. sw模型转urdf,并在gazebo和rviz中显示
  8. 计算机专业申请留学,美国出国留学计算机专业申请难度分析
  9. 探索sandbox进军元宇宙
  10. 批量删除Maven仓库中下载失败的依赖