技术控

    今日:61| 主题:49471
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] ZooKeeper 快速搭建与体验

[复制链接]
纠结_的男人 发表于 2016-10-4 13:39:58
108 1

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Apache ZooKeeper 是一个面向分布式应用程序的高性能协调服务器, 至于它的具体介绍像能提供命名和配置管理、同步和组服务等, 请各自 Google. 因为项目中所使用的 Kafka 内部用到了 ZooKeeper, 所以才促使我才着手想去了解一下 ZooKeeper 为何物, 其实对 ZooKeeper 早有耳闻. ZooKeeper 脱胎于著名的项目 Hadoop, 它也像  Hazelcast 那样未采用严格意义的 Master-Slave 的集群方式, 而是动态选出 Leader, 这避免了单点故障的问题.
   既然是集群, 实际应用是会在不同的机器上启动服务, 现如今有了 docker 很容易用它来测试, 或生产中使用 docker, 用 docker search zookeeper 就知道了. 本实例中还是在同一个系统中在多个端口中启动三个 ZooKeeper 来作为测试. 下面以 Mac/Linux 为例:
  下载安装 ZooKeeper

   到 https://zookeeper.apache.org/releases.html#download 下载, 写下此文时的最新稳定版是  zookeeper-3.4.9.tar.gz , 解压到某处, 为方便起见把解压后的 zookeeper-3.4.9/bin 加到系统环境变量 $PATH 中, 以后方便任何时候运行 zkServer.sh, zkCli.sh 这样的命令.
  准备目录和文件

  建立三个目录 server1, server2 和 server3, 并在前面每个目录中创建子目录 data, dataLog, logs; 以  server1 为例,  它的目录结构如下:
  ─── server1
  ├── data
  ├── dataLog
  └── zookeeper.out
  最后在以上的每一个  serverx/data 目录中创建文件 myid, 里面写入一个数字, 分别是 1, 2, 和 3.
  以 Mac/Linux 可用下面的命令来完成目录和 myid 文件中的创建
  [code]mkdir -p {server1,server2,server3}/{data,dataLog,logs}
for i in {1..3}; do echo "$i" > server$i/data/myid; done[/code]  配置文件

   配置文件可参考 zookeeper-3.4.9/conf 下的  zoo_sample.cfg. 分别在 server1, server2, server3 建立文件 zoo.cfg , 内容如下
  [code]tickTime=2000
initLimit=5
syncLimit=2
dataDir=data
dataLogDir=dataLog
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890[/code]  不同进程的 clientPort 必须不同, 比如这里 server1  是 2181, server2 是 2182, server3 是 2183.
  server.X 这个数字就是对应的 data/myid  中的数字. server.X 后的第一个端口用来集群成员的信息交换, 第二个端口是在 leader  挂掉时进行新 leader 选举用的.
  启动服务

   依次进到 server1, server2 和 server3 目录下执行 zkServer.sh start ./zoo.cfg ,  
  ➜ zookeeper for d in `ls`; do cd $d; zkServer.sh start ./zoo.cfg; cd ..; done
  ZooKeeper JMX enabled by default
  Using config: ./zoo.cfg
  Starting zookeeper ... STARTED
  ZooKeeper JMX enabled by default
  Using config: ./zoo.cfg
  Starting zookeeper ... STARTED
  ZooKeeper JMX enabled by default
  Using config: ./zoo.cfg
  Starting zookeeper ... STARTED
   如果 start 后不带 ./zoo.cfg 则会使用默认的配置文件 ZOOKEEPER_HOME/conf/zoo.cfg 文件.
  这样 ZooKeeper 的三个节点都启动来了, 查看一下端口, 下面列出了 ZooKeeper 相关的端口
  tcp46 0 0 *.2183 *.* LISTEN
  tcp46 0 0 *.2182 *.* LISTEN
  tcp46 0 0 *.2181 *.* LISTEN
  tcp4 0 0 127.0.0.1.2889 127.0.0.1.50886 ESTABLISHED
  tcp4 0 0 127.0.0.1.50886 127.0.0.1.2889 ESTABLISHED
  tcp4 0 0 127.0.0.1.2889 127.0.0.1.50885 ESTABLISHED
  tcp4 0 0 127.0.0.1.50885 127.0.0.1.2889 ESTABLISHED
  tcp4 0 0 127.0.0.1.2889 *.* LISTEN
  tcp4 0 0 127.0.0.1.3889 127.0.0.1.50869 ESTABLISHED
  tcp4 0 0 127.0.0.1.50869 127.0.0.1.3889 ESTABLISHED
  tcp4 0 0 127.0.0.1.3888 127.0.0.1.50868 ESTABLISHED
  tcp4 0 0 127.0.0.1.50868 127.0.0.1.3888 ESTABLISHED
  tcp4 0 0 127.0.0.1.3890 *.* LISTEN
  tcp4 0 0 127.0.0.1.3889 *.* LISTEN
  tcp4 0 0 127.0.0.1.3888 *.* LISTEN
  从上面也能直到端口  2888, 2889, 2890 之中只有 2889 端口正在监听, 也就是说 server2 是现在的 leader. 可以停掉某一个 server 看谁当上了样的的 leader  了. ZooKeeper 读数据时只从所连接的服务器获取, 写数据时需通过 leader 同步到所有节点上后事物才算完成.
  现在如果有兴趣的话也可以看看在 serverX 目录中 或 data, dataLog 中产生了什么文件.
  用 ZooKeeper 命令行客户端测试

  zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
  通常我们是指定一串服务器, 虽然指定单个服务器(如 zkCli.sh -server 127.0.0.1:2181) 也能连接整个 ZooKeeper 集群, 但是所连接的服务器出问题就完蛋了. 而指定一串服务器的好处是, 在当前所连接的服务器出故障时自动连接列表中别的服务器.
     zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
   Connecting to 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
   ......................
   2016-10-04 00:41:23,804 [myid:] - INFO [main-SendThread(127.0.0.1:2182):[email protected]] - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session
   [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTING) 0] 2016-10-04 00:41:26,821 [myid:] - INFO [main-SendThread(127.0.0.1:2182):[email protected]] - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x2578e2b859b0000, negotiated timeout = 30000
   WATCHER::
     本文原始链接 http://unmi.cc/zookeeper-fast-get-started/ , 来自隔叶黄莺 Unmi Blog  
   WatchedEvent state:SyncConnected type:None path:null
   [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0]
    现在进到了 ZooKeeper 客户端的控制台下, 输入任何不识别的命令都会显示出帮助
  ZooKeeper -server host:port cmd args
  stat path [watch]
  set path data [version]
  ls path [watch]
  delquota [-n|-b] path
  ls2 path [watch]
  setAcl path acl
  setquota -n|-b val path
  history
  redo cmdno
  printwatches on|off
  delete path [version]
  sync path
  listquota path
  rmr path
  get path [watch]
  create [-s] [-e] path data acl
  addauth scheme auth
  quit
  getAcl path
  close
  connect host:port
  还是有必要找一张图初步了解一下 ZooKeeper 维护数据所采用的类似于文件系统的结构
   
ZooKeeper 快速搭建与体验-1 (应用程序,Google,search,实际应用,服务器)

  ZooKeeper 的每个子目录都称为 znode, znode 是有版本的, 分临时或永久节点. 只有 EPHEMERAL 类型的目录不能再有子目录. znode 可自动编号, 可被监控.
   现在执行下 ls / 命令只能看到 [zookeeper] 这一个节点
  [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 7] ls /
  [zookeeper]
  为了演示, 我们现用两个 ZooKeeper 客户端连接到不同的端口能感受 ZooKeeper 中数据的同步, 分别
  zkCli.sh -server 127.0.0.1:2181
  zkCli.sh -server 127.0.0.1:2182
  然后在一端创建 znode, 看另一端是否能得到新的数据

ZooKeeper 快速搭建与体验-2 (应用程序,Google,search,实际应用,服务器)

   默认时 ls / 只有 [zookeeper] 节点, 左边用命令
  create /mynode helloworld
  然后在右端执行
  ls /
  get /mynode
  就能得到前面添加的数据, 值为 "helloworld"
   前面 zkCli.sh 能干的事情用 ZooKeeper 的 Java API 也都能做, 看 Class ZooKeeper Java Doc API .
  ZooKeeper 集群式管理一个目录(znode) 结构, 在每一层目录上可以设置数据, znode 可被监控, 这对我们就很有用了. 我们可以用 ZooKeeper 用作集中式的配置管理. 相信很多时候并不需要我们写代码去应用 ZooKeeper, 而只是需要像 Kafka 那样配置代替编码.
  链接:
  
       
  •    zookeeper 入门讲解实例 转   
  • ZooKeeper 基础知识、部署和应用程序   
  • 分布式服务框架 Zookeeper -- 管理分布式环境中的数据  

友荐云推荐




上一篇:Introduction to User Notifications Framework in iOS 10
下一篇:What I wish I knew when I started as a software developer
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

pout710 发表于 2016-10-8 02:22:49
在神经的人群里呆久了,我发现我正常了。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表