ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
先说明安装环境,系统为Ubuntu Server17.04,Zookeeper的版本为最新稳定版3.4.9。因Zookeeper的实现 依赖Java,所以需要配置好Java的环境变量。我的Java版本是 “1.8.0_65”。
Zookeeper的安装和配置既可以配置成单机模式, 也可以配置成集群模式。
下载地址可以去https://zookeeper.apache.org/。
Zookeeper的安装非常简单,只要下载到 Zookeeper 的压缩包并解压到某个目录如:/usr/local/zookeeper-3.4.9 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下的启动脚本是 zkServer.sh, zkServer.cmd是Windows的启动脚本。
启动脚本知道了但是在执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper的配置文件在conf目录下,这个目录下有zoo_sample.cfg和log4j.properties,需要做的就是将zoo_sample.cfg改名为zoo.cfg,因为Zookeeper在启动时会找这个文件作为默认配置文件。
下面详细介绍一下,这个配置文件中各个配置项的意义。
zoo.cfg修改如下:
# 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=/home/mungo/zookeeper
# 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
其中(这里只修改了dataDir配置,其他均是默认值):
当这些配置项配置好后,你现在就可以启动 Zookeeper 了。进入到bin目录下,
./zkServer.sh start
可以使用ps查看Zookeeper的进程信息。
ps -ef |grep zookeeper
所谓伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群。因目前没有那么多机器,所以以单机启动2个zookeeper进程为例。
Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。
先将zookeeper的目录拷贝2份。
集群模式下,对比单机模式,配置项 initLimit, syncLimit是必须的,clientPort的端口号因是单机所以不能重复,dataDir 的配置值也需不同。
除此之外还要增加以下配置项:
server.0=127.0.0.1:8880:7770
server.1=127.0.0.1:8881:7771
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
这样配置之后,就可以分别启动不同目录下的两个Zookeeper了。
集群模式的配置和伪集群基本一致。而且由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样。
只是需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同。
上面安装就完成了,可以使用ZooKeeper的命令行进行使用。
ZooKeeper客户端在/usr/lib/zookeeper/bin文件夹下,运行使用./zkCli.sh -server IP:port 。
按照上面的配置,在单机下已伪集群的模式配置了两台Zookeeper服务器server.0和server.1,分别对应端口2180和2181。
./zkCli.sh -server 127.0.0.1:2180
./zkCli.sh -server 127.0.0.1:2181
连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息,并在屏幕输出“ Welcome to ZooKeeper ”等信息。
命令行工具的一些简单操作如下:
1.查看当前 ZooKeeper 中所包含的内容
ls /
使用 ls 命令来查看当前 ZooKeeper 中所包含的内容。
2. 创建一个新的znode节点
create /zk myData
命令在server.1服务器上执行,这个命令创建了一个新的 znode 节点“zk”以及与它关联的字符串。
3. 取得znode 节点
get /zk
命令在server.0服务器上执行,get 命令来确认 znode 是否包含我们所创建的字符串。
通过这两个命令的操作,可以看出,同样的znode在不同的服务器上是一致的。
4. 设置znode的值
set /zk "mungo"
set 命令来对 zk 所关联的字符串进行设置。现在在server.1设置zk值为mungo。
然后在server.0上查看zk的值。
可以发现zk的值是也是一致的。所以说Zookeeper是分为布式应用提供一致性服务的软件。
5. 删除znode节点
delete /zk
delete 是删除一个znode节点。在server.0上执行上面的删除命令后,
参考:分布式服务框架 Zookeeper – 管理分布式环境中的数据