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

[经验分享] zookeeper学习之一(简介和安装)

[复制链接]

尚未签到

发表于 2017-4-19 10:04:36 | 显示全部楼层 |阅读模式
 一、zookeeper介绍
直接翻译官网的What is zookeeper。
Zookeeper是一个关于 配置信息,命名,提供分布式同步和集群service的一站式服务。所有的这些服务或者(他们)别的表现形式经常在应用于分布式系统中。每一次去实现他们,都不可避免的花费大量的工作去修复bugs和(调整)竞争条件。因为实现这类服务很难,所以在一开始就要谨慎的对待他们。否则他们将变得很脆弱和难以管理! 即使正确的完成了,这些服务的不同实现,仍然可能导致部署后维护的复杂性。
我的水平只能翻译成这样了,原文比较古怪。 DSC0000.gif
原文地址:http://zookeeper.apache.org/
 
 
 
二、配置和安装
点击这里下载安装包,我采用的是最新的3.4.6,是一个stable版本。
安装方式采取伪分布式部署。即在同一台机器上部署多个节点。安装过程比较简单。多台机器也同理。
 
1.把下载下来的安装包放在/opt/shencl/zookeeper/目录下,tar -zxvf 解压,改名 zookeeper-3.4.6_0。
 
2. 复制一份zoo_sample.cfg,命名为zoo.cfg。编辑zoo.cfg,我们准备部署3个节点,所以加入如下配置,
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/shencl/zookeeper/data/data0
dataLogDir=/opt/shencl/zookeeper/log/log0
clientPort=2180
server.0=127.0.0.1:2888:3888
server.1=127.0.0.1:2889:3889
server.2=127.0.0.1:2890:3890
 
参数解释:
tickTime: 客户端和服务端或者服务端多个节点之间维持心跳的时间间隔,单位毫秒。
initLimit:服务端节点初始化时,相互通信的等待时间。一个单位就是tickTime的值。
syncLimit:服务端节点之间同步数据的间隔时间。一个单位就是tickTime的值。
dataDir: 数据文件存放目录。
dataLogDir:用来重做数据的事务日志文件存放目录。
clientPort:给客户端连接的端口。
server.0,server.1,server.2表示节点编号,后边用冒号隔开的三个数字,分别表示节点的ip,交换数据的端口号,某个节点挂掉之后专门用来选举的端口号。
注:initLimit,syncLimit在单节点部署模式下,不需要配置。
 
3. 在dataDir目录下创建myid文件,写入该节点的编号 0 。这样一个节点就配置完成了。
 
4.复制 zookeeper-3.4.6_0 到 zookeeper-3.4.6_1和 zookeeper-3.4.6_2,要修改的地方是 zoo.cfg里的 dataDir,dataLogDir,clientPort。还有需要在自己的data目录下新建myid文件,写入自己的编号。
 
最终的目录结构如下:
DSC0001.jpg
 

三、启动和测试
  分别进入三个节点的bin目录,启动zookeeper,运行./zkServer.sh start。
  注:前边节点启动的时候,会抛出一些错误,可忽略。这是因为另外的节点没启动,导致的通信异常。
   
  可以用自带的基于telnet的客户端测试一下,看看是否启动成功。随便进入一个节点的bin目录,比如节点0
  ./zkCli.sh -server 127.0.0.1:2180,随便输入一个字符,他会跳出help界面。说明服务端启动成功。
DSC0002.jpg
 

 比较重要的有ls, get,set,create,delete等等,path参数必须以/开头。留意create命令的 acl参数(Access Control权限控制)和set命令的 version参数
我们用create命令创建一个znode  /testnode , 然后ls,发现已经创建成功了!
DSC0003.jpg
 

可以连上另外两个节点server.1 和 server.2 (在这里仅需要换一下端口)  观察, 发现数据已经被同步过来了,也已经有/testnode了。如下图

DSC0004.jpg
 

 
 

 
再看看set和get命令,把他的值改成 iwantchangemynode
DSC0005.jpg
 

可以看到不但数据改过来了,dataVersion也已经是1了(计数器从0开始)
  aclVersion仍然还是0,因为我并没有修改acl的类型。
  此外zookeeper记录下来的数据还有node的 各种zxid(ZooKeeper Transaction Id),以及ctime,mtime等等。
   
  四、总结
   可以看到,zookeeper仅仅是维护了一个分布式的树形目录。如下图。它通过fast paxos算法保证多个节点上znode的数据一致性。一套zookeeper可以同时给多个应用程序使用,只需要隔离好各自的path~。在生产环境中,多个程序,比如hadoop,hbase,strom共用一套zookeeper也是常事。结构如下图。
   
DSC0006.jpg
 
   zookeeper仅仅维护了一份目录树,那他又是如何支持Leader election、Shared lock、Queue这些牛x哄哄的功能呢?
  请看下篇 zookeeper学习之二(高级特性)
   
   
  本文参考:
  http://zookeeper.apache.org/
  http://www.cnblogs.com/haippy/archive/2012/07/23/2603583.html
  http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
  http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.html
  http://coolxing.iteye.com/blog/1871009
     

运维网声明 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-366229-1-1.html 上篇帖子: ZooKeeper原理与它的集群工作流程 下篇帖子: 【转】Zookeeper Client简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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