返回
Apache ZooKeeper (二):搭建、操作、使用
后端
2023-12-12 03:17:25
- 搭建 Apache ZooKeeper 集群
1.1 准备环境
- 多台服务器(至少 3 台)
- Java 8 或更高版本
- ZooKeeper 3.8 或更高版本
- SSH 访问权限
1.2 安装 ZooKeeper
- 在每台服务器上安装 ZooKeeper。
- 创建一个 ZooKeeper 配置文件。
- 启动 ZooKeeper 服务。
1.3 验证集群
使用以下命令检查集群是否正常运行:
zkServer.sh status
输出应类似于以下内容:
Mode: leader
Node count: 3
MyID: 1
State: running
2. ZooKeeper 常用命令
2.1 创建节点
使用以下命令创建节点:
create /my_node "Hello, ZooKeeper!"
2.2 读取节点
使用以下命令读取节点:
get /my_node
输出应类似于以下内容:
Hello, ZooKeeper!
2.3 更新节点
使用以下命令更新节点:
set /my_node "Hello, World!"
2.4 删除节点
使用以下命令删除节点:
delete /my_node
2.5 列出子节点
使用以下命令列出子节点:
ls /
输出应类似于以下内容:
my_node
2.6 监视节点
使用以下命令监视节点:
watch /my_node
输出应类似于以下内容:
WATCHER:: /my_node: Hello, World!
3. ZooKeeper API 实践
3.1 Java API
3.1.1 连接 ZooKeeper
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
public class JavaZooKeeperExample {
public static void main(String[] args) throws KeeperException, InterruptedException {
ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, null);
// 创建节点
zk.create("/my_node", "Hello, ZooKeeper!".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 读取节点
byte[] data = zk.getData("/my_node", false, null);
System.out.println(new String(data));
// 更新节点
zk.setData("/my_node", "Hello, World!".getBytes(), -1);
// 删除节点
zk.delete("/my_node", -1);
// 关闭连接
zk.close();
}
}
3.1.2 使用 Apache Curator
Apache Curator 是一个用于 ZooKeeper 的客户端库,它提供了一套更高级别的 API,使用起来更加方便。
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryNTimes;
public class JavaCuratorExample {
public static void main(String[] args) {
CuratorFramework zk = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(3, 1000));
zk.start();
// 创建节点
zk.create().forPath("/my_node", "Hello, ZooKeeper!".getBytes());
// 读取节点
byte[] data = zk.getData().forPath("/my_node");
System.out.println(new String(data));
// 更新节点
zk.setData().forPath("/my_node", "Hello, World!".getBytes());
// 删除节点
zk.delete().forPath("/my_node");
// 关闭连接
zk.close();
}
}
3.2 Scala API
3.2.1 连接 ZooKeeper
import org.apache.zookeeper.KeeperException
import org.apache.zookeeper.ZooKeeper
object ScalaZooKeeperExample {
def main(args: Array[String]): Unit = {
val zk = new ZooKeeper("localhost:2181", 3000, null)
// 创建节点
zk.create("/my_node", "Hello, ZooKeeper!".getBytes, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
// 读取节点
val data = zk.getData("/my_node", false, null)
println(new String(data))
// 更新节点
zk.setData("/my_node", "Hello, World!".getBytes, -1)
// 删除节点
zk.delete("/my_node", -1)
// 关闭连接
zk.close()
}
}
3.2.2 使用 Apache Curator
import org.apache.curator.framework.CuratorFramework
import org.apache.curator.framework.CuratorFrameworkFactory
import org.apache.curator.retry.RetryNTimes
object ScalaCuratorExample {
def main(args: Array[String]): Unit = {
val zk = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(3, 1000))
zk.start()
// 创建节点
zk.create().forPath("/my_node", "Hello, ZooKeeper!".getBytes)
// 读取节点
val data = zk.getData.forPath("/my_node")
println(new String(data))
// 更新节点
zk.setData.forPath("/my_node", "Hello, World!".getBytes)
// 删除节点
zk.delete.forPath("/my_node")
// 关闭连接
zk.close()
}
}
结语
Apache ZooKeeper 是一款强大的分布式协调服务,它可以用于构建各种分布式系统。本文介绍了如何搭建 ZooKeeper 集群,使用 ZooKeeper 的常用命令以及在 Java 和 Scala 中使用 ZooKeeper API。