使用ZooKeeper实现锁

2020-02-07  本文已影响0人  金果儿
  1. 下载Zookeeperhttp://zookeeper.apache.org/releases.html
    点击 Download -> archive -> stable -> 选择合适版本tar包
  2. 解压
  3. 创建conf/zoo.cfg
    最重要的两个配置项
  # the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
  1. 配置环境变量
export ZOOKPEEPER_HOME="$HOME/project/apache-zookeeper-3.5.6-bin"
export PATH="$ZOOKPEEPER_HOME/bin:$PATH"

启动zookeeper服务

  1. 启动zookeeper server
zkServer.sh start
  1. 检查异常和出错信息 grep -E -i "((exception) | (error))"
  2. 检查交易日志文件和快照文件cd [dataDir]
  3. 检查是否在指定的端口上监听
    netstat -an | ag [port]

使用zkCli.sh

create /app2
create /app1
create /app1/p_1
create /app1/p_2
create /app1/p_3

实现一个锁

分布式锁要求如果锁的持有者宕机了,锁可以被释放。zookeeper的ephemeral节点恰好具备这样的特性——当ephemeral节点宕机后,这个节点会被从data tree删掉。
打开两个终端,分别运行一个zhCli.sh
终端1:

 zkCli.sh

create -e /lock

终端2:

 zkCli.sh

create -e /lock
stat -w /lock

在终端1中执行quit命令,在终端2种会收到一个lock节点被删除的事件。在终端2中执行create -e /lock,成功。

上一篇 下一篇

猜你喜欢

热点阅读