分布式协作框架 Zookeeper

简介

分布式应用的协调框架, 基于观察者模式设计
用于管理NameNode,类似于管家功能

优点:
   1、可靠性: 2n+1
   2、可扩展性:需要增加机器时,少许修改即可,且不用冷启动(停机)
   3、同步: 服务器进程之间的像话排斥和协作,此过程有助于Apache HBase 进行配置管理
   4、原子性:数据转移完全成功或完全失败,但没有事物是部分的?
   5、序列化: 根据特定规则对数据进行编码。确保应用程序运行一致,这种方法可以在Mapreduce中用来协调队列以执行运行的线程

客户端-服务器架构

Client (客户端)
      分布式应用集群中的一个节点,从服务器访问信息
      每个一定时间,客户端向服务器发送消息告之其存活
      客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另外一个服务器

Server (服务器)
      为客户端提供所有的服务,想客户端发送确认码已告知服务器是活跃的。

Ensemble
      Zookeeper 服务器组。形成 ensemble 所需的节点数为 3。

Leader
      服务器节点, 如果任何连接的节点失败,则执行自动恢复。Leader在服务启东时被选举。

Folloer
      跟随 Leader 指令的服务器节点。

ZooKeeper文件系统的树结构

ZooKeeper 节点称为 znode, 每个 znode 由一个名称标识, 并用路径 (/)序列分隔

首先有一个由 “/” 分隔的 znode。 在根目录下,有两个逻辑命命名空间 config 和workers。
config:命名空间用于集中式配置管理
        每个znode 最多可存储 1MB 的数据
worker:命名空间用于命名

Znode 的类型
持久节点:
        1. 即使在创建该特定 znode 的客户端断开连接后,持久节点仍然存在
        2. 默认情况下,所有 znode 都是持久化的。

临时节点:
        1. 客户端活跃时,临时及诶单就是有效的。 当客户端与 ZooKeeper 集合断开连接时,临时节点会自动删除
        2. 只有临时节点不允许有子节点
        3. 临时节点在 leader 选举中起着重要作用

顺序节点:
        1. 顺序节点可以是持久的或临时的。
        2. 当一个新的 znode 被创建为一个顺序节点时,zookeeper 通过将 10 位的序列号附加到原始名称来设置 znode 的路径,
        3. 顺序节点在锁定和同步中起重要作用


单机模式

解压安装包
      tar -zxf zookeeper-3.4.10.tar.gz -C /opt/moduels

修改配置文件
     修改文件名 conf/zoo_sample.cfg -> /conf/zoo.cfg
            mv conf/zoo_sample.cfg /conf/zoo.cfg
     制定本地存储数据的路径:zoo.cfg
           # the directory where the snapshot is stored.
           # do not use /tmp for storage, /tmp here is just
           # example sakes.
           dataDir=/opt/modules/zookeeper-3.4.5/data/zkData (myid文件的路径)

启动服务端
       bin/zkServer.sh start

查看状态
       bin/zkServer.sh status

启动客户端
       bin/zkCli.sh

分布式模式

解压安装包
    tar -zxf zookeeper-3.4.10.tar.gz -C /opt/app

修改配置文件
     修改文件名 conf/zoo-simple.cfg /conf/zoo.cfg
               cp  conf/zoo-simple.cfg /conf/zoo.cfg
     制定本地存储数据的路径 zoo.cfg
              dataDir=/opt/app/zookeeper-3.4.5/data/zkData (myid文件的路径)
      添加服务端
              server.1=192.168.47.135:2888:3888   编号1
              server.2=192.168.47.133:2888:3888   编号2
              server.3=192.168.47.132:2888:3888   编号3
     
      修改 /data/zkData, 如果没有,就创建该目录
              vi myid
                 写入本机及其编号: 1

分发文件到其他主机上
       scp -r zookeeper-3.4.10/ 192.168.47.133:/opt/app/
       scp -r zookeeper-3.4.10/ 192.168.47.132:/opt/app/
       修改每个机器上的myid: 2,3,...


分别启动服务端
       bin/zkServer.sh start

分别查看状态
       bin/zkServer.sh status

可能出现的问题

1. 配置myid的问题。
   其路径就是我们配置的路径。dataDir=/opt/app/zookeeper-3.4.5/data/zkData
   如果配置错误,在查看状态时,会有提示 conf配置错误。

2. 需要删除 zoo_sample.cfg
   两个 zoo *** 不可能共存,否则在查看状态时也会提示server的问题
   It is probably not running

3. 有时在 bin/zkServer.sh status 会发生 java.net.ConnectException: Connection refused 的问题
   可以分别启动所有的节点,并通过jps来查看进程是否开启,最后再用 bin/zkServer.sh status。
   我在第一个节点上始终都会发生这种情况,但是都启动完成后,再次看第一个节点却发现正常了。
   如果无法 stop ,可以使用kill 来杀掉该进程,再次start即可。

猜你喜欢

转载自blog.csdn.net/dec_sun/article/details/88084112
今日推荐