zookeeper是什么?

highly reliable distributed coordination,用来做高可靠的分布式协调者,可用来:

  • 业务发现(service discovery)找到分布式系统中存在那些可用的服务和节点
  • 名字服务 (name service)通过给定的名字知道到对应的资源
  • 配置管理 (configuration management)如何在分布式的节点中共享配置文件,保证一致性。
  • 故障发现和故障转移 (failure detection and failover)当某一个节点出故障的时候,如何检测到并通知其它节点, 或者把想用的服务转移到其它的可用节点
  • 领导选举(leader election)如何在众多的节点中选举一个领导者,来协调所有的节点
  • 分布式的锁 (distributed exclusive lock)如何通过锁在分布式的服务中进行同步
  • 消息和通知服务 (message queue and notification)如何在分布式的服务中传递消息,以通知的形式对事件作出主动的响应

zk快速启动

  1. 下载官方版本:zookeeper-3.4.10.jar
  2. 解压到/usr/locak/zookeeper
  3. 配置文件,这里用单机来搭三个节点,生产时得分布在不同机器
  4. 集群模式配置文件
[root@c7bit1 conf]# cat zk2181.conf
dataDir=/data/zookeeper/data2181
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840 [root@c7bit1 conf]# cat zk2182.conf
dataDir=/data/zookeeper/data2182
clientPort=2182
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840 [root@c7bit1 conf]# cat zk2183.conf
dataDir=/data/zookeeper/data2183
clientPort=2183
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840

5.配置参数介绍

dataDir:Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

tickTime: Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

6.启动zk

[root@c7bit1 bin]# cd /usr/local/zookeeper/bin/
[root@c7bit1 bin]# ./zkServer.sh start /data/zookeeper/conf/zk2181.conf
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/conf/zk2181.conf
Starting zookeeper ... STARTED 同理启动另外两个节点:
./zkServer.sh start /data/zookeeper/conf/zk2182.conf
./zkServer.sh start /data/zookeeper/conf/zk2183.conf

7.基本命令使用

ZooKeeper -server host:port cmd args
如:
./zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 ls /
当然也可以只联接单个server,如:
./zkCli.sh -server 127.0.0.1:2181 后面如果不加命令,则进入交互模式。
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port 创建一个新节点
[zk: 127.0.0.1:2181(CONNECTED) 20] create /name "abc"
Created /name 列出节点
[zk: 127.0.0.1:2181(CONNECTED) 23] ls /
[name, zookeeper] 获取一个节点的值
[zk: 127.0.0.1:2181(CONNECTED) 21] get /name
abc
cZxid = 0x60000001c
ctime = Thu Nov 29 21:33:31 CST 2018
mZxid = 0x60000001c
mtime = Thu Nov 29 21:33:31 CST 2018
pZxid = 0x60000001c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0 设置节点的值
[zk: 127.0.0.1:2181(CONNECTED) 24] set /name '123'
cZxid = 0x60000001c
ctime = Thu Nov 29 21:33:31 CST 2018
mZxid = 0x60000001d
mtime = Thu Nov 29 21:34:51 CST 2018
pZxid = 0x60000001c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0 删除节点
[zk: 127.0.0.1:2181(CONNECTED) 26] delete /name
[zk: 127.0.0.1:2181(CONNECTED) 27] ls /
[zookeeper]

如果是远程shell操作,可以下载zookeepercli-1.0.10-1.x86_64.rpm

下载地址:https://github.com/outbrain/zookeepercli

使用和上面的基本一致

[root@c7bit1 conf]# rpm -ivh zookeepercli-1.0.10-1.x86_64.rpm
[root@c7bit1 conf]# zookeepercli --help
Usage of zookeepercli:
-acls="31": optional, csv list [1|,2|,4|,8|,16|,31]
-auth_pwd="": optional, digest scheme, pwd
-auth_usr="": optional, digest scheme, user
-c="": command, required (exists|get|ls|lsr|create|creater|set|delete|rm|deleter|rmr|getacl|setacl)
-debug=false: debug mode (very verbose)
-force=false: force operation
-format="txt": output format (txt|json)
-servers="": srv1[:port1][,srv2[:port2]...]
-stack=false: add stack trace upon error
-verbose=false: verbose
[root@c7bit1 bin]# zookeepercli -servers 127.0.0.1:2181 -c ls /
zookeeper

zookeeper入门及使用(一)- 安装及操作的更多相关文章

  1. zookeeper入门之介绍与安装

    一:zookeeper是什么 What is ZooKeeper? ZooKeeper is a centralized service for maintaining configuration i ...

  2. [转帖]Zookeeper入门看这篇就够了

    Zookeeper入门看这篇就够了 https://my.oschina.net/u/3796575/blog/1845035 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个 ...

  3. (转)ZooKeeper伪分布式集群安装及使用

    转自:http://blog.fens.me/hadoop-zookeeper-intro/ 前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品.在单机中,系统协作大都是进程级的 ...

  4. zookeeper入门必读

    (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) 今天我想谈谈zookeepe ...

  5. zookeeper入门知识

    ZooKeeper 是什么? ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) .小猪(Pig)  的管理员, Apache Hbase和 Apache ...

  6. ZooKeeper入门

    ZooKeeper简介 ZooKeeper是一个构建在Paxos算法上的高可用的分布式数据管理与系统协调框架,提供了一系列原语集,更上层的应用可以用它来实现同步,配置管理,名称服务,Master选举, ...

  7. zookeeper 入门知识

    作为开启分布式架构的基石,除了必会还有的选么 自己的一些理解,有错误的话请一定要给予指正! 一.是什么? 分布式数据一致性的解决方案. 二.有什么用 数据的发布/订阅(配置中心)  . 负载均衡(du ...

  8. 前端组件化Polymer入门教程(1)——初识&&安装

    前端组件化Polymer入门教程目录: 前端组件化Polymer入门教程(1)--初识&&安装 前端组件化Polymer入门教程(2)--快速入门 前端组件化Polymer入门教程(3 ...

  9. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  10. ZooKeeper系列(2) 安装部署 (转)

    原文地址:http://www.cnblogs.com/wuxl360/p/5817489.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模 ...

随机推荐

  1. ICPC Asia Regional 2015 Japan.Routing a Marathon Race(DFS)

    vjudge \(Description\) 给定一张\(n\)个点\(m\)条边的无向图,每个点有一个权值.求一条从\(1\)到\(n\)的路径,使得代价最小,输出最小代价. 一条路径的代价定义为, ...

  2. BZOJ.2000.[HNOI2010]stone取石头游戏(博弈)

    BZOJ 洛谷 低估这道神题了_(:з」∠)_ MilkyWay好狠啊(小声) \(Description\) 有一些数字,被分成若干双端队列(从两边都可以取)和最多两个栈(只能从某一边一个一个取)的 ...

  3. C语言实现密码修改

    /* *修改密码 *描述: *1.本来已经存在密码 *2.很多时候需要输入两次密码,对比是否正确,才能确认修改密码正确 *敲代码思路: *1.输入旧的密码判断是否正确 *2.提示输入修改后的密码 *3 ...

  4. SpringMVC url匹配却404,SimpleUrlHandlerMapping不起作用

    代码如下: <mvc:default-servlet-handler/> <bean class="org.springframework.web.servlet.hand ...

  5. Python-copy()与deepcopy()区别

    http://blog.csdn.net/qq_32907349/article/details/52190796 学习过程中发现copy()和deepcopy()这对好基友实在是有点过分,搞的博主就 ...

  6. 用Java代码列出一个目录下所有的文件

    1.File类 File类在java.io.File包中,所以要导入这个包. File类中用到的方法: boolean isDirectory()       测试此抽象路径名表示的文件是否是个目录 ...

  7. PAT基础6-1

    6-1 简单输出整数 (10 分) 本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数. 函数接口定义: void PrintN ( int N ); 其中N是用户传入的参数.该函数必须 ...

  8. JS 正则表达式从地址中提取省市县

    var add1 = '四川省西昌市航天路'; var add2 = '北京市北京市东城区前门大街1号' var add3 = '新疆维吾尔自治区乌鲁木齐市天山区中山路479号'; var add4 ...

  9. Centos yum国内源及配置含义

    Centos yum源的位置: /etc/yum.repos.d,可以通过配置文件/etc/yum.conf指定其他位置 主要的yum源种类:前两个是必须的,不然yum安装很多软件时会失败.yum本来 ...

  10. Skyline中加载WMTS地图

    Skyline中默认是Bing地图,必应虽然免费无偏移,但在国内的影像质量并不是很好.不用担心,Skyline支持多种影像图层,包括WFS.WMS.WMTS地图服务.使用地图作为底图有两个好处: (1 ...