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.jdk
2.下载zookeeper-3.4.9.tar.gz
3.tar开
4.符号连接环境变量
$>ln -s zookeeper-3.4.9 zk
5.配置zk,复制zoo.cfg.sample-->zoo.cfg
[zk/conf/zoo.conf]
# The number of milliseconds of each tick
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/centos/zookeeper
clientPort=2181
6.启动zk服务器
$>bin/zkServer.sh start
7.验证zk
$>netstat -anop | grep 2181
8.启动客户端连接到服务器
$>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访问zk
9.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 {
@Test
public 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.Server
zk集群中的一员,向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