Zookeeper-3.4.5安装步骤及异常处理

相关的知识可以参看zookeeper的官网地址:http://zookeeper.apache.org/

一、单机部署(Standalone Operation)

下载zookeeper的稳定版本,或者自己想要的版本,在zookeeper的官网页面可以找到下载地址。

在这里插入图片描述

这个教程下载的是zookeeper-3.4.5.tar.gz版本的文件。

然后把文件移动到合适的位置,使用下面的命令进行解压:

$ tar -zxvf zookeeper-3.4.5.tar.gz

如果遇到权限问题,就在命令最前面加上sudo就好了。

在独立模式下可以进行一些配置,并启动zookeeper。

首先在zookeeper的解压目录下创建一个配置文件 conf/zoo.cfg,其内容为:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

这个文件可以命名为任何名字,但是为了讨论就命名为conf/zoo.cfg了。其中dataDir可以被指定为一个已经存在的空文件夹路径。

各个配置字段的含义如下:

  • tickTime

    the basic time unit in milliseconds used by ZooKeeper. It is used to do heartbeats and the minimum session timeout will be twice the tickTime.

  • dataDir

    the location to store the in-memory database snapshots and, unless specified otherwise, the transaction log of updates to the database.

  • clientPort

    the port to listen for client connections

创建好配置文件后,现在可以启动Zookeeper了:

bin/zkServer.sh start

Zookeeper的日志使用的是log4j。现在配置的是单机模式,后面的步骤还会配置分布式模式。

二、简单操作与测试

首先连接到Zookeeper:

$ bin/zkCli.sh -server 127.0.0.1:2181

这可以让你执行一些简单的文件操作。

一旦你连接上了,可以看到类似于下面的这些信息:

Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]

上面其实就是zookeeper提供的shell的信息于欢迎界面。

在zookeeper的shell中,键入help可以查看有哪些可以在客户端执行的命令,命令列表如下:

[zkshell: 0] help
ZooKeeper host:port cmd args
        get path [watch]
        ls path [watch]
        set path data [version]
        delquota [-n|-b] path
        quit
        printwatches on|off
        createpath data acl
        stat path [watch]
        listquota path
        history
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path

从这个shell中,你可以尝试一些简单的命令来感觉一下这个简单命令行界面。

首先,使用一下列表命令——“ls”,就像下面这样:

[zkshell: 8] ls /
[zookeeper]

接下来,通过运行’create /zk_test my_data’创建一个新的节点(a new znode)。这将会创建一个新的节点,并且节点联系到字符串“my_data”,将会看到:

[zkshell: 9] create /zk_test my_data
Created /zk_test

运行另外一个 ls /命令来看一下文件夹内容:

[zkshell: 11] ls /
[zookeeper, zk_test]

注意到zk_test文件目录已经被新建立了。

接下来通过运行get命令来查验一下联系到节点(znode)的数据,如下:

[zkshell: 12] get /zk_test
my_data
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 5
mtime = Fri Jun 05 13:57:06 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 7
numChildren = 0

我们可以通过运行set命令来改变联系到zk_test节点的数据,如下所示:

[zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0

[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0

注意,在设置完数据后,使用了get命令查看,可以看到确实联系到节点的数据已经改变了。

最后,我们把这个发布的节点删除了。

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]

如果想了解更多,可以参看Programmer’s Guide

三、运行重复模式的zookeeper (Running Replicated ZooKeeper)

​ 将zookeeper运行在单机模式可以方便于评估、一些开发和测试。但是在产品中,你应该运行zookeeper的重复模式。在一些应用中,一个重复的服务器组被称为一个仲裁(a quorum)。在重复模式中,在仲裁中的所有服务器都有同一个配置文件的拷贝。

注意: 在重复模式中,最少需要三个服务器,并且强烈建议你有奇数个服务器。如果你仅仅只有两个服务器,在这种情况下,如果其中一个失败,那么将没有足够的机器来形成一个主要的仲裁。两个服务器还不如一个服务器稳定,因为存在两个单点失败(because there are two single points of failure)。

​ 重复模式中的配置文件和单机模式中的配置文件详细,但有一些差别,下面是一个例子:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

​ 其中,initLimit字段是一个超时时间,zookeeper用这个超时时间来限制在仲裁中的服务器必须连接上leader的时间长度。syncLimit字段限制了一个服务器可以断开leader的过期时间。

​ 你可以使用tickTime来指定这两个超时时间的时间单元。在这个例子中,initLimit超时时间设置为5个时钟(ticks),每个时钟是2000毫秒,也就是说initLimit超时时间为10秒。

​ 字段server.X列出了组成zookeeper服务的服务器。当服务器启动的时候,机器可以通过查找数据目录(the data directory)中的myid来确定自己是哪个服务器。这个文件包含用ASCII码编码的服务器编号。

​ 最后要注意一下服务器名后面的两个端口号:“2888”和"3888"。节点通过形式化的端口去连接其他节点。

这个连接对于节点直接的通信是必要的,例如,节点之间决定更新信息的顺序。更具体一点,Zookeeper使用这个端口将follower连接到leader。当一个新leader出现时,follower使用这个端口来打开一个到leader的TCP连接。因为默认的leader选举也是使用TCP协议,所以我们现在需要另外一个端口来进行leader的选举。这个端口就是第二个端口。

​ 注意:在同一个机器上,可以配置不同的端口来模拟多个zookeeper节点。也可以建立多个虚拟机,但这仍然时脆弱的。最好是使用多个实体物理机器。

四、配置zookeeper分布式模式

​ 将上面重复模式的文件夹整体发送到各个服务器上,并且在每个机器上为zoo.cfg中dataDir字段对应的路径建立空文件夹,并且在建立的文件夹中创建一个myid文件,在其中写上一个数字。每个服务器节点上的myid文件中的数字都不能一样。

​ 然后在每个服务器节点上的zookeeper安装目录下执行下面的命令来启动zookeeper服务。

bin/zkServer.sh start

​ 查看每个节点是follower还是leader可以使用下面的命令:

bin/zkServer.sh status

总结

​ 不一定一下就成功了,中间配置的时候尽量慢一点、仔细一点。如果出现什么问题,一定要查看日志。zookeeper的日志会输出在执行zkServer.sh start命令的工作目录下,文件名称为zookeeper.out。也可以通过修改bin/zkEnv.sh文件中的变量来指定日志输出位置,具体参看修改Zookeeper输出日志 zookeeper.out输出路径

五、异常情况处理

在执行zkServer.sh start命令启动zookeeper后,再使用zkServer.sh status查看状态时,可能会出现下面的异常信息:

hduser@vm-01:/opt/zookeeper/zookeeper-3.4.5$ bin/zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

出现这异常的原因是在查看状态的时候,其他zookeeper节点还没有启动起来,所以也就还没办法选举出leader,其他zookeeper节点启动后,稍等一会儿再使用zkServer.sh status查看状态,那么就可以看到正常的状态报告了,如下所示:

hduser@vm-01:/opt/zookeeper/zookeeper-3.4.5$ bin/zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值