美文网首页
使用ZooKeeper实现锁

使用ZooKeeper实现锁

作者: 金果儿 | 来源:发表于2020-02-07 15:05 被阅读0次
  1. 下载Zookeeperhttp://zookeeper.apache.org/releases.html
    点击 Download -> archive -> stable -> 选择合适版本tar包
  2. 解压
  3. 创建conf/zoo.cfg
    最重要的两个配置项
  • clientPort:连接zookeeper
  • dataDir:放置zookeeper快照和交易日志文件(最好不要放在/tmp/目录下,在linux下会自动清理tmp目录下文件)
  # 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服务

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

使用zkCli.sh

  • 创建znode
    创建了两个名为app1和app2的znode,并在app1下创建了几个znode。
    依次执行下面命令
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,成功。

相关文章

网友评论

      本文标题:使用ZooKeeper实现锁

      本文链接:https://www.haomeiwen.com/subject/sgvmxhtx.html