关闭

分布式服务框架ZooKeeper安装和配置

标签: zookeeper
290人阅读 评论(0) 收藏 举报
分类:

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配置,其他均是默认值):

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

当这些配置项配置好后,你现在就可以启动 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 
  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
这里写图片描述
这样配置之后,就可以分别启动不同目录下的两个Zookeeper了。

集群模式

集群模式的配置和伪集群基本一致。而且由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样。
只是需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同。

ZooKeeper命令行

上面安装就完成了,可以使用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 ”等信息。

命令行工具的一些简单操作如下:

操作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上执行上面的删除命令后,
这里写图片描述
这里写图片描述

在server.1上同样显示zk的znode节点已被删除。
这里写图片描述


参考:分布式服务框架 Zookeeper – 管理分布式环境中的数据

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场