Zookeeper基础1

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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

Zookeeper基础1