开始使用Zookeeper - 第一个Zookeeper会话

优质
小牛编辑
117浏览
2023-12-01

假设你下载并解压了一个Zookeeper的发行版,打开一个shell,切换目录(cd)到工程的根目录,重命名示例配置文件:

虽然是可选的,但最好把data目录从\/tmp移出避免zookeeper填满你的根分区。你在zoo.cfg中可以改变它的位置:

dataDir=/users/me/zookeeper

最后启动服务器,执行以下命令:

# bin/zkServer.sh start

JMX enabled by default

Using config: ../conf/zoo.cfg

Starting zookeeper ... STARTED

#

这条服务器命令使得Zookeeper服务器在后台运行起来。如果要在前台运行使得我们能看到服务器的输出,你可以运行下面的命令:

#bin/zkServer.sh start-foreground

这个选项让你有更加详细的输出,允许你看到服务器正在发生什么。

我们现在准备启动一个客户端。在工程的根目录下另起一个不同的shell,运行下面的命令:

#bin/zkCli.sh

.

.

.

<some omitted output>

.

.

.

2012-12-06 12:07:23,545 [myid:] - INFO [main:ZooKeeper] - (1)

Initiating client connection, connectString=localhost:2181

sessionTimeout=30000 watcher=org.apache.zookeeper.

Welcome to ZooKeeper!

2012-12-06 12:07:23,702 [myid:] - INFO [main-SendThread - (2)

socket connection to server localhost/127.0.0.1:2181.

Will not attempt to authenticate using SASL (Unable to

locate a login configuration)

JLine support is enabled

2012-12-06 12:07:23,717 [myid:] - INFO [main-SendThread - (3)

(localhost:2181):ClientCnxn$SendThread] - Socket

connection established to localhost/127.0.0.1:2181, initiating

session [zk: localhost:2181(CONNECTING) 0]

2012-12-06 12:07:23,987 [myid:] - INFO [main-SendThread - (4)

(localhost:2181):ClientCnxn$SendThread@1207] - Session

establishment complete on server localhost/127.0.0.1:2181,

sessionid = 0x13b6fe376cd0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null - (5)

    我们来看一下输出。有很多行告诉我们不同的环境变量是如何设置的以及客户端使用的什么Jar包。在这个例子中我们忽略他们,关注在会话的建立上,多花点时间分析你屏幕上的输出信息。

    在输出的最后,我们看到了一些涉及到会话建立的日志。第一个是说“初始化连接”。这个消息表述了正在发生的事情,但是一个重要的附加信息是说它正在尝试连接到一台服务器,连接地址是客户端发出的localhost\/127.0.0.1:2181。这个例子中,连接串只包含了localhost,所以这就是将要建立的一个连接。接下来我们看到一条关于SASL的消息,我们先忽略这条消息。紧接着是一条关于客户端与本地Zookeeper服务器建立TCP连接的消息。最后一条日志消息确认了连接已经建立,同时告诉我们连接的ID:0x13b6fe376cd0000。最后,客户端库以一个SyncConnected事件通知应用程序。应用应该事先Watcher对象来处理改事件。我们在下一节再讲更多的事件。

    刚刚对Zookeeper有了更多的熟悉,让我们列出根路径下面的znode节点并创建一个znode。让我们首先确认数据树此时是空的,除了\/zookeeper节点,该节点标记了Zookeeper服务维护的元数据树:

    WATCHER::

    WatchedEvent state:SyncConnected type:None path:null

    [zk: localhost:2181(CONNECTED) 0] ls /

    [zookeeper]

    这里发生了什么?我们执行了ls \/发现只有\/zookeeper。现在我们创建一个叫\/workers的节点并确认真的存在:

    WatchedEvent state:SyncConnected type:None path:null

    [zk: localhost:2181(CONNECTED) 0]

    [zookeeper]

    [zk: localhost:2181(CONNECTED) 1] create /workers ""

    Created /workers

    [zk: localhost:2181(CONNECTED) 2] ls /

    [workers, zookeeper]

    [zk: localhost:2181(CONNECTED) 3]

    为了完成这个联系,我们删除znode并退出:

    [zk: localhost:2181(CONNECTED) 3] delete /workers

    [zk: localhost:2181(CONNECTED) 4] ls /

    [zookeeper]

    [zk: localhost:2181(CONNECTED) 5] quit

    Quitting...

    2012-12-06 12:28:18,200 [myid:] - INFO [main-EventThread:ClientCnxn$

    EventThread] - EventThread shut down

    2012-12-06 12:28:18,200 [myid:] - INFO [main:ZooKeeper@684] - Session:

    0x13b6fe376cd0000 closed

    观察到\/workers节点已经被删除了,同时会话已经被关闭了。为了清理干净,让我们关闭Zookeeper服务器:

    # bin/zkServer.sh stop

    JMX enabled by default

    Using config: ../conf/zoo.cfg

    Stopping zookeeper ... STOPPED

    #