什么是 zookeeper?

Zookeeper 是google的chubby一个开源实现,是hadoop的分布式协调服务

它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

在Hbase中会用到。

Zk(zookeeper简称)可以用来保证数据在zk集群之间的数据的事物性一致。

Zk默认数据2M以下。

zookeeper架构图

如何搭建Zookeeper服务器集群

zk服务器集群规模不小于3节点,要求服务器之间系统时间要保持一致。

将下载的zookeeper复制到/usr/local 里,解压:

tar –zxvf  zookeeper-3.4.5.tar.gz

重命名:

mv  zookeeper-3.4.5.tar.gz zk

在hadoop的/usr/local目录下,解压缩zk….tar.gz,设置环境变量

设置环境变量:

加入:

export  ZOOKEEPER_HOME=/usr/local/zk

在PATH 后面追加:

:$ZOOKEEPER_HOME/bin

使环境变量生效:

source /etc/profile

在conf目录下,修改文件

mv  zoo_sample.cfg  zoo.cfg
[root@hadoop zk]# cd conf
[root@hadoop conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@hadoop conf]# mv zoo_sample.cfg zoo.cfg
[root@hadoop conf]# ls
configuration.xsl  log4j.properties  zoo.cfg

编辑该文件:

vi zoo.cfg

修改dataDir=/usr/local/zk/data

新增

server.0=hadoop:2888:3888
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888

这里讲下zookeeper的角色:

领导者(leader):负责投票的发起和决议,更新系统状态

学习者(learner):包括追随者(follower)和观察者(observer),follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票。

observer 可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

客户端(client),请求发起方。

创建文件夹 :

进入zk文件夹下,创建data文件夹。

[root@hadoop zk]# mkdir data

在data目录下,创建文件myid,值为0

[root@hadoop zk]# cd data
[root@hadoop data]# ls
[root@hadoop data]# vi myid  

把zk目录复制到hadoop1和hadoop2中

scp  -r  zk hadoop1:/usr/local
scp  -r  zk hadoop2:/usr/local

环境变量也要复制过去

[root@hadoop local]# scp /etc/profile  hadoop1:/etc/
profile                            100% 2037     2.0KB/s  00:00
[root@hadoop local]# scp /etc/profile  hadoop2:/etc/
profile                            100% 2037     2.0KB/s  00:00

记得在hadoop1和hadoop2节点上:

source /etc/profile

使环境变量生效

把hadoop1中相应的myid的值改为1,把hadoop2中相应的myid的值改为2

[root@hadoop local]# ssh hadoop1
Last login: Mon May 11 08:22:01 2015 fromhadoop
[root@hadoop1 ~]# vi /usr/local/zk/data
[root@hadoop1 ~]# vi /usr/local/zk/data/myid
 [root@hadoop1~]# exit
logout
Connection to hadoop1 closed.
[root@hadoop local]# ssh hadoop2
Last login: Mon May 11 08:21:48 2015 fromhadoop
[root@hadoop2 ~]# vi /usr/local/zk/data/myid
[root@hadoop2 ~]# exit
logout
Connection to hadoop2 closed.

启动,在三个节点上分别执行命令zkServer.sh start

[root@hadoop zk]# cd bin
[root@hadoop bin]# ls
README.txt   zkCli.cmd  zkEnv.cmd  zkServer.cmd
zkCleanup.sh zkCli.sh   zkEnv.sh   zkServer.sh
[root@hadoop bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

其他两个节点类似上面操作

[root@hadoop bin]# ssh hadoop1
Last login: Mon May 11 08:24:36 2015 fromhadoop
 [root@hadoop1~]# cd /usr/local
[root@hadoop1 local]# cd zk
[root@hadoop1 zk]# cd bin
[root@hadoop1 bin]# ls
README.txt   zkCli.cmd  zkEnv.cmd  zkServer.cmd
zkCleanup.sh zkCli.sh   zkEnv.sh   zkServer.sh
[root@hadoop1 bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@hadoop1 bin]# ssh hadoop2
Last login: Mon May 11 08:25:52 2015 fromhadoop
[root@hadoop2 ~]# cd /usr/local/zk/bin
[root@hadoop2 bin]# zkServer.sh start
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

检验,在三个节点上分别执行命令zkServer.sh status

查看选举结果:

[root@hadoop2 bin]# zkServer.sh status
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Mode: follower

[root@hadoop1 bin]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo.cfg
Mode: leader

[root@hadoop bin]# zkServer.sh status
JMX enabled by default
Using config:/usr/local/zk/bin/../conf/zoo.cfg
Mode: follower

Zookeeper的使用(命令行操作)

Zookeeper有目录结构,称作节点,节点可以赋值,可以添加,可以删除

终端:zkCli.sh 可以进入命令行

[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls/zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 4] ls/zookeeper/quota
[]

创建了一个节点,给它赋值hadoop,通过get 命令获得它的值。

[zk: localhost:2181(CONNECTED) 5] create/cloud  hadoop
Created /cloud
[zk: localhost:2181(CONNECTED) 6] ls /
[cloud, zookeeper]
[zk: localhost:2181(CONNECTED) 7] get /cloud
hadoop
cZxid = 0x100000002
ctime = Mon May 11 10:07:07 CST 2015
mZxid = 0x100000002
mtime = Mon May 11 10:07:07 CST 2015
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

可以set 设置值 你会发现在其他的两个zookeeper服务器上,会获得这个值,也就是所谓的事物一致性。

Zookeeper的节点

Znode有两种类型,短暂的和持久的。

Znode的类型在创建时确定给并且之后不能 在修改。

短暂znode的客户端会话结束时,zookeeper会将该短暂的znode删除,短暂znode不可以有子节点。

持久znode不依赖与客户端会话,只有当客户端明确要删除该持久znode时才会被删除。

分布式协调服务-Zookeeper的更多相关文章

  1. 分布式协调服务Zookeeper集群之ACL篇

    分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...

  2. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  3. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  4. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

  5. 搞懂分布式技术3:初探分布式协调服务zookeeper

    搞懂分布式技术3:初探分布式协调服务zookeeper 1.Zookeepr是什么 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡, ...

  6. 分布式协调服务ZooKeeper工作原理

    分布式协调服务ZooKeeper工作原理 原创 2016-02-19 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 大数据处理框架Hadoop.R ...

  7. 1.9 分布式协调服务-Zookeeper(一)

    前言 分布式环境的特点 分布性 并发性 程序运行过程中,并发性操作是很常见的.比如同一个分布式系统中的多个节点,同时访问一个共享资源.数据库.分布式存储 无序性 进程之间的消息通信,会出现顺序不一致问 ...

  8. 中小型研发团队架构实践八:分布式协调服务ZooKeeper

    一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. ZooKeeper ...

  9. 中小型研发团队架构实践:分布式协调服务ZooKeeper

    一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. 相关厂商内容 优秀 ...

随机推荐

  1. Python数据结构之四——set(集合)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...

  2. iOS中的定时器

    据我所知,iOS中的定时器有两种.一个叫NSTimer,一个叫CADisplayLink.还有一种是使用GCD,不常用,这里就不介绍了. 下边说下两个定时器分别得用法: =============== ...

  3. PHP动态编译出现Cannot find autoconf的解决方法

    wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz tar -zvxf m4-.tar.gz cd m4-/ ./configure && m ...

  4. dubbox系列【四】——使用dubbo-monitor-x监控注册中心

    1.下载源码,编译成war包 源码下载地址为:https://git.oschina.net/yjmyzz/dubbo-monitor.git 在pom.xml文件所在目录,直接执行mvn packa ...

  5. JS Cookie丢失问题

    JS Cookie丢失问题 前些天有人问我vue中使用proxy发送请求,为什么请求时cookie丢失,首先说一下我对cookie的理解: 1.cookie在正常情况下是会在每次请求时自动携带, 2. ...

  6. java并发 - 自底向上的原理分析

    [TOC] 事先声明,我只是java并发的新手,这篇文章也只是我阅读<java并发编程的艺术>一书(内容主要涉及前3章)的一些总结和感悟.希望大家能多多讨论,对于错误的地方还请指出. 0. ...

  7. uva11400 动态规划

    没种电压灯泡要么全换,要么不换.状态d(i)表示前i种灯泡的最低价格. 转移方程: dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*d[i].c+d[i].k); AC代码: #i ...

  8. HDU - 1847 巴什博弈

    思路:    0  1  2  3  4  5  6  7  8  9 10 11 12    P N  N P  N N  P N N  P N   N   P 不难发现:当n为三的倍数时,KIKI ...

  9. java.net.UnknownHostException

    java.net.UnknownHostException 错误解决方向 查看 测试真机或者模拟机是否连上了网络.     如果不是第一步错误的话,一般就是测试机没有链接上网络,可以打开个网页或者其他 ...

  10. Quartz基本使用

    1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样.在了解它之前,首先熟悉几个概念. 2.基本概念 2.1 Job:表示一个工作,要执行的具体内容. ...