zookeeper

  1. 1.管理大量主机的协同服务。
  2. 2.分布式应用,实现分布式读写技术。
  3. 3.zk提供的服务
  4. Naming service //按名称区分集群中的节点.
  5. Configuration management //对加入节点的最新化处理。
  6. Cluster management //实时感知集群中节点的增减.
  7. Leader election //leader选举
  8. Locking and synchronization service //修改时锁定数据,实现容灾.
  9. Highly reliable data registry //节点宕机数据也是可用的。

zk安装(单机版,s201)

  1. 1.jdk
  2. 2.下载zookeeper-3.4.9.tar.gz
  3. 3.tar
  4. 4.符号连接环境变量
  5. $>ln -s zookeeper-3.4.9 zk
  6. 5.配置zk,复制zoo.cfg.sample-->zoo.cfg
  7. [zk/conf/zoo.conf]
  8. # The number of milliseconds of each tick
  9. tickTime=2000
  10. initLimit=10
  11. syncLimit=5
  12. dataDir=/home/centos/zookeeper
  13. clientPort=2181
  14. 6.启动zk服务器
  15. $>bin/zkServer.sh start
  16. 7.验证zk
  17. $>netstat -anop | grep 2181
  18. 8.启动客户端连接到服务器
  19. $>zkCli.sh -server s201:2181 //进入zk命令行
  20. $zk]help //查看帮助
  21. $zk]quit //退出
  22. $zk]create /a tom //
  23. $zk]get /a //查看数据
  24. $zk]ls / //列出节点
  25. $zk]set /a tom //设置数据
  26. $zk]delete /a //删除一个节点
  27. $zk]rmr /a //递归删除所有节点。
  28. 9.通过api访问zk
  29. 9.1[pom.xml]
  30. <?xml version="1.0" encoding="UTF-8"?>
  31. <project xmlns="http://maven.apache.org/POM/4.0.0"
  32. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  33. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  34. <modelVersion>4.0.0</modelVersion>
  35. <groupId>com.it18zhang</groupId>
  36. <artifactId>ZooKeeperDemo</artifactId>
  37. <version>1.0-SNAPSHOT</version>
  38. <dependencies>
  39. <dependency>
  40. <groupId>org.apache.zookeeper</groupId>
  41. <artifactId>zookeeper</artifactId>
  42. <version>3.4.9</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>junit</groupId>
  46. <artifactId>junit</artifactId>
  47. <version>4.11</version>
  48. </dependency>
  49. </dependencies>
  50. </project>
  51. 9.2[代码]
  52. package com.it18zhang.zktest;
  53. import org.apache.zookeeper.ZooKeeper;
  54. import org.junit.Test;
  55. import java.util.List;
  56. */
  57. public class TestZK {
  58. @Test
  59. public void ls() throws Exception{
  60. ZooKeeper zk = new ZooKeeper("s201:2181",5000,null);
  61. List<String> list = zk.getChildren("/",null);
  62. for(String s : list){
  63. System.out.println(s);
  64. }
  65. }
  66. }

zk架构

  1. 1.Client
  2. server获取信息,周期性发送数据给server,表示自己还活着。
  3. client连接时,server回传ack信息。
  4. 如果client没有收到reponse,自动重定向到另一个server.
  5. 2.Server
  6. zk集群中的一员,向client提供所有service,回传ack信息给client,表示自己还活着。
  7. 3.ensemble
  8. 一组服务器。
  9. 最小节点数是3.
  10. 4.Leader
  11. 如果连接的节点失败,自定恢复,zk服务启动时,完成leader选举。
  12. 5.Follower
  13. 追寻leader指令的节点。

znode

  1. zk中的节点,维护了stat,由Version number, Action control list (ACL), Timestamp,Data length.构成.
  2. data version //数据写入的过程变化
  3. ACL //action control list,

节点类型

  1. 1.持久节点
  2. client结束,还存在。
  3. 2.临时节点
  4. client活动时有效,断开自动删除。临时节点不能有子节点。
  5. leader推选是使用。
  6. 3.序列节点
  7. 在节点名之后附加10个数字,主要用于同步和锁.

Session

  1. Session中的请求以FIFO执行,一旦client连接到serversession就建立了。sessionid分配client.
  2. client以固定间隔向server发送心跳,表示sessionvalid的,zk集群如果在超时时候,没有收到心跳,
  3. 判定为client挂了,与此同时,临时节点被删除。

Watches

  1. 观察。
  2. client能够通过watch机制在数据发生变化时收到通知。
  3. client可以在read 节点时设置观察者。watch机制会发送通知给注册的客户端。
  4. 观察模式只触发一次。
  5. session过期,watch机制删除了。

zk工作流程

  1. zk集群启动后,client连接到其中的一个节点,这个节点可以leader,也可以follower
  2. 连通后,node分配一个idclient,发送ack信息给client
  3. 如果客户端没有收到ack,连接到另一个节点。
  4. client周期性发送心跳信息给节点保证连接不会丢失。
  5. 如果client读取数据,发送请求给nodenode读取自己数据库,返回节点数据给client.
  6. 如果client存储数据,将路径和数据发送给serverserver转发给leader
  7. leader再补发请求给所有follower。只有大多数(超过半数)节点成功响应,则
  8. 写操作成功。

QJM

User Group Other

rwx rwx rwx