zookeeper
1.管理大量主机的协同服务。2.分布式应用,实现分布式读写技术。3.zk提供的服务Naming service //按名称区分集群中的节点.Configuration management //对加入节点的最新化处理。Cluster management //实时感知集群中节点的增减.Leader election //leader选举Locking and synchronization service //修改时锁定数据,实现容灾.Highly reliable data registry //节点宕机数据也是可用的。
zk安装(单机版,s201)
1.jdk2.下载zookeeper-3.4.9.tar.gz3.tar开4.符号连接环境变量$>ln -s zookeeper-3.4.9 zk5.配置zk,复制zoo.cfg.sample-->zoo.cfg[zk/conf/zoo.conf]# The number of milliseconds of each ticktickTime=2000initLimit=10syncLimit=5dataDir=/home/centos/zookeeperclientPort=21816.启动zk服务器$>bin/zkServer.sh start7.验证zk$>netstat -anop | grep 21818.启动客户端连接到服务器$>zkCli.sh -server s201:2181 //进入zk命令行$zk]help //查看帮助$zk]quit //退出$zk]create /a tom //$zk]get /a //查看数据$zk]ls / //列出节点$zk]set /a tom //设置数据$zk]delete /a //删除一个节点$zk]rmr /a //递归删除所有节点。9.通过api访问zk9.1[pom.xml]<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.it18zhang</groupId><artifactId>ZooKeeperDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.9</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency></dependencies></project>9.2[代码]package com.it18zhang.zktest;import org.apache.zookeeper.ZooKeeper;import org.junit.Test;import java.util.List;*/public class TestZK {@Testpublic void ls() throws Exception{ZooKeeper zk = new ZooKeeper("s201:2181",5000,null);List<String> list = zk.getChildren("/",null);for(String s : list){System.out.println(s);}}}
zk架构
1.Client从server获取信息,周期性发送数据给server,表示自己还活着。client连接时,server回传ack信息。如果client没有收到reponse,自动重定向到另一个server.2.Serverzk集群中的一员,向client提供所有service,回传ack信息给client,表示自己还活着。3.ensemble一组服务器。最小节点数是3.4.Leader如果连接的节点失败,自定恢复,zk服务启动时,完成leader选举。5.Follower追寻leader指令的节点。
znode
zk中的节点,维护了stat,由Version number, Action control list (ACL), Timestamp,Data length.构成.data version //数据写入的过程变化ACL //action control list,
节点类型
1.持久节点client结束,还存在。2.临时节点在client活动时有效,断开自动删除。临时节点不能有子节点。leader推选是使用。3.序列节点在节点名之后附加10个数字,主要用于同步和锁.
Session
Session中的请求以FIFO执行,一旦client连接到server,session就建立了。sessionid分配client.client以固定间隔向server发送心跳,表示session是valid的,zk集群如果在超时时候,没有收到心跳,判定为client挂了,与此同时,临时节点被删除。
Watches
观察。client能够通过watch机制在数据发生变化时收到通知。client可以在read 节点时设置观察者。watch机制会发送通知给注册的客户端。观察模式只触发一次。session过期,watch机制删除了。
zk工作流程
zk集群启动后,client连接到其中的一个节点,这个节点可以leader,也可以follower。连通后,node分配一个id给client,发送ack信息给client。如果客户端没有收到ack,连接到另一个节点。client周期性发送心跳信息给节点保证连接不会丢失。如果client读取数据,发送请求给node,node读取自己数据库,返回节点数据给client.如果client存储数据,将路径和数据发送给server,server转发给leader。leader再补发请求给所有follower。只有大多数(超过半数)节点成功响应,则写操作成功。
QJM
User Group Other
rwx rwx rwx
