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]
其他操作系统的安装教程可参考:
二、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]
相关文章推荐
- 详解分布式应用程序协调服务Zookeeper
- 分布式应用程序协调服务Zookeeper
- hadoop之 Zookeeper 分布式应用程序协调服务
- Zookeeper: 一个分布式应用程序协调服务
- hadoop之 Zookeeper 分布式应用程序协调服务
- 集群与负载均衡技术学习笔记二 分布式应用程序协调服务zookeeper
- ZooKeeper 开放源码的分布式应用程序协调服务
- 分布式应用程序协调服务zookeeper
- Zookeeper(分布式应用程序协调服务)
- COM+应用程序错误(错误代码8004E00F)COM+ 无法与 Microsoft 分布式事务协调程序交谈的解决方法
- Zookeeper教程(一):快速开始以及结合java实现分布式Barrier和Queue
- Zookeeper教程:快速开始以及结合java实现分布式Barrier和Queue
- 浅谈分布式服务协调技术 Zookeeper
- COM+应用程序错误(错误代码8004E00F)COM+ 无法与 Microsoft 分布式事务协调程序交谈的解决方法
- 打开COM+应用程序时出现8004E00F -COM+ 无法与 Microsoft 分布式事务协调程序交谈
- 分布式协调服务之Zookeeper
- 分布式协调服务Zookeeper
- zookeeper分布式协调服务
- 中小型研发团队架构实践八:分布式协调服务ZooKeeper
- 打开COM+应用程序时出现8004E00F -COM+ 无法与 Microsoft 分布式事务协调程序交谈 无法查看里面的对象 解决办法