zookeepleader follower 模式能用于查询吗

新热消息:dubbo zookeepr - 今日头条()
核心提示:dubbozookeepr,http://-qq-/blog/2196235...,中国学网提供,健康,养生,留学,移民,创业,汽车等信息http://-qq-/blog/2196235neid="171" data-revive-id="8c38e720de1c90a6f6ff52f3f89c4d57"&
资讯有热度,媒体有温度。滕州全媒体,滕州人最爱的资讯平台。
中央电视台财经频道官方新闻发布
分享国外最新奇好玩的各种视频,每天给你不一样的超级体验!
中国青年网,日正式开通,共青团中央主办的中央重点新闻网站,是国内最大的青年主流网站。
火星视频专注于分享全球搞笑视频。
公信力 传播力 影响力
(C) 2016 今日头条 违法和不良信息举报电话:010-公司名称:北京字节跳动科技有限公司ZOOKEEPR的通信架构
ZOOKEEPR的通信架构
本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型。&&Zookeeper的通信架构在Zookeeper整个系统中,有3中角色的服务,client、Follower、leader。其中client负责发起应用的请求,Follower接受client发起的请求,参与事务的确认过程,在leader crash后的leader选择。而leader主要承担事务的协调,当然leader也可以承担接收客户请求的功能,为了方便描述,后面的描述都是client与Follower之间的通信,如果Zookeeper的配置支持leader接收client的请求,client与leader的通信跟client与Follower的通信模式完全一样。Follower与leader之间的角色可能在某一时刻进行转换。一个Follower在leader crash掉以后可能被集群(Quorum)的Follower选举为leader。而一个leader在crash后,再次加入集群(Quorum)将作为Follower角色存在。在一个集群(Quorum)中,除了在选举leader的过程中没有Follower和leader的区分外,其他任何时刻都只有1个leader和多个Follower。Client、Follower和leader之间的通信架构如下:&Client与Follower之间为了使客户端具有较高的吞吐量,Client与Follower之间采用NIO的通信方式。当client需要与Zookeeper service打交道时,首先读取配置文件确定集群内的所有server列表,按照一定的load balance算法选取一个Follower作为一个通信目标。这样client和Follower之间就有了一条由NIO模式构成的通信通道。这条通道会一直保持到client关闭session或者因为client或Follower任一方因某种原因异常中断通信连接。正常情况下, client与Follower在没有请求发起的时候都有心跳检测。&&&&Follower与leader之间Follower与leader之间的通信主要是因为Follower接收到像(create, delete, setData, setACL, createSession, closeSession, sync)这样一些需要让leader来协调最终结果的命令,将会导致Follower与leader之间产生通信。由于leader与Follower之间的关系式一对多的关系,非常适合client/server模式,因此他们之间是采用c/s模式,由leader创建一个socket server,监听各Follower的协调请求。&&集群在选择leader过程中由于在选择leader过程中没有leader,在集群中的任何一个成员都需要与其他所有成员进行通信,当集群的成员变得很大时,这个通信量是很大的。选择leader的过程发生在Zookeeper系统刚刚启动或者是leader失去联系后,选择leader过程中将不能处理用户的请求,为了提高系统的可用性,一定要尽量减少这个过程的时间。选择哪种方式让他们可用快速得到选择结果呢?Zookeeper在这个过程中采用了策略模式,可用动态插入选择leader的算法。系统默认提供了3种选择算法,AuthFastLeaderElection,FastLeaderElection,LeaderElection。其中AuthFastLeaderElection和LeaderElection采用UDP模式进行通信,而FastLeaderElection仍然采用tcp/ip模式。在Zookeeper新的版本中,新增了一个learner角色,减少选择leader的参与人数。使得选择过程更快。一般说来Zookeeper leader的选择过程都非常快,通常&200ms。&Zookeeper的通信流程要详细了解Zookeeper的通信流程,我们首先得了解Zookeeper提供哪些客户端的接口,我们按照具有相同的通信流程的接口进行分组:&Zookeeper系统管理命令Zookeeper的系统管理接口是指用来查看Zookeeper运行状态的一些命令,他们都是具有4字母构成的命令格式。主要包括:ruok:发送此命令可以测试zookeeper是否运行正常。dump:dump server端所有存活session的Ephemeral(临时)node信息。stat:获取连接server的服务器端的状态及连接该server的所有客服端的状态信息。reqs:&获取当前客户端已经提交但还未返回的请求。stmk:开启或关闭Zookeeper的trace level.gtmk:获取当前Zookeeper的trace level是否开启。envi:&获取Zookeeper的java相关的环境变量。srst:重置server端的统计状态当用户发送这些命令的到server时,由于这些请求只与连接的server相关,没有业务处理逻辑,非常简单。Zookeeper对这些命令采用最快的效率进行处理。这些命令发送到server端只占用一个4字节的int类型来表示不同命令,没有采用字符串处理。当服务器端接收到这些命令,立刻返回结果。&Session创建任何客户端的业务请求都是基于session存在的前提下。Session是维持client与Follower之间的一条通信通道,并维持他们之间从创建开始后的所有状态。当启动一个Zookeeper client的时候,首先按照一定的算法查找出follower,&然后与Follower建立起NIO连接。当连接建立好后,发送create session的命令,让server端为该连接创建一个维护该连接状态的对象session。当server收到create session命令,先从本地的session列表中查找看是否已经存在有相同sessionId,则关闭原session重新创建新的session。创建session的过程将需要发送到Leader,再由leader通知其他follower,大部分Follower都将此操作记录到本地日志再通知leader后,leader发送commit命令给所有Follower,连接客户端的Follower返回创建成功的session响应。Leader与Follower之间的协调过程将在后面的做详细讲解。当客户端成功创建好session后,其他的业务命令就可以正常处理了。&Zookeeper查询命令Zookeeper查询命令主要用来查询服务器端的数据,不会更改服务器端的数据。所有的查询命令都可以即刻从client连接的server立即返回,不需要leader进行协调,因此查询命令得到的数据有可能是过期数据。但由于任何数据的修改,leader都会将更改的结果发布给所有的Follower,因此一般说来,Follower的数据是可以得到及时的更新。这些查询命令包括以下这些命令:exists:判断指定path的node是否存在,如果存在则返回true,否则返回false.getData:从指定path获取该node的数据getACL:获取指定path的ACL。getChildren:获取指定path的node的所有孩子结点。所有的查询命令都可以指定watcher,通过它来跟踪指定path的数据变化。一旦指定的数据发生变化(create,delete,modified,children_changed),服务器将会发送命令来回调注册的watcher. Watcher详细的讲解将在Zookeeper的Watcher中单独讲解。&Zookeeper修改命令Zookeeper修改命令主要是用来修改节点数据或结构,或者权限信息。任何修改命令都需要提交到leader进行协调,协调完成后才返回。修改命令主要包括:1.&&&createSession:请求server创建一个session2.&&&create:创建一个节点3.&&&delete:删除一个节点4.&&&setData:修改一个节点的数据5.&&&setACL:修改一个节点的ACL6.&&&closeSession:请求server关闭session我们根据前面的通信图知道,任何修改命令都需要leader协调。&在leader的协调过程中,需要3次leader与Follower之间的来回请求响应。并且在此过程中还会涉及事务日志的记录,更糟糕的情况是还有take snapshot的操作。因此此过程可能比较耗时。但Zookeeper的通信中最大特点是异步的,如果请求是连续不断的,Zookeeper的处理是集中处理逻辑,然后批量发送,批量的大小也是有控制的。如果请求量不大,则即刻发送。这样当负载很大时也能保证很大的吞吐量,时效性也在一定程度上进行了保证。&zookeeper server端的业务处理-processor链&&!--EndFragment--&Zookeeper通过链式的processor来处理业务请求,每个processor负责处理特定的功能。不同的Zookeeper角色的服务器processor链是不一样的,以下分别介绍standalone Zookeeper server, leader和Follower不同的processor链。&Zookeeper中的processorAckRequestProcessor:当leader从向Follower发送proposal后,Follower将发送一个Ack响应,leader收到Ack响应后,将会调用这个Processor进行处理。它主要负责检查请求是否已经达到了多数Follower的确认,如果满足条件,则提交commitProcessor进行commit处理CommitProcessor:从commited队列中处理已经由leader协调好并commit的请求或者从请求队列中取出那些无需leader协调的请求进行下一步处理。FinalRequestProcessor:任何请求的处理都需要经过这个processor,这是请求处理的最后一个Processor,主要负责根据不同的请求包装不同的类型的响应包。当然Follower与leader之间协调后的请求由于没有client连接,将不需要发送响应(代码体现在if (xn == null) {})。FollowerRequestProcessor:Follower processor链上的第一个,主要负责将修改请求和同步请求发往leader进行协调。PrepRequestProcessor:在leader和standalone server上作为第一Processor,主要作用对于所有的修改命令生成changelog。ProposalRequestProcessor:leader用来将请求包装为proposal向Follower请求确认。SendAckRequestProcessor:Follower用来向leader发送Ack响应的处理。SyncRequestProcessor:负责将已经commit的事务写到事务日志以及take snapshot.ToBeAppliedRequestProcessor:负责将tobeApplied队列的中request转移到下一个请求进行处理。&Standalone zookeeper processor链&&&Leader processor链&Follower processor链&
发表评论:
TA的最新馆藏在印尼,猴子的主人转移到了未执行禁令的郊区。
为数众多的同性恋聚集一处水上公园,参加水上派对。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  ZooKeeper 是分布式环境下非常重要的一个中间件,可以完成动态配置推送、分布式 Leader 选举、分布式锁等功能。在运维 ZooKeeper 服务的以来,积累如下经验:
  1. 集群数量
  3台起,如果是虚拟机,必须分散在不同的宿主机上,以实现容灾的目的。如果长远来看(如2-3年)需求会持续增长,可以直接部署5台。ZooKeeper集群扩容是比较麻烦的事情,因此宁可前期稍微浪费一点。
  2. 客户端配置域名而不是 IP
  如果有一天你的 ZooKeeper 集群需要做机房迁移,或者其中几个节点机器挂了,需要更换。让你的用户更新 ZooKeeper 服务器配置不是件轻松的事情,因此一开始就配置好域名,到时候更新 DNS 即可。
  3. 开启 autopurge.snapRetainCount
  ZooKeeper 默认不会自动清理 tx log,所以总会有一天你会收到磁盘报警(如果你有磁盘监控的话)。开启自动清理机制后,就不用担心了,我的配置如下:autopurge.snapRetainCount=500autopurge.purgeInterval=24
  4. 扩容
  如果你可以接受停止服务半个小时,那基本随意玩了,但在比较严肃的环境下,还是不能停服务的。我的做法是这样的:
  0. 有节点 A, B, C 处于服务状态
  server.3=192.168.12.1:server.4=192.168.12.2:
  server.5=192.168.12.3:
  1. 加入节点 D,配置如下:
  server.3=192.168.12.1:server.4=192.168.12.2:
  server.5=192.168.12.3:server.6=192.168.12.4:
  server.7=192.168.12.5:
  用 4 字命令检查,保证该节点同步完毕集群数据,处于 Follower 状态:
  # echo srvr | nc 192.168.12.4 2181Zookeeper version: 3.4.5-1392090, built on 09/30/ GMTLatency min/avg/max: 0/0/13432Received:
  ***Sent: ***Connections: ***Outstanding:0Zxid:0x***Mode: followerNode count: ***需要注意的是,这一步加入的节点的 id,必须大于集群中原有的节点的 id,例如 6 & 3,4,5,我也不知道为什么需要这样。
  2. 同上一步一样,加入节点 E3. 更新 A B C 的配置如 D 和 E,并依此重启
  5. 机房迁移
  例如要把服务从 X 机房的 A B C 迁移到 Y 机房的 A’ B’ C’。做法是首先把集群扩容成包含6个节点的集群;然后修改域名指向让用户的连接都转到 A’ B’ C’;最后更新集群配置,把 A B C 从集群摘除。
  6. 跨机房容灾
  由于 ZooKeeper 天生不喜欢偶数(怕脑裂),因此有条件的就三机房部署,但机房之间的网络条件得是类似局域网的条件,否则性能就堪忧了。双机房做自动容灾基本不可能,加入手动步骤是可以的,和 DB 一样,短时间不可用,立刻启用另外一个机房,平时保证数据同步。三机房部署,如果一个机房离的比较远,网络延迟较高怎么办?可以 3 + 3 + 1 部署,1 就放在那个网络延迟较高的地方,确保 leader 在 3 + 3 这两个机房中间,那么平时的性能就能保证了。怎么保证 leader 不到 1 呢?目前能想到的办法就是如果发现就重启它。
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
大讲台为你而讲,让学习更简单!
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:2188人阅读
java开发(19)
http://nileader./156/(转)
在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存在这个目录中,关于这两个目录的详细说明,请看《
& & & 正常运行过程中,ZK会不断地把快照数据和事务日志输出到这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的,需要管理员来清理,这里介绍4种清理日志的方法。在这4种方法中,推荐使用第一种方法,对于运维人员来说,将日志清理工作独立出来,便于统一管理也更可控。毕竟zk自带的一些工具并不怎么给力,这里是社区反映的两个问题:
第一种,也是运维人员最常用的,写一个删除日志脚本,每天定时执行即可:
#!/bin/bash&&#snapshot&file&dir&dataDir=/home/yinshi.nc/test/zk_data/version-2&#tran&log&dir&dataLogDir=/home/yinshi.nc/test/zk_log/version-2&#zk&log&dir&logDir=/home/yinshi.nc/test/logs&#Leave&66&files&count=66&count=$[$count+1]&ls&-t&$dataLogDir/log.*&|&tail&-n&+$count&|&xargs&rm&-f&ls&-t&$dataDir/snapshot.*&|&tail&-n&+$count&|&xargs&rm&-f&ls&-t&$logDir/zookeeper.log.*&|&tail&-n&+$count&|&xargs&rm&-f&&#find&/home/yinshi.nc/taokeeper/zk_data/version-2&-name&&snap*&&-mtime&+1&|&xargs&rm&-f&#find&/home/yinshi.nc/taokeeper/zk_logs/version-2&-name&&log*&&-mtime&+1&|&xargs&rm&-f&#find&/home/yinshi.nc/taokeeper/logs/&-name&&zookeeper.log.*&&-mtime&+1&|&xargs&rm&–f&
以上这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件,可以将他写到crontab中,设置为每天凌晨2点执行一次就可以了。
& & & &第二种,使用ZK的工具类PurgeTxnLog,它的实现了一种简单的历史文件清理策略,可以在这里看一下他的使用方法:http://zookeeper.apache.org/doc/r3.4.3/api/index.html,可以指定要清理的目录和需要保留的文件数目,简单使用如下:
java&-cp&zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf&org.apache.zookeeper.server.PurgeTxnLog&&dataDir&&&snapDir&&-n&&count&&
& 第三种,对于上面这个Java类的执行,ZK自己已经写好了脚本,在bin/zkCleanup.sh中,所以直接使用这个脚本也是可以执行清理工作的。
& & &第四种,从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:
&autopurge.purgeInterval&&这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
autopurge.snapRetainCount&这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:48722次
排名:千里之外
原创:22篇
转载:29篇
(1)(1)(2)(2)(2)(1)(1)(4)(5)(3)(6)(2)(3)(7)(1)(2)(1)(3)(3)(1)nileader 的BLOG
用户名:nileader
文章数:456
评论数:214
访问量:356249
注册日期:
阅读量:5863
阅读量:12276
阅读量:318288
阅读量:1030285
51CTO推荐博文
转载请注明:
& & &在公司内部,有不少应用已经强依赖zookeeper,zookeeper的工作状态直接影响它们的正常工作。目前开源世界中暂没有一个比较成熟的zookeeper-monitor, 于是开始zookeeper监控这块工作。
& & &目前zookeeper-monitor能做哪些事情,讲到这个,首先来看看哪些因素对zookeeper正常工作比较大的影响:
1. 用于zookeeper写日志的目录要有足够大小,并且强烈建议在单独的磁盘(挂载点)上,这是影响ZK性能最大因素之一。
2. 连接数。
3. 注册的Watcher数。
4. ZNode是否可读,可写。
5. ZK事件通知的延时是否过大。
围绕以上几点展开,完成了taokeeper一期的开发,目前主要完成以下方面的监控:(项目地址:/taobao/taokeeper)
1. CPU/MEM/LOAD的监控
2. ZK日志目录所在磁盘剩余空间监控
3. 单机连接数的峰值报警
4. 单机 Watcher数的峰值报警
5. 节点自检:是指对集群中每个IP所在ZK节点上的PATH: /YINSHI.MONITOR.ALIVE.CHECK 定期进行三次如下流程 : 节点连接 & 数据发布 & 修改通知 & 获取数据 & 数据对比, 在指定的延时内,三次流程均成功视为该节点处于正常状态。
ZooKeeper集群实时状态&
&点击查看按钮可以查看当前服务器上所有订阅者的详细信息:
ZooKeeper监控报警设置
ZooKeeper集群状态趋势图
如何安装部署&
首先,对之前使用 maven-war-plugin 来进行配置管理的方式,表示遗憾。不少开发人员反馈部署比较困难,另外还有一些对maven不熟悉的开发人员也是这样认为。现在有了改进,将配置与程序分离开来。对此给大家带来的不便,深表歉意。
&一、直接部署
1. 下载,初始化数据库(Mysql).
2. 下载文件,解压到tomcat的webapps目前下,确保最后目录结构如下: &%TOMCAT_HOME%\webapps\taokeeper-monitor\WEB-INF
文件,存放到一个指定目录,比如
/home/xiaoming/taokeeper-monitor/config/taokeeper-monitor-config.properties, 其中内容如下,根据需要自己修改下。
systemInfo.envName=TEST&#DBCP&dbcp.driverClassName=com.mysql.jdbc.Driver&dbcp.dbJDBCUrl=jdbc:mysql://1.1.1.1:3306/taokeeper&dbcp.characterEncoding=GBK&dbcp.username=xiaoming&dbcp.password=123456&dbcp.maxActive=30&dbcp.maxIdle=10&dbcp.maxWait=10000&#SystemConstant&SystemConstent.dataStoreBasePath=/home/xiaoming/taokeeper-monitor/ZookeeperStore&#SSH&account&of&zk&server&SystemConstant.userNameOfSSH=xiaoming&SystemConstant.passwordOfSSH=123456&
4. 在tomcat启动脚本中添加JAVA_OPTS:
windows上:set JAVA_OPTS=-DconfigFilePath=&D:\server\tomcat\webapps\taokeeper-monitor-config.properties&
linux上:JAVA_OPTS=-DconfigFilePath=&/home/xiaoming/taokeeper-monitor/config/taokeeper-monitor-config.properties&
5. 启动tomcat服务器
6. 正常启动后,访问:http://127.0.0.1:8080/taokeeper-monitor
二、从源代码开始
1. Check out 源代码::nileader/taokeeper.git
2. 修改代码&
3. 实现 com.taobao.taokeeper.reporter.alarm.MessageSender 接口,用于发送报警信息。(可选)
4. 到taokeeper根目录下执行 package.cmd 命令,打成一个war包,之后进行部署
&1. taokeeper-monitor启动后,还没有配置任何zookeeper集群,点击&加入监控&进行集群添加。
2. 配置zookeeper集群信息
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
17:03:08 17:03:08

我要回帖

更多关于 follower 的文章

 

随机推荐