美文网首页
ZooKeeper简介

ZooKeeper简介

作者: 糊涂蟲 | 来源:发表于2018-08-23 16:47 被阅读0次

1、什么是zookeeper

 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

  ZooKeeper致力于开发和维护一个开放源代码的服务,它支持高度可靠的分布式协调。

2、zookeeper使用场景

  1)高可用(HA):HDFS/HBase/Spark(on yarn 不需要)

  2)API   :ZK自带/curator  

                    开发:Java/Scala 操作zk

                    Kafka:offset可以存储在zk        ==>    实时流处理:Kafka+Streaming  zero  data  lost

3、分布式系统

统一的NN进行访问  active(x)  standby(√)(主备,主若挂了备用启动)

4、ZK集群

一般是2*n+1 (n>=1)   必须是奇数

N个节点的 Redis/......     相同的配置文件

1: /ruozedata/conf/ruoze.conf     

             port = 8888   将配置信息放到zookeeper上

2:watch

            ........download........

3:...................

5、环境搭建

1)下载  weget :到~/software文件夹

2)解压到~/app

tar xzvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ~/app/

3)配置环境变量后生效

vi ~/.bash_profile

export ZK_HOME=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0

export PATH=$ZK_HOME/bin:$PATH

source ~/.bash_profile

4)修改配置文件

cp zoo_sample.cfg zoo.cfg

dataDir=/home/hadoop/app/tmp/zookeeper

5)启动

[hadoop@hadoop000 bin]$ ./zkServer.sh start

JMX enabled by default

Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg

6) 检测

[hadoop@hadoop000 bin]$ jps

5122 QuorumPeerMain

或者使用status查看状态

Mode: standalone

6、ZK的基本数据类型

一个树形结构(类似linux、hdfs)

znode:zk目录每个节点对应一个znode,每个znode维护这一个属性,当前版本、数据版本、建立时间和修改时间等。

Znode分为临时节点和永久节点

临时:当前窗口有效,该节点下不可挂节点

永久:所有窗口有效,节点下可挂节点  类似udf

特点:

znode:id(不会重) ==> id  -> pid

znode:data  change  ===>version +1

数据很小

7、常用命令

ls:查看目录

get: 查看文件详细信息

ls2: ls + get   但不能查看到内容

create:创建节点

    -e:临时节点

    -s:顺序节点

ruoze-data            值

cZxid = 0x2            节点创建时间所对应的Zxid格式时间戳

ctime = Sat Aug 11 16:38:45 CST 2018            

mZxid = 0x2            节点修改时间所对应的Zxid格式时间戳

mtime = Sat Aug 11 16:38:45 CST 2018

pZxid = 0x2               最新修改的Zxid

cversion = 0                节点所拥有子节点被修改的版本号

dataVersion = 0            数据版本号

aclVersion = 0                

ephemeralOwner = 0x0        默认是永久节点

dataLength = 10            数据长度

numChildren = 0            子节点个数

顺序节点:

[zk: localhost:2181(CONNECTED) 2] create -s /ruoze/sss sssCreated /ruoze/sss0000000000

[zk: localhost:2181(CONNECTED) 3] create -s /ruoze/sss sssCreated /ruoze/sss0000000001

[zk: localhost:2181(CONNECTED) 4] create -s /ruoze/sss sssCreated /ruoze/sss0000000002

修改数据set:   [zk: localhost:2181(CONNECTED) 6] set /ruoze new-data

数据  相对应的值,长度,版本号都会变好

删除数据:

[zk: localhost:2181(CONNECTED) 7] ls /ruoze[sss0000000001, sss0000000002, sss0000000000]

[zk: localhost:2181(CONNECTED) 9] delete /ruoze/sss0000000001

[zk: localhost:2181(CONNECTED) 10] ls /ruoze[sss0000000002, sss0000000000]

set 和 delete 要注意version,这个时候如果选错version值,会产生乐观锁

    乐观锁:是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

    悲观锁:很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

8、ZK的四字命令

conf:打印服务的配置文件

cons:

crst:

9、ZK的集群

        主从节点

        选举机制:如果有3个zk节点,主节点挂了,通过选举从节点中一个自动变为主,此时如果原先挂掉的主节点恢复了,则变为从节点

        伪分布式:1台机器上搭建多个ZK节点

        [hadoop@hadoop001 app]$ cp -r zookeeper-3.4.5-cdh5.7.0 zk001

        [hadoop@hadoop001 conf]$ vi zoo.cfg

        dataDir=/home/hadoop/app/tmp/zookeeper001

        server.1 = localhost:2888:3888

        server.2 = localhost:2889:3889

        server.3 = localhost:2890:3890

然后到app目录下 

        [hadoop@hadoop001 app]$ cp -r zk001/ zk002

        [hadoop@hadoop001 app]$ cp -r zk001/ zk003

        修改对应的zoo.cfg

在dataDir目录下创建myid ,并分配对应的值

启动每个节点的服务,后jps 查看

[hadoop@hadoop001 bin]$ ./zkServer.sh start

JMX enabled by default

Using config: /home/hadoop/app/zk003/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[hadoop@hadoop001 bin]$ jps

3527 QuorumPeerMain

3497 QuorumPeerMain

3613 Jps

3582 QuorumPeerMain

查看状态

zk002为leader  zk001 和zk003为follower

Using config: /home/hadoop/app/zk001/bin/../conf/zoo.cfg

Mode: follower

Using config: /home/hadoop/app/zk002/bin/../conf/zoo.cfg

Mode: leader

Using config: /home/hadoop/app/zk003/bin/../conf/zoo.cfg

Mode: follower

真正的分布式:

dataDir=/home/hadoop/app/tmp/zookeeper

server.1=ruoze-hadoop000:2888:3888

server.2=ruoze-hadoop001:2888:3888

server.3=ruoze-hadoop002:2888:3888

在以下目录创建该文件,文件中写id号${dataDir}/myid     

10、watch

针对每个节点的操作,都有一个监督站:watcher

zk里面的watcher是一次性的,如果使用curator,可以一直监听

    NodeDeleted

    NodeDataChanged

    NodeCreated

相关文章

网友评论

      本文标题:ZooKeeper简介

      本文链接:https://www.haomeiwen.com/subject/grzlbftx.html