文章声明html
zookeeper介绍node
统一命名服务apache
配置管理ubuntu
集群管理bash
共享锁服务器
队列分布式
配置zookeeperspa
本文的内容主要来自Zookeeper官方文档:https://zookeeper.apache.org/doc/r3.4.14/index.html
官方手册有一句话对Zookeeper的描述很精确,ZooKeeper:分布式应用程序的分布式协调服务。
ZooKeeper容许分布式进程经过共享的层级命名空间相互协调,该命名空间的组织方式与Linux文件系统相似,好比Linux中存在/usr/local/test这个路径,Zookeeper的思想就是为一个路径赋值,好比/usr/local/test的值为‘xxxxx',分布式应用进程能够在Zookeeer中建立路径、为路径赋值、读取路径值,删除路径,经过这些操做来实现分布式服务的协调。
上图中的每个节点被称为一个znode,每一个znode都有本身的相关属性(包括赋予其的value),而且每一个节点均可以建立本身的子项。
Zookeeper中节点有两种,一种就是上图中的每个路径中的节点;另一种是Zookeeper集群中,每个Zookeeper服务器也被称为节点。
Zookeeper虽然是对分布式应用程序的协调服务,那么能够先看一下zookeeper是如何实现协调的,有哪些协调的案例。
其实Zookeeper的安装特别简单,也不能算安装了,只须要将Zookeeper下载后解压,就完成了安装操做,可是还须要进行一些配置操做。
下载地址:http://zookeeper.apache.org/releases.html
本文所用的3.4.14版本,下载连接
su - root # 请务必切换为root身份 wget http://www.trieuvan.com/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz tar -zxf zookeeper-3.4.14.tar.gz cp -r zookeeper-3.4.14 /usr/local/zookeeper # 建立存放数据文件的目录 mkdir /usr/local/zookeeper/data
此时,Zookeeper就安装成功了,只不过还须要进行一些配置才能启动。
Zookeeper的配置文件在path-to-zookeeper/conf目录下,文件名为zoo.cfg。初始安装的Zookeeper有一个zoo_sample.cfg示例文件,能够拷贝一份,在进行修改。
root@ubuntu:/usr/local/zookeeper# cd conf/ root@ubuntu:/usr/local/zookeeper/conf# ls configuration.xsl log4j.properties zoo_sample.cfg root@ubuntu:/usr/local/zookeeper/conf# cp zoo_sample.cfg zoo.cfg root@ubuntu:/usr/local/zookeeper/conf# ls configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
修改zoo.cfg中的下面三项:
# 心跳间隔(毫秒),超过2倍tickTime将会被认为会话超时 tickTime=2000 # 保存zookeeper数据库快照的目录,前面安装zookeeper时已经建立了该目录 dataDir=/usr/local/zookeeper/data # 监听的端口号,用于接收客户端请求 clientPort=2181
Zookeeper中可执行文件都存放在zookeeper安装路径下的bin目录下,而对Zookeeper服务器运行状态管理,使用的是zkServer.sh这个脚本。
经过传入start | stop | restart | status来管理Zookeeper服务器的运行状态。
/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/bin/zkServer.sh restart /usr/local/zookeeper/bin/zkServer.sh stop /usr/local/zookeeper/bin/zkServer.sh status
经过命令行的方式登陆到Zookeeper服务器,可使用Zookeeper提供的zkCli.sh脚本,位于/usr/local/zookeeper/bin目录下。
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
登陆进入Zookeeper服务器后,就能够进行不少操做了,下面将一一列举。
登陆到zookeeper服务器后,输入任意字符,回车确认后就会出现不少命令:
[zk: 127.0.0.1:2181(CONNECTED) 0] info 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
其实上面的命令列表已经很明显的展现了zookeeper中能够操做的命令,包括他的功能都比较容易理解,下面就简单说几个经常使用的命令
查看path节点下有哪些子节点,不会显示孙子及如下层级的节点,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 3] ls / [zookeeper]
该命令用来建立path节点,而且设置节点的值为data。须要注意的是,使用create建立path时,不能嵌套建立path,好比建立/abc/xyz,那么/abc必须是已经存在的,不能直接建立/abc/xyz。而且,使用create建立节点的时候,必须指定data,不然节点不会被建立。
[zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx Created /abc [zk: 127.0.0.1:2181(CONNECTED) 5] ls / [abc, zookeeper]
嵌套建立path时,若是上级目录不存在,则建立失败:
[zk: 127.0.0.1:2181(CONNECTED) 5] ls / [abc, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 6] create /xyz/aaa 12345 Node does not exist: /xyz/aaa [zk: 127.0.0.1:2181(CONNECTED) 7] create /xyz 123 Created /xyz [zk: 127.0.0.1:2181(CONNECTED) 8] create /xyz/aaa 12345 Created /xyz/aaa
该命令用来查看path节点上值以及节点信息,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 12] get /xyz 123 cZxid = 0x1f ctime = Sun Jun 09 15:12:07 CST 2019 mZxid = 0x1f mtime = Sun Jun 09 15:12:07 CST 2019 pZxid = 0x20 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1
该命令用来对已经存在的path的data进行设置,须要注意的是,若是path不存在,那么set操做就会失败,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 13] set /xyz 321 cZxid = 0x1f ctime = Sun Jun 09 15:12:07 CST 2019 mZxid = 0x22 mtime = Sun Jun 09 15:15:18 CST 2019 pZxid = 0x20 cversion = 1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1 [zk: 127.0.0.1:2181(CONNECTED) 14] set /www notExists # path不存在,操做失败 Node does not exist: /www
该命令用来删除叶子节点,叶子节点就是没有子节点的节点。若是删除path下面还有其余的子节点,那么删除操做就会失败。
[zk: 127.0.0.1:2181(CONNECTED) 19] ls / [xyz, abc, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 20] ls /xyz [aaa] [zk: 127.0.0.1:2181(CONNECTED) 21] ls /xyz/aaa [] [zk: 127.0.0.1:2181(CONNECTED) 22] delete /xyz # 删除的path包含子节点,删除失败 Node not empty: /xyz [zk: 127.0.0.1:2181(CONNECTED) 23] delete /xyz/aaa # 删除的节点没有子节点,删除成功
该命令用来递归删除path,若是path下面有子节点,那么子节点都会被所有删除。
[zk: 127.0.0.1:2181(CONNECTED) 24] ls /xyz [] [zk: 127.0.0.1:2181(CONNECTED) 25] create /xyz/abc 3333 Created /xyz/abc [zk: 127.0.0.1:2181(CONNECTED) 26] rmr /xyz
用来获取path节点的相关信息,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 29] stat /abc cZxid = 0x1d ctime = Sun Jun 09 15:10:39 CST 2019 mZxid = 0x21 mtime = Sun Jun 09 15:13:30 CST 2019 pZxid = 0x1d cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0