ZooKeeper 安装配置入门教程(2)


一个 znode 可以是持久性的,也可以是临时性的,znode 节点也可以是顺序性的。每一个顺序性的 znode 关联一个唯一的单调递增整数,因此 ZooKeeper 主要有以下 4 种 znode:

持久性的 znode (PERSISTENT): ZooKeeper 宕机,或者 client 宕机,这个 znode 一旦创建就不会丢失。
    临时性的 znode (EPHEMERAL): ZooKeeper 宕机了,或者 client 在指定的 timeout 时间内没有连接 server,都会被认为丢失。
    持久顺序性的 znode (PERSISTENT_SEQUENTIAL): znode 除了具备持久性 znode 的特点之外,znode 的名字具备顺序性。
    临时顺序性的 znode (EPHEMERAL_SEQUENTIAL): znode 除了具备临时性 znode 的特点之外,znode 的名字具备顺序性。


https://archive.apache.org/dist/zookeeper/stable/ 下载 ZooKeeper,目前的最新版是 3.5.6。

upload/2020_01/200118154877854.png

安装ZooKeeper

把 apache-zookeeper-3.5.6-bin.tar.gz 解压到一个本地目录 (目录名最好不要包含空格和中文)。我使用 /usr/local 目录。

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz

把 conf 目录下的 zoo_sample.cfg 重命名为 zoo.cfg,然后修改配置。

# 心跳检查的时间 2秒
tickTime=2000
# 初始化时 连接到服务器端的间隔次数,总时间10*2=20秒
initLimit=10
# ZK Leader 和follower 之间通讯的次数,总时间5*2=10秒
syncLimit=5
# 存储内存中数据快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。
dataDir=/data/zookeeper
# ZK 服务器端的监听端口 
clientPort=2181

配置以下环境变量 vim /etc/profile :

export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.5.6-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf


再安装配置完成后,就可以启动 Zookeeper,使用 zkServer.sh start 启动 ZooKeeper 服务:

[root@wupx apache-zookeeper-3.5.6-bin]# zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

检查 ZooKeeper 日志是否有出错信息:

[root@wupx apache-zookeeper-3.5.6-bin]# cd logs/
[root@wupx logs]# grep -E -i "((exception)|(error))" *

因为返回没有结果,说明没有错误信息。

检查 ZooKeeper 数据文件,这里存放的 ZooKeeper 的事务日志文件和快照日志文件。

[root@wupx zookeeper]# cd /data/zookeeper/
[root@wupx zookeeper]# tree
.
├── version-2
│  └── snapshot.0
└── zookeeper_server.pid
1 directory, 2 files

因为现在还没有运行任何 ZooKeeper 命令,所以还没有事务日志文件。

最后会检查 ZooKeeper 是否在 2181 端口上监听。

netstat -an | ag 2181

执行后,我们可以看到 ZooKeeper 已经在 2181 这个端口上监听了。

下面我们演示下如何使用 zkCli:

在执行 zkCli.sh 命令后,会出现很多消息,这些消息证明我们的 zkCli 和 ZooKeeper 的节点建立了有效连接。

2019-12-22 10:38:36,684 [myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: /127.0.0.1:54038, server: localhost/127.0.0.1:2181

使用 ls -R / 可以递归查找 ZooKeeper 的 znode 节点,使用 create /znode_name 可以创建 znode 节点,具体演示如下:

# 使用 ls -R 可以递归查找 ZooKeeper 的 znode 节点
[zk: localhost:2181(CONNECTED) 0] ls -R /
/
/zookeeper
/zookeeper/config
/zookeeper/quota
# 创建 znode /app1
[zk: localhost:2181(CONNECTED) 1] create /app1
Created /app1
[zk: localhost:2181(CONNECTED) 2] create /app2
Created /app2
[zk: localhost:2181(CONNECTED) 3] create /app1/p_1 1
Created /app1/p_1
[zk: localhost:2181(CONNECTED) 4] create /app1/p_2 2
Created /app1/p_2
[zk: localhost:2181(CONNECTED) 5] create /app1/p_3 3
Created /app1/p_3
[zk: localhost:2181(CONNECTED) 6] ls -R /
/
/app1
/app2
/zookeeper
/app1/p_1
/app1/p_2
/app1/p_3
/zookeeper/config
/zookeeper/quota


分布式锁要求如果锁的持有者宕了,锁可以被释放。ZooKeeper 的 ephemeral 节点恰好具备这样的特性。

接下来我们来演示下,需要在两个终端上分别启动 zkCli,

在终端 1 上:

执行 zkCli.sh,再执行 create -e /lock 命令,来建立临时 znode,加锁的操作其实就是建立 znode 的过程,此时第一个客户端加锁成功。

接下来尝试在第二个客户端加锁,在终端 2 上:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e8c7bdf02b540b0a3e0a397c8a6946ab.html