ZooKeeper 是一个为分布式应用所设计的分布的、开源的协调服务。设计 ZooKeeper 的目的是为了减轻分布式应程序所承担的协调任务,
借助于 zookeeper 服务开发出高可靠的分布式协同程序。
ZooKeeper 是构建dubbo框架最主要的组件学习zookeeper是学习dubbo框架的必学知识和最重要组成部分。
ZooKeeper 的安装:
方式1.单机模式安装:
解压
复制配置文件重命名为zoo.cfg:
cd conf/
cp zoo_sample.cfg zoo.cfg
修改配置文件zoo.cfg内容:
#数据目录
dataDir=/home/admin/zookeeper/data
#日志目录
dataLogDir=/home/admin/zookeeper/logs
#心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳
tickTime=2000
#leader与客户端连接超时时间。表示5个心跳间隔
initLimit=5
#Leader与Follower之间的超时时间,表示2个心跳间隔
syncLimit=2
#客户端连接端口
clientPort=2181
注:tickTime :基本事件单元,以毫秒为单位。它来指跳,最的session 过期时间为两倍的tickTime。dataDir :存储内存中数据库快照的位置,如果不设置参数,更新事务志将被存储到默认位置。clientPort :监听客户端连接的端口。
需要保证在dataDir和dataLogDir指定的路径下有相应的文件夹
如果bin下面的.sh等文件无权限就执行chmod 777 zkCli.sh 给对应的可执行程序授权
在bin目录下执行./zkServer.sh start 启动
Ps-ef |grep zoopkeeper 查看是否启动
在bin目录下运行./zkCli.sh –server 127.0.0.1:2181 连接到zookeeper
注:使单机模式时户需要注意:这种配置式下没有ZooKeeper 副本,所以如果ZooKeeper 服务器出现故障,ZooKeeper服务将会停。
方式2.集群模式安装
集群模式有两种形式:
1)使用多台机器,在每台机器上运行一个ZooKeeper Server进程;
2)使用一台机器,在该台机器上运行多个ZooKeeper Server进程。
在生产环境中,一般使用第一种形式,在练习环境中,一般使用第二种形式。
操作和单机模式的安装类似,我们同样需要对JAVA 环境进设置,下载最新的ZooKeeper 稳定版本并配置相应的环境变量。不同之处在于每台机器上conf/zoo.cfg 配置件的参数设置,参考下的配置:
2.1.配置参数
#数据目录
dataDir=/home/admin/zookeeperGroup/zookeeper1/data
#日志目录
dataLogDir=/home/admin/zookeeperGroup/zookeeper1/logs
#心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳
tickTime=2000
#leader与客户端连接超时时间。表示5个心跳间隔
initLimit=5
#Leader与Follower之间的超时时间,表示2个心跳间隔
syncLimit=2
#客户端连接端口。多个实例的端口配置不可重复
clientPort=2181
#server.NUM=IP:port1:port2 NUM表示本机为第几号服务器;IP为本机ip地址;
#port1为leader与follower通信端口;port2为参与竞选leader的通信端口
#多个实例的端口配置不能重复,如下:
server.1=127.0.0.1:2222:2225
server.2=127.0.0.1:3333:3335
server.3=127.0.0.1:4444:4445
注:“server.id=host:port:port”指出了不同的Zookeeper 的服务器的自身的标示,作为集群中一部分机器应该知道集群中其他的机器。用户可以从”server.id=host:port:port”中读取相关信息。在dataDir 目录创建一个文件名为myid 的文件,这个文件仅仅含有一行内容,指定的是自身的id 值。比如服务器id 是1 就在这个文件写1.第一个port 是保持和主机通信,第二个port 是做选举的。
2.2.添加myid文件
dataDir指定的目录下添加myid文件,用于存储一个数值,用来作为该ZooKeeper Server进程的标识。即上面配置中的NUM。
启动:./bin/zkServer.sh start
查看状态:./bin/zkServer.sh status
连接集群./bin/zkCli.sh -server 127.0.0.1:2181
使 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 127.0.0.1:2182(CONNECTED) 1] ls /
[zookeeper]
创建个新的 znode ,使 create /zk myData 。这个命令创建了个新的
znode 节点“ zk ”以及与它关联的字符串:
[zk: 127.0.0.1:2182(CONNECTED) 9] create /jiangzz "helloworld"
Created /jiangzz
[zk: 127.0.0.1:2182(CONNECTED) 10] ls /
[jiangzz, zookeeper]
运 get 命令来确认第步中所创建的 znode 是否包含我们所创建的字符
串:
[zk: 127.0.0.1:2182(CONNECTED) 11] get /jiangzz
"helloworld"
cZxid = 0x10000000b
ctime = Thu Aug 13 05:58:13 CST 2015
mZxid = 0x10000000b
mtime = Thu Aug 13 05:58:13 CST 2015
pZxid = 0x10000000b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
通过 set 命令来对 zk 所关联的字符串进设置:
[zk: 127.0.0.1:2182(CONNECTED) 14] set /jiangzz "lovejava"
cZxid = 0x10000000b
ctime = Thu Aug 13 05:58:13 CST 2015
mZxid = 0x10000000c
mtime = Thu Aug 13 06:01:25 CST 2015
pZxid = 0x10000000b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
我们将刚才创建的 znode 删除
[zk: 127.0.0.1:2182(CONNECTED) 15] delete /jiangzz
[zk: 127.0.0.1:2182(CONNECTED) 16] ls /
[zookeeper]
查看/jiangzz 已经被删除