大数据学习--zookeeper

大数据学习

–zookeeper

环境:
zookeeper:3.4.8
系统:centos 6.7

1.zookeeper简介

a.简介

zookeeper是一个分布式协调服务,是给用户的分布式应用程序提供协调服务的,他的服务目标是分布式程序
zookeeper本身就是一个分布式程序,只要有半数以上的节点存活,zk就能正常运行
zookeeper所提供的服务有:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务等等
zookeeper底层实质只提供两个服务:

  1. 管理(存储,读取)用户程序提交的数据
  2. 为用户程序提供数据节点监听服务
b.角色描述
  1. Leader:领导者,负责进行投票的发起和决议,更新系统状态
  2. Learner:
    • Follower:用于接受客户请求并向客户端返回结果,在选主过程参与投票
    • Observer:接受用户请求,将请求转发给leader节点,但不参与投票,只同步Leader的状态,增加这个角色目的是为了扩展系统,提高读取速度
  3. Client:请求发起方

zookeeper采用的方式是写任意。通过增加机器,他的吞吐能力和响应能力扩展性非常好,而且,随着机器的增多吞吐能力肯定下降(这也是它建立Observer的原因),而响应能力取决于具体实现方式,是延迟复制保持最终一致性,还是立即复制快速响应。

c.特性
  • zookeeper:一个Leader,多个Follower相组成的集群
  • 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
  • 分布式读写:更新请求转发,由Leader实施
  • 更新请求顺序执行:来自同一个client的更新请求按其发送顺序依次执行
  • 数据更新原子性:一次数据更新要么成功,要么失败
  • 实时性:在一定时间范围内,client能读到最新数据
Server三种状态

每个server在工作过程中有三种状态:
LOOKING:当前Server不知道Leader是谁,正在搜寻
LEADING:当前Server即为选举出的Leader
FOLLOWING:leader已经选举出来,当前Server与之同步

zookeeper选举流程

leader崩溃或者失去大多数follower时,zk进入恢复模式,重新选举出一个新的leader,让所有的server都恢复到一个正确的状态。zk的选举算法有两个:

  • 基于basic paxos算法实现
  • 基于fast paxos算法实现

系统默认的选举算法为fast paxos算法。

d.zookeeper数据结构

  • 层次化的目录结构,命名符合常规文件系统规范
  • 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
  • 节点Znode可以包含数据和子节点(ephemeral类型节点不能有子节点)
  • 客户端应用可以在节点上设置监视器

    监视器:客户端可以在节点上设置watch,我们叫监视器,当节点状态发生改变的时候,如数据的增、删、改,将会触发监视器,这是,zk会向客户端发送且仅发送一条通知,因为watch只能触发一次,触发后就被销毁了
    Znode有两种类型

    • 短暂(ephemeral):server断开连接时自己删除
    • 持久(persistent)server断开连接不删除

    Znode有四种形式的目录节点(默认是persistent)

    • PERSISTENT
    • PERSISTENT_SEQUENTIAL(持久序列/test0000000019)
    • EPHENERAL
    • EPHENERAL_SEQUENTIAL
      创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

2.zookeeper的安装与配置

zookeeper下载地址
我们下载zookeeper-3.4.8
上传,解压到/usr/目录

配置
首先配置环境变量
vim /etc/profile
我们在文件尾加上

export ZOOKEEPER_HOME=/usr/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER/bin    


然后别忘了source /etc/profile
然后我们需要配置/zookeeper-3.4.8/conf/zoo.cfg文件
vim /usr/zookeeper-3.4.8/conf/zoo.cfg
我们在文件末加入

dataDir= /usr/zookeeper-3.4.8/data
dataLogDir= /usr/zookeeper-3.4.8/log
server.1=cbw:2888:3888
server.2=cbw1:2888:3888
server.3=cbw2:2888:3888


dataDir有时候zookeeper自带,我们就不需要加,我们加上后面的就行
注意:cbw:主机名,2888:心跳端口,3888数据端口
我们只需要修改主机名就行,然后server.x这个x表示你有多少台服务器,比如我有3台,我就要写到server.3,然后每个后面的主机名都要改成那台服务器的主机名。
之后,我们需要到/usr/zookeeper-3.4.8/目录下创建data和log这两个文件夹,有时候zookeeper自带了data,那么我们只需要创建log文件夹就行

mkdir -m 755 data
mkdir -m 755 log

然后我们在data目录下创建myid文件,并向其中写入1

touch myid
vim myid


最后一步,分发

scp /etc/profile cbw1:/etc
scp -r /usr/zookeeper-3.4.8 cbw1:/usr

然后到cbw1这台机上
source /etc/profile
并且修改myid文件
vim /usr/zookeeper-3.4.8/data/myid
修改内容为2,因为我们在zoo.cfg中写的,cbw1对应的是server.2
同理cbw2也是要这样写,这样我们zookeeper集群就搭建完毕

3.zookeeper命令

启动zookeeper服务
zkServer.sh start

查看zookeeper状态
zkServer.sh status

停止zookeeper服务
zkServer.sh stop

连接
zkCli.sh

Create命令
create [-e] [-s] path data acl

  • path指定节点路径
  • data指定需要存放的数据(状态信息)
    创建临时节点
    create -e

    注意:临时节点是不能有子节点的

    创建永久节点
    create /zk_test data

    创建临时有序节点
    create -e -s /zk_test data

    创建永久有序节点
    create -s /zk_test data

    删除节点
    delete /zk_test
    rmr /zk_test
    注意:delete不能删除节点下不为空的节点,而rmr可以递归删除
    我们在永久的节点下面创建有序永久节点,如果我们之前在/zk_test下面有3个临时的有序节点,之后客户端断开之后被删除,这个时候你再这个节点创建有序节点的时候,编号不是从0开始,而是从你之前的序号之后开始递增。

    4.zookeeper ACL


 上一篇
大数据学习--小实验 大数据学习--小实验
大数据学习– 小实验 环境:idea:ultimate 2018.1系统:windows10 家庭版 1.Count计数器 2.自定义计数器(1)枚举类型在mapper中定义CustomCount枚举类型 enum CustomCou
2019-04-18
下一篇 
大数据学习--MapReduce程序编写 大数据学习--MapReduce程序编写
大数据学习–MapReduce程序编写 环境:idea: ultimate 2018.1 运行流程示意图以wordCount为例 Mapper:数据输入进来的第一步,可以定制键值对Mapper类需要继承Mapper父类 public
2019-04-18
  目录