说明:分布式应用程序协调服务

    设计:基于层次型的目录树的数据结构,所有节点都叫做znode,可以包含子znode,同时可以包含数据

    功能:配置管理,服务治理

在分布式系统中,通常需要对多个服务器上应用系统的配置信息进行统一管理,zookeeper的配置管理功能就体现在这里。将配置信息保存在zookeeper的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器都会收到zookeeper的通知,然后从zookeeper获取新的配置信息到系统中。

    说明:

        zookeeper可以简单的分为两类:leader(唯一)和follower(多个)。leader和follower是相互通信的,zk的数据都是在内存中的,这就保证了它的访问速度,在磁盘中也会有一个备份。如果leader挂了,zk集群会重新选举,在以毫秒级别的速度选出新的leader,除非有一半以上节点都挂了zk服务才会不可用。

    原理:

    数据读写:

        写:当客户端发来写请求时,会指定zk集群中节点,如果是follower接受请求,会将请求转发给leader,leader通过Zab协议进行原子广播,使所有节点都写入数据(内存同步及磁盘更新),最后zk service将响应回传给client。

        读:由于写数据已经使得数据得到了统一,所有读可以在任意一台zk节点上。但是写的时候并不是保证所有节点完成才响应,而是有一半以上完成,所以在读的时候可以获取的不是最新节点信息,可以通过sync()解决。

        常用命令:

bash zkCli.sh -server xxxx:port

ls /

create /configs/test “test”//创建属性

get /configs

set /configs/test1 “test1”//设置属性

delete /configs/test

help

创建节点时不能创建空节点


ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

  • 1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader

  • 2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。

  • 3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。

  • 4. echo kill | nc 127.0.0.1 2181 ,关掉server

  • 5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。

  • 6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。

  • 7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。

  • 8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。

  • 9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。

  • 10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。

  • 11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。


        注意:通过zk UI等用户界面管理配置时,需要留意空格,隐藏在行末的空格可能会影响读取



参考:http://cailin.iteye.com/blog/2014486

http://blog.chinaunix.net/uid-13875633-id-4551483.html