Zookeeper-5分钟快速掌握分布式应用程序协调服

一、Zookeeper 安装

1.zookeeper支持brew安装。

➜  ~ brew info zookeeper
zookeeper: stable 3.4.10 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zookeeper.rb
==> Requirements
Optional: python ✔
==> Options
--with-perl
    Build Perl bindings
--with-python
    Build with python support
--HEAD
    Install HEAD version
==> Caveats
To have launchd start zookeeper now and restart at login:
  brew services start zookeeper
Or, if you don't want/need a background service you can just run:
  zkServer start

通过brew install zookeeper 安装:

➜  ~ brew install zookeeper
Please wait for it to finish or terminate it to continue.
==> Downloading https://homebrew.bintray.com/bottles/zookeeper-3.4.10.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring zookeeper-3.4.10.sierra.bottle.tar.gz
==> Caveats
To have launchd start zookeeper now and restart at login:
  brew services start zookeeper
Or, if you don't want/need a background service you can just run:
  zkServer start
==> Summary
?  /usr/local/Cellar/zookeeper/3.4.10: 241 files, 31.4MB

在/usr/local/etc/zookeeper/目录下,已经有了缺省的配置文件

➜  zookeeper ll
total 32
-rw-r--r--  1 huangweijie  admin    67B  9  4 22:13 defaults
-rw-r--r--  1 huangweijie  admin   339B  9  4 22:13 log4j.properties
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo.cfg
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo_sample.cfg

zookeeper 默认配置文件内容:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/var/run/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

配置文件主要作用为以下几个:

tickTime=2000
dataDir=/usr/local/zk/data
dataLogDir=/usr/local/zk/dataLog        
clientPort=2181

启动服务

zkServer

1.zkServer --查看服务目录

➜  zookeeper zkServer
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

2.zkServer start --启动服务

➜  zookeeper zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

3.zkServer status--查看服务状态

➜  zookeeper zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Mode: standalone

4.zkServer stop --关闭服务

➜  zookeeper zkServer stop
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Stopping zookeeper ... STOPPED

zkClient

➜  ~ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

其他操作系统的安装教程可参考:

http://www.cnblogs.com/wuxl360/p/5817489.html

http://blog.csdn.net/morning99/article/details/40426133

二、Zookeeper 集群

ZooKeeper分布式模式安装(ZooKeeper集群)也比较容易,这里说明一下基本要点。 首先要明确的是,ZooKeeper集群是一个独立的分布式协调服务集群,“独立”的含义就是说,如果想使用ZooKeeper实现分布式应用的协调与管理,简化协调与管理,任何分布式应用都可以使用,这就要归功于Zookeeper的数据模型(DataModel)和层次命名空间(Hierarchical Namespace)结构。

1、主机名称映射配置

本机安装将采用单机安装集群,因此在配置主机时我们将采用同一Ip,不同端口的操作,具体配置如下:

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

在本次安装中,我们将使用三台zookeeper 服务器,分别使用的端口上述端口。

如果在开发中需要配置多台服务器,则可以将对应的ip修改为目标服务器地址:

server.1=10.192.1.120:2288:3388
server.2=10.192.1.121:2288:3388
server.3=10.192.1.122:2288:3388
除了使用Ip 直接访问外,也可以在本地设置host 域名解析,设置成相应的映射:
host 文件添加
10.192.1.120   slave-01  
10.192.1.121   slave-02  
10.192.1.122   slave-03 
zookeeper 配置文件:
server.1=slave-01:2888:3888  
server.2=slave-02:2888:3888  
server.3=slave-03:2888:3888

server.A=B:C:D

A:其中 A 是一个数字,表示这个是服务器的编号;

B:是这个服务器的 ip 地址;

C:Leader选举的端口;

D:Zookeeper服务器之间的通信端口。

2、创建配置文件

在安装完Zookeeper 后,我们可以在安装目录下找到zoo.cfg配置文件,其中主要的几个配置项内容如下:

#f milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/var/run/zookeeper/zoo2/data

# the port at which the clients will connect
clientPort=2182
  • client:监听客户端连接端口
  • tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小的session过期时间为2倍tickTime
  • syncLimit:fowller与leader之间的心跳时间
  • dataDir:存储内存中数据库快照的位置

在Zookeeper 的工作目录下创建zoo1.cfg,配置内容如下:

#f milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/var/run/zookeeper/zoo1/data

# the port at which the clients will connect
clientPort=2181

#the location of the log file

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

拷贝两份到zoo2.cfg, zoo3.cfg 主要区别为,端口,dataDir需要修改。

Zookeeper的工作目录如下:

➜  zookeeper ll
total 56
-rw-r--r--  1 huangweijie  admin    67B  9  4 22:13 defaults
-rw-r--r--  1 huangweijie  admin   339B  9  4 22:13 log4j.properties
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:01 zoo1.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:01 zoo2.cfg
-rw-r--r--  1 huangweijie  admin   512B  9 11 21:13 zoo3.cfg
-rw-r--r--  1 huangweijie  admin   941B  9  4 22:13 zoo_sample.cfg

快照存放目录创建完后如下:

➜  zookeeper ll
total 0
drwxr-xr-x  3 huangweijie  admin   102B  9 11 20:47 data
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:33 zoo1
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:33 zoo2
drwxr-xr-x  4 huangweijie  admin   136B  9 11 20:55 zoo3

3、设置myid

在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如:

zookeeper echo "1" zoo1/data/myid
zookeeper echo "2" zoo2/data/myid
zookeeper echo "3" zoo3/data/myid

4、启动Zookeeper 集群

在Zookeeper 的工作目录下,启动各个节点服务:

➜  zookeeper zkServer start zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Starting zookeeper ... STARTED
➜  zookeeper zkServer start zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Starting zookeeper ... STARTED
➜  zookeeper zkServer start zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo3.cfg
Starting zookeeper ... STARTED

启动完成后,可以通过 jps 或 zkServer status 查看服务是否启动:

➜  zookeeper jps
13024 QuorumPeerMain
13176 QuorumPeerMain
13007 QuorumPeerMain
13183 Jps

➜  zookeeper zkServer status zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Mode: follower
➜  zookeeper zkServer status zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Mode: leader

三、Zookeeper 命令

1、Zookeeper的四字命令

Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。

Zookeeper 命令

功能描述

conf

列出相关配置的详细信息

cons

列出所有连接到客户端的回话详细信息

dump

列出未经处理的会话和临时会话

envi

输出关于服务环境的详细信息

reqs

列出未经处理的请求

ruok

测试服务是否处于正确状态

stat

列出关于性能和连接的客户端列表

wchs

列出服务器 watch 的详细信息

wchc

通过session 列出服务器watch 的详细信息

wchp

通过路径列出服务器wtch 的信息信息

调用样例:

  1. echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
  2. echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
  3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
  4. echo kill | nc 127.0.0.1 2181 ,关掉server
  5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
  6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
  7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
  8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
  9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
  10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
  11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

2、Zookeeper的 Shell 操作

bin目录下常用的脚本解释

  • zkCleanup  清理Zookeeper历史数据,包括食物日志文件和快照数据文件
  • zkCli     Zookeeper的一个简易客户端
  • zkEnv    设置Zookeeper的环境变量
  • zkServer   Zookeeper服务器的启动、停止、和重启脚本

2.1、ZkServer

zkServer 命令用于对服务器进行操作,主要命令为:

  • zkServer start 启动服务
  • zkServer stop 停止服务
  • zkServer status 查看服务状态

2.2、ZkCli

zkCli 为进入服务的客户端,与redis-cli 类似,当服务启动后,可以通过zkCli 进入服务客户端。常用命令为:

  • zkCli 进入本机默认服务,可以通过指定配置文件进入该服务
  • zkCli -server ip:port 远程连接别的主机的服务

2.3、ZNodes

2.3.1 create

使用create 命令,可以创建一个zookeeper节点,如:

create [-s] [-e] path data acl

其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;acl用来进行权限控制。

a、创建顺序节点:

create -s /zk-temp 123

执行命令后,会在目录下创建 zk-test 节点,需要注意的是,由于加入了 **-e ** 参数,执行命令后,生成的节点目录名会再后续加上一串数字:  zk-test00000019

b、创建临时节点:

create -e /zk-temp 123

临时节点在客户端回话结束后(quit),将会自动删除。再次进入客户端时,将不存在刚创建的临时节点

c、创建永久节点:

create /zk-temp 123

不使用参数时,将会默认创建永久节点

2.3.2 读取节点

  • ls path [watch] :查看当前Zookeeper中所包含的内容
  • get path [watch] :获取节点数据内容和属性
  • ls2 path [watch] :ls 和 get 的功能结合

命令调用示例:

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]

[zk: localhost:2181(CONNECTED) 4] get /zk
myData
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000006
mtime = Fri Oct 17 03:54:20 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

2.3.3 Set

set path data [version]

使用Set 命令,可以更新指定节点的数据内容,例如:

[zk: localhost:2181(CONNECTED) 5] set /zk Jayce
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

[zk: localhost:2181(CONNECTED) 6] get /zk
Jayce
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

2.3.3 Delete

delete path [version]

通过delete 命令可以删除目标节点内容:

[zk: localhost:2181(CONNECTED) 7] delete /zk
[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏10km的专栏

win10 ubuntu16 双系统共用蓝牙鼠标

最近给新笔记本电脑装了win10+ubuntu16双系统,发现原来在win10下已经配对的蓝牙鼠标,在ubuntu下配对后,win10就不能用了,需要重新配对才...

2409
来自专栏友弟技术工作室

iptables系列三

iptables系列之nat及其过滤功能 ? 自定义规则链 iptables -N clean_in iptables -L -n iptables -A ...

2676
来自专栏搜云库

CentOs7.3 搭建 ZooKeeper-3.4.9 Cluster 集群服务

CentOs7.3 搭建 ZooKeeper-3.4.9 Cluster 集群服务 Zookeeper 概述 zookeeper实际上是yahoo开发的,用于分...

2237
来自专栏小文博客

百度云破限速(安卓+Windows)

9463
来自专栏工科狗和生物喵

SSR移动免流尝试

在网上找到了大神的SSR一键搭建免流教程,然后自己试了试,移动曾经免流成功了一天,然后貌似就被发现了,扣了劳资340M。之后我就没有继续测试了,这个应该是地域原...

3.7K10
来自专栏杨建荣的学习笔记

undo retention的思考(一)

最近有个网友咨询我一个问题,是关于undo_retention的,对于这个参数没有过多关注,只是知道需要设置undo_retention搭配使用undotabl...

3155
来自专栏从零开始的linux

zookeeper的使用

zookeeper的使用 zookeeper介绍 Zookeeper是一个集中式的服务,包括管理配置信息,命名服务,提供分布式的同步,以及提供分组服务等。所有这...

3284
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch推荐插件篇(head,sense,marvel)

安装head head插件可以用来快速查看elasticsearch中的数据概况以及非全量的数据,也支持控件化查询和rest请求,但是体验都不是很好。 一般就用...

2467
来自专栏图像识别与深度学习

2018-08-15python通过蓝牙接megpi主板

Equipment Class: DXX - Part 15 Low Power Communication Device Transmitter

882
来自专栏数据和云

时过境迁:Oracle跨平台迁移之XTTS方案与实践

作者简介 ? 谢金融 云和恩墨东区交付部 Oracle 工程师,多年来从事 Oracle 第三方服务,曾服务过金融、制造业、物流、政府等许多行业的客户,精通数据...

43610

扫码关注云+社区