Zookeeper介绍 搭建 集群搭建

关键字:分布式

概念
        Zookeeper是一个分布式的服务协调组件
        

Zookeeper的基础

1. 文件系统
        Zookeeper维护一个类似文件系统的数据结构
        

2. 通知机制
        客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

        Zookeeper可以说就是一个文件系统加通知机制

基本概念

1. 集群角色
        Leader/Follower/Observer
        Leader服务器是整个zk集群工作机制中的核心
        Follower服务器是zk集群状态的跟随着
        Observer服务器充当一个观察者的角色
        
        Leader、Follower 设计模式
        Observer 观察者模式

2. 会话
        会话是指客户端和zk服务器的连接,zk中的会话叫session,客户端靠与服务器建立一个TCP的长连接来维持一个sessino,客户端在启动的时候首先会与服务器建立一个TCP连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向zk服务器发送请求并获得响应。
    
3. 数据节点
        zk中的节点有两类
        1. 集群中的一台机器称为一个节点
        2. 数据模型中的数据单元Znode,分为持久节点和临时节点
            zk的数据模型是一棵树,树的节点就是Znode,Znode中可以保存信息,如下图    
             
    
4. 版本
版本类型
说明
version
当前数据即诶但数据内容的版本号
cversion
当前数据节点子节点的版本号
aversion
当前数据即诶但ACL变更版本号
    
5. watcher
        事件监听器
        zk允许用户在指定节点上注册一些watcher,当数据发生变化的时候,zk服务器回把这个变化通知发送给感兴趣的客户端
        
    

6. ACL权限控制
        ACL是Access Control Lists的简写,zk采用ACL策略来进行权限控制,有以下权限:
        CREATE:创建子节点的权限
        READ:获取节点数据和子节点列表的权限
        WRITE:更新节点数据的权限
        DELETE:删除子节点的权限
        ADMIN:设置即诶但ACL的权限  
  
使用场景

1. 数据发布与订阅
        故名思议就是一方把数据发布出来,另一方通过某种手段可以得到这些数据。通常数据订阅有两种方式:推模式和拉模式。
        推模式一般是服务器主动向客户端推送信息,拉模式是客户端主动去服务器获取数据(通常是采用定时轮询的方式)。
        zk采用两种方式相结合,发布者将数据发布到zk集群节点上,订阅者通过一定的方法告诉服务器,我对哪个节点的数据感兴趣,那服务器在这些节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取信息。

2. 分布通知/协调 
        心跳检测
        在分布式系统中,我们常常需要知道某个机器是否可用,传统开发中,可以通过ping某个机器来实现,ping得通说明对方是可用的,相反是不可用的。zk中我们所有的机器都注册一个临时节点,我们判断一个机器是否可用只需要判断这个节点在zk中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度。

3. 分布式锁 

4. 集群管理 

5. 分布式队列 

6. 命名服务    

Zookeeper的安装和启动
 
下载
        http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz  
        链接:http://pan.baidu.com/s/1nvbCoE9 密码:15gh

安装启动
(自行安装jdk)
1
2
3
4
5
6
7
tar zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6
cd conf
mv zoo_sample.cfg zoo.cfg
cd ..
cd bin
./zkServer.sh start

创建、查询节点
输入:zkCli.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 2] create /rpc jerome
Created /rpc
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, rpc]
[zk: localhost:2181(CONNECTED) 4] ls /rpc
[]
[zk: localhost:2181(CONNECTED) 5] get /rpc
jerome
cZxid = 0x2
ctime = Fri Jul 15 01:50:00 PDT 2016
mZxid = 0x2
mtime = Fri Jul 15 01:50:00 PDT 2016
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

ZooKeeper 集群环境搭建

准备三台虚拟机,这里使用vm+centos 6.4 
1. 安装JDK
    
2. 安装zk
        参考上面

3. 配置zk集群

cd zookeeper-3.4.8/conf/
vim zoo.cfg
1. 修改dataDir存储块的路径:修改的路径记得创建目录,还要在配置的这个目录下面创建一个myid
vim myid,写1,就是下面的service.id ,其他两台分别为2、3
2. 新增服务器列表配置(三台配置一样,2888是Follower和leader通信的端口
server.1 = 192.168.84.141:2888:3888
server.2 = 192.168.84.142:2888:3888
server.3 = 192.168.84.143:2888:3888

#启动zk(分别启动三台)
cd ../bin
./zkServer.sh start 

4. 测试

        验证是否启动成功,telnet 192.168.84.141 2181
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@hadoop bin]# telnet 192.168.84.141 2181
Trying 192.168.84.141...
Connected to 192.168.84.141.
Escape character is '^]'.
stat
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Clients:
 /192.168.84.141:35397[0](queued=0,recved=1,sent=0)
 
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
Connection closed by foreign host.
        只要超过一半的服务器启动,就可以正常的向外服务。

        把其他两台关掉,集群不可用
1
2
3
4
5
6
7
[root@hadoop bin]# telnet 192.168.84.141 2181
Trying 192.168.84.141...
Connected to 192.168.84.141.
Escape character is '^]'.
stat
This ZooKeeper instance is not currently serving requests
Connection closed by foreign host.

参考
        极客学院视频【链接:http://pan.baidu.com/s/1qYKPNyO 密码:nlz3】
相关文章
相关标签/搜索