您的位置:首页 > 其它

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

2017-09-19 20:23 483 查看

一、Zookeeper安装

1.zookeeper支持brew安装。

➜~brewinfozookeeper
zookeeper:stable3.4.10(bottled),HEAD
Centralizedserverfordistributedcoordinationofserviceshttps://zookeeper.apache.org/Notinstalled
From:https://github.com/Homebrew/homebrew-core/blob/master/Formula/zookeeper.rb==>Requirements
Optional:python✔
==>Options
--with-perl
BuildPerlbindings
--with-python
Buildwithpythonsupport
--HEAD
InstallHEADversion
==>Caveats
Tohavelaunchdstartzookeepernowandrestartatlogin:
brewservicesstartzookeeper
Or,ifyoudon'twant/needabackgroundserviceyoucanjustrun:
zkServerstart


通过brewinstallzookeeper安装:

➜~brewinstallzookeeper
Pleasewaitforittofinishorterminateittocontinue.
==>Downloadinghttps://homebrew.bintray.com/bottles/zookeeper-3.4.10.sierra.bottle.tar.gz########################################################################100.0%
==>Pouringzookeeper-3.4.10.sierra.bottle.tar.gz
==>Caveats
Tohavelaunchdstartzookeepernowandrestartatlogin:
brewservicesstartzookeeper
Or,ifyoudon'twant/needabackgroundserviceyoucanjustrun:
zkServerstart
==>Summary
🍺/usr/local/Cellar/zookeeper/3.4.10:241files,31.4MB


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

➜zookeeperll
total32
-rw-r--r--1huangweijieadmin67B9422:13defaults
-rw-r--r--1huangweijieadmin339B9422:13log4j.properties
-rw-r--r--1huangweijieadmin941B9422:13zoo.cfg
-rw-r--r--1huangweijieadmin941B9422:13zoo_sample.cfg


zookeeper默认配置文件内容:

#Thenumberofmillisecondsofeachtick
tickTime=2000
#Thenumberofticksthattheinitial
#synchronizationphasecantake
initLimit=10
#Thenumberofticksthatcanpassbetween
#sendingarequestandgettinganacknowledgement
syncLimit=5
#thedirectorywherethesnapshotisstored.
#donotuse/tmpforstorage,/tmphereisjust
#examplesakes.
dataDir=/usr/local/var/run/zookeeper/data
#theportatwhichtheclientswillconnect
clientPort=2181
#themaximumnumberofclientconnections.
#increasethisifyouneedtohandlemoreclients
#maxClientCnxns=60
#
#Besuretoreadthemaintenancesectionofthe
#administratorguidebeforeturningonautopurge.
#
#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance#
#ThenumberofsnapshotstoretainindataDir
#autopurge.snapRetainCount=3
#Purgetaskintervalinhours
#Setto"0"todisableautopurgefeature
#autopurge.purgeInterval=1


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

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


启动服务

zkServer

1.zkServer--查看服务目录

➜zookeeperzkServer
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo.cfg
Usage:./zkServer.sh{start|start-foreground|stop|restart|status|upgrade|print-cmd}


2.zkServerstart--启动服务

➜zookeeperzkServerstart
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo.cfg
Startingzookeeper...STARTED


3.zkServerstatus--查看服务状态

➜zookeeperzkServerstatus
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo.cfg
Mode:standalone


4.zkServerstop--关闭服务

➜zookeeperzkServerstop
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo.cfg
Stoppingzookeeper...STOPPED


zkClient

➜~zkCli
Connectingtolocalhost:2181
WelcometoZooKeeper!
JLinesupportisenabled

WATCHER::

WatchedEventstate:SyncConnectedtype:Nonepath: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)和层次命名空间(HierarchicalNamespace)结构。

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.120slave-01
10.192.1.121slave-02
10.192.1.122slave-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配置文件,其中主要的几个配置项内容如下:

#fmillisecondsofeachtick
tickTime=2000

#Thenumberofticksthattheinitial
#synchronizationphasecantake
initLimit=10

#Thenumberofticksthatcanpassbetween
#sendingarequestandgettinganacknowledgement
syncLimit=5

#thedirectorywherethesnapshotisstored.
dataDir=/usr/local/var/run/zookeeper/zoo2/data

#theportatwhichtheclientswillconnect
clientPort=2182


client:监听客户端连接端口

tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小的session过期时间为2倍tickTime

syncLimit:fowller与leader之间的心跳时间

dataDir:存储内存中数据库快照的位置

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

#fmillisecondsofeachtick
tickTime=2000

#Thenumberofticksthattheinitial
#synchronizationphasecantake
initLimit=10

#Thenumberofticksthatcanpassbetween
#sendingarequestandgettinganacknowledgement
syncLimit=5

#thedirectorywherethesnapshotisstored.
dataDir=/usr/local/var/run/zookeeper/zoo1/data

#theportatwhichtheclientswillconnect
clientPort=2181

#thelocationofthelogfile

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


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

Zookeeper的工作目录如下:

➜zookeeperll
total56
-rw-r--r--1huangweijieadmin67B9422:13defaults
-rw-r--r--1huangweijieadmin339B9422:13log4j.properties
-rw-r--r--1huangweijieadmin941B9422:13zoo.cfg
-rw-r--r--1huangweijieadmin512B91121:01zoo1.cfg
-rw-r--r--1huangweijieadmin512B91121:01zoo2.cfg
-rw-r--r--1huangweijieadmin512B91121:13zoo3.cfg
-rw-r--r--1huangweijieadmin941B9422:13zoo_sample.cfg


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

➜zookeeperll
total0
drwxr-xr-x3huangweijieadmin102B91120:47data
drwxr-xr-x4huangweijieadmin136B91120:33zoo1
drwxr-xr-x4huangweijieadmin136B91120:33zoo2
drwxr-xr-x4huangweijieadmin136B91120:55zoo3


3、设置myid

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

zookeeperecho"1"zoo1/data/myid
zookeeperecho"2"zoo2/data/myid
zookeeperecho"3"zoo3/data/myid


4、启动Zookeeper集群

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

➜zookeeperzkServerstartzoo1.cfg
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo1.cfg
Startingzookeeper...STARTED
➜zookeeperzkServerstartzoo2.cfg
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo2.cfg
Startingzookeeper...STARTED
➜zookeeperzkServerstartzoo3.cfg
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo3.cfg
Startingzookeeper...STARTED


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

➜zookeeperjps
13024QuorumPeerMain
13176QuorumPeerMain
13007QuorumPeerMain
13183Jps

➜zookeeperzkServerstatuszoo1.cfg
ZooKeeperJMXenabledbydefault
Usingconfig:/usr/local/etc/zookeeper/zoo1.cfg
Mode:follower
➜zookeeperzkServerstatuszoo2.cfg
ZooKeeperJMXenabledbydefault
Usingconfig:/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的信息信息
调用样例:

echostat|nc127.0.0.12181来查看哪个节点被选择作为follower或者leader

echoruok|nc127.0.0.12181测试是否启动了该Server,若回复imok表示已经启动。

echodump|nc127.0.0.12181,列出未经处理的会话和临时节点。

echokill|nc127.0.0.12181,关掉server

echoconf|nc127.0.0.12181,输出相关服务配置的详细信息。

echocons|nc127.0.0.12181,列出所有连接到服务器的客户端的完全的连接/会话的详细信息。

echoenvi|nc127.0.0.12181,输出关于服务环境的详细信息(区别于conf命令)。

echoreqs|nc127.0.0.12181,列出未经处理的请求。

echowchs|nc127.0.0.12181,列出服务器watch的详细信息。

echowchc|nc127.0.0.12181,通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。

echowchp|nc127.0.0.12181,通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。

2、Zookeeper的Shell操作

bin目录下常用的脚本解释

zkCleanup  清理Zookeeper历史数据,包括食物日志文件和快照数据文件

zkCli    Zookeeper的一个简易客户端

zkEnv    设置Zookeeper的环境变量

zkServer  Zookeeper服务器的启动、停止、和重启脚本

2.1、ZkServer

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

zkServerstart启动服务

zkServerstop停止服务

zkServerstatus查看服务状态

2.2、ZkCli

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

zkCli进入本机默认服务,可以通过指定配置文件进入该服务

zkCli-serverip:port远程连接别的主机的服务

2.3、ZNodes

2.3.1create

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

create[-s][-e]pathdataacl


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

a、创建顺序节点:

create-s/zk-temp123


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

b、创建临时节点:

create-e/zk-temp123


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

c、创建永久节点:

create/zk-temp123


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

2.3.2读取节点

lspath[watch]:查看当前Zookeeper中所包含的内容

getpath[watch]:获取节点数据内容和属性

ls2path[watch]:ls和get的功能结合

命令调用示例:

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

[zk:localhost:2181(CONNECTED)4]get/zk
myData
cZxid=0x500000006
ctime=FriOct1703:54:20PDT2014
mZxid=0x500000006
mtime=FriOct1703:54:20PDT2014
pZxid=0x500000006
cversion=0
dataVersion=0
aclVersion=0
ephemeralOwner=0x0
dataLength=6
numChildren=0


2.3.3Set

setpathdata[version]

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

[zk:localhost:2181(CONNECTED)5]set/zkJayce
cZxid=0x500000006
ctime=FriOct1703:54:20PDT2014
mZxid=0x500000007
mtime=FriOct1703:55:50PDT2014
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=FriOct1703:54:20PDT2014
mZxid=0x500000007
mtime=FriOct1703:55:50PDT2014
pZxid=0x500000006
cversion=0
dataVersion=1
aclVersion=0
ephemeralOwner=0x0
dataLength=9
numChildren=0


2.3.3Delete

deletepath[version]

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

[zk:localhost:2181(CONNECTED)7]delete/zk
[zk:localhost:2181(CONNECTED)8]ls/
[zookeeper]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: