See You Again

使用zookeeper

今天再来学习一个组件——zookeeper,它的定位是为分布式应用提供一致性服务,使开发人员能够专注于核心应用程序逻辑,而无需担心应用程序的分布式特性(同步、互斥、共享、一致性、领导者选举等)。看起来又是一个高大上的组件,因为分布式意味着比较中大规模的应用了,且对稳定性、可靠性要求比较高。

下面通过一些实践看看它是如何做的。首先看zk的架构图和数据模型图:

可以看到:

其中最后一点引入文件系统模型的概念最为精妙,通过这种方式,zk的Server端实现了对节点的统一管理:

下面来一些实战,来个更直观的认识:
官网下载一个最新的版本,解压安装,修改配置 conf/zoo.cfg,这里我们启动两个 zk 的Server:

  1. clientPort=2182
  2. server.1=127.0.0.1:2888:3888
  3. server.2=127.0.0.1:2889:3889

分别启动两个 zk,这里是 2181、2182两个端口:

  1. cd bin && ./zkServer.sh start

启动后可以发送一些命令查看zk的运行细节,例如 echo stat |nc 127.0.0.1 2181

  1. Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
  2. Clients:
  3. /127.0.0.1:34010[1](queued=0,recved=2974,sent=2974)
  4. /127.0.0.1:34014[1](queued=0,recved=2951,sent=2951)
  5. /127.0.0.1:34046[0](queued=0,recved=1,sent=0)
  6. Latency min/avg/max: 0/0/26
  7. Received: 5953
  8. Sent: 5952
  9. Connections: 3
  10. Outstanding: 0
  11. Zxid: 0x10000000d
  12. Mode: follower
  13. Node count: 4

其他的命令如 cons dump envi reqs ruok wchs wchc wchp等。

启动了 zk 服务端,现在用命令行模拟有若干个客户端连接过来(正常情况一般通过Java等编程语言实现):

  1. cd bin && ./zkCli.sh

此时进入一个命令行交互界面,手动添加一个节点 create /zk data,修改一个节点 create /zk data,获得节点信息 get /zk,删除节点 delete /zk,其他客户端都可以实时拿到最新的结果。这正是 zk Server 领导者协调的结果。
至此也不难理解 zk 可以实现以下功能了:

2016-11-24 喜欢

Copyright © 2015-2018 转载请注明出处

回到顶部 ↑