设为首页 收藏本站
查看: 863|回复: 0

[经验分享] zookeeper系列之概要介绍

[复制链接]

尚未签到

发表于 2017-4-19 08:16:06 | 显示全部楼层 |阅读模式
  Zookeeper是Hadoop下的一个子项目,主要用来在分布式环境下提供分布式锁、配置管理、名字服务、群组服务。它具有很高的可用性、稳定性、可靠性。它在分布式应用中像一把瑞士军刀,很多地方都用得着,像我们的DMS系统中就用它来提供分布式锁服务和动态配置服务。
  Zookeeper就像google在云技术领域提供的四大金刚之chubby(分布式锁服务),采用了简化的praxos算法来确保zookeeper集群节点的数据一致性。Zookeeper可以部署为standalone模式或quorum模式。Standalone模式就是只有单个Zookeeper server提供服务,优点是部署简单,缺点是有单点故障,不能提供高负载,可靠性无法保证,一旦server当机,将不能提供服务,这种模式主要使用在测试环境中,生产环境不建议采用这种模式。Quorum模式则正好相反,只要Quorum的成员有一半以上处于正常状态,就能对外提供服务,具有高可用性,Quorum成员可以共同分担业务请求的负载。没有单点故障。下图是zookeeper的架构图。

DSC0000.gif

zookeeper提供的简单接口:




Zookeeper查询命令


Zookeeper查询命令主要用来查询服务器端的数据,不会更改服务器端的数据。所有的查询命令都可以即刻从client连接的server立即返回,不需要leader进行协调,因此查询命令得到的数据有可能是过期数据。但由于任何数据的修改,leader都会将更改的结果发布给所有的Follower,因此一般说来,Follower的数据是可以得到及时的更新。这些查询命令包括以下这些命令:
1.   exists:判断指定pathnode是否存在,如果存在则返回true,否则返回false.
2.   getData:从指定path获取该node的数据
3.   getACL:获取指定pathACL
4.   getChildren:获取指定pathnode的所有孩子结点。
所有的查询命令都可以指定watcher,通过它来跟踪指定path的数据变化。一旦指定的数据发生变化(create,delete,modified,children_changed),服务器将会发送命令来回调注册的watcher. Watcher详细的讲解将在Zookeeper的Watcher中单独讲解。




Zookeeper修改命令


Zookeeper修改命令主要是用来修改节点数据或结构,或者权限信息。任何修改命令都需要提交到leader进行协调,协调完成后才返回。修改命令主要包括:
1.   createSession请求server创建一个session
2.   create创建一个节点
3.   delete删除一个节点
4.   setData修改一个节点的数据
5.   setACL修改一个节点的ACL
6.   closeSession请求server关闭session
任何修改命令都需要leader协调。 leader的协调过程中,需要3leaderFollower之间的来回请求响应。并且在此过程中还会涉及事务日志的记录,更糟糕的情况是还有take snapshot的操作。因此此过程可能比较耗时。但Zookeeper的通信中最大特点是异步的,如果请求是连续不断的,Zookeeper的处理是集中处理逻辑,然后批量发送,批量的大小也是有控制的。如果请求量不大,则即刻发送。这样当负载很大时也能保证很大的吞吐量,时效性也在一定程度上进行了保证。




配置与安装

Zookeeper代码依赖简单,仅仅依赖于log4j。部署也非常简单,只需要在官网(http://hadoop.apache.org/zookeeper/)上下载包,解压到安装目录,修改配置文件,拷贝一份zoo-sample.cfg将其修改如下:

 




#snapShot存放路径
dataDir=data
#transaction log 存放路径
dataLogDir=dataLog
#接收客户端请求的server端口,默认为
clientPort=2181
#代表1 tickTime多少毫秒,默认为2000毫秒
tickTime=2000
#初始化leader的时间,如果超过initLimit时间还没有收到大多数Follower的newLeader响应,则重新与各follower连接。
initLimit=5
#follower与leader之间的超时时间
syncLimit=5
#0:LeaderElection;1:AuthFastLeaderElection 非授权模式 2:AuthFastLeaderElection 授权模式 3:FastLeaderElection
electionAlg=0
#允许同一个client向server提交了请求,但还未返回的最大请求数
maxClientCnxns=100
#server.servrId=host:port:port
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
server.4=localhost:2884:3884
server.5=localhost:2885:3885
#group与weight跟大多数同意的策略相关,大多数同意策略为让所有组有超过一半权重的server已经确认过,则可以通过,
#如果没有指定server的权重,则默认为1,group中一定要包含所有的server,遗漏或多余都不行,当然可以不配,如果不配
#则weight也不需要配置
#group.groupId=serverId1:serverId2:serverId3:serverIdn
group.1=1:3:5
group.2=2:4
#weight.serverId=长整型数
weight.1=2
weight.2=3
weight.5=4

  以上是集群环境下3.2.2版本的服务器端配置文件。在集群环境下每个server需要一个标识server编号的标识文件,这个标识文件需要放在data目录下,比如dataDir目录是/home/joe/zookeeper/data,则这个文件应该在data目录下,文件内容非常简单,就是一个数字编号,对应配置文件中指定的server.number,这个编号不能搞错,他们是通过这个编号来标识不同server的。配置文件准备就绪后,切换到zookeeper的安装目录/bin,你会看到一些zk*.sh. 比如zkCleanup.sh 
zkCli.sh  zkEnv.sh  zkServer.sh
。可以检查一下shell脚本来搞清该脚本的用途。zkServer.sh就是用来启动zookeeper server的。zkClearnup.sh是用来清除哪些不再使用的日志文件和snapshot文件。启动脚本zkServer.sh start。正常情况就可以看到以下信息,代表你的集群环境配置好了。恭喜你,让我们一起zookeeper使用里程吧。
  
DSC0001.gif

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366104-1-1.html 上篇帖子: zookeeper入门(1)在单机上实现ZooKeeper伪机群/伪集群部署 下篇帖子: Zookeeper功能及应用场景
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表