、(二)-- 附通关命令与场景解析)
1. ZooKeeper入门从零启动服务与客户端连接第一次接触ZooKeeper可能会觉得有点懵但别担心跟着我一步步来你会发现其实很简单。ZooKeeper本质上是一个分布式协调服务它的核心数据结构就是节点ZNode。我们可以把ZooKeeper想象成一个树形结构的文件系统每个节点既可以存储数据也可以有子节点。在头歌实践平台上我们首先需要掌握两个最基本的命令zkServer.sh和zkCli.sh。前者用于启动ZooKeeper服务后者则是客户端连接工具。让我分享一个我在实际项目中遇到的坑有一次我直接运行zkCli.sh却怎么也连不上后来才发现是忘记先启动服务了。所以记住这个顺序先启动服务再连接客户端。具体操作命令如下# 启动ZooKeeper服务 zkServer.sh start # 连接本地ZooKeeper服务 zkCli.sh -server 127.0.0.1:2181连接成功后你会看到类似这样的提示符[zk: 127.0.0.1:2181(CONNECTED) 0]这表示你已经成功连接到ZooKeeper服务了。这时候你可以输入help查看所有可用命令。我建议新手先熟悉几个基本命令ls查看节点列表create创建节点get获取节点数据。1.1 创建你的第一个ZooKeeper节点创建节点是ZooKeeper最基本的操作之一。在头歌平台的第一关中我们需要创建两种类型的节点持久节点/spnode和临时节点/enode。这两者的区别非常重要持久节点创建后会一直存在除非显式删除临时节点当创建它的会话结束时节点会自动删除创建节点的基本语法是create [-s] [-e] path data acl其中-e表示创建临时节点不加任何选项则默认创建持久节点。让我们来看头歌第一关的具体操作create -e /enode # 创建临时节点 create /spnode # 创建持久节点这里有几个实用技巧节点数据可以为空用表示节点路径必须以/开头临时节点不能有子节点这是新手常犯的错误2. 节点操作进阶多级节点与递归删除掌握了基本节点创建后我们来看看更复杂的场景。头歌第二关涉及多级节点的创建和管理这在实际项目中非常常见比如配置中心的目录结构、微服务的注册路径等。2.1 构建节点树在第二关中我们需要创建这样的节点结构/myNode /firstChild /secondChild /myNodeTmp /firstChildTmp对应的命令序列是create /myNode create /myNodeTmp create /myNodeTmp/firstChildTmp create -e /myNode/firstChild create /myNode/secondChild 这里有几个关键点需要注意创建子节点前父节点必须已经存在临时节点/myNode/firstChild会在会话结束时自动消失节点命名要有意义方便后续维护2.2 递归删除节点ZooKeeper提供了rmr命令用于递归删除节点及其所有子节点。这在清理测试数据时特别有用rmr /myNodeTmp需要注意的是删除操作不可逆临时节点会被自动删除不需要显式执行rmr生产环境慎用rmr建议先确认节点内容我曾经在一个项目中不小心删错了节点导致服务异常。所以现在我的习惯是执行删除前先用ls和get确认节点内容或者先备份重要数据。3. 节点数据操作与监控节点不仅仅是路径还可以存储数据。头歌第三关就涉及数据的读写和监控这是ZooKeeper的核心功能之一。3.1 数据读写操作我们先创建一个带数据的节点create /myZNode This is my node查看节点数据和状态get /myZNode stat /myZNode更新节点数据set /myZNode This is my second node!这里有几个实用技巧数据大小有限制默认1MB不适合存放大数据每次更新都会更新版本号zxid可以通过stat命令查看节点的元信息3.2 Watch机制实战ZooKeeper的Watch机制是其实现分布式协调的关键。在头歌第二部分第一关我们需要实践这个功能get /spnode watch # 第一次设置watch get /spnode first # 模拟数据变更 get /spnode watch # 再次设置watchWatch的工作原理客户端在读取数据时可以注册watch当数据发生变化时服务端会通知客户端通知是一次性的收到后需要重新注册在实际项目中我常用watch来实现配置热更新和服务发现。比如微服务注册信息变更时所有订阅的服务都能及时感知。4. 安全控制与配额管理在生产环境中安全是必须考虑的因素。ZooKeeper提供了ACL访问控制列表和配额管理机制。4.1 ACL权限控制头歌第二部分第二关演示了如何使用digest认证addauth digest testZK:testZK create /zknode ZK digest:testZK:testZK:rwa这里解释下ACL的构成scheme认证方案这里是digestid用户名:密码permission权限组合r读w写a管理我在实际项目中的经验是生产环境一定要设置ACL不同服务使用不同账号定期轮换密码4.2 配额管理为了防止某个节点占用过多资源ZooKeeper提供了配额管理功能。头歌第二部分第三关展示了如何设置节点配额create /test_quota setquota -n 3 /test_quota # 限制最多3个子节点配额管理注意事项配额是软限制超过时只会记录警告可以设置节点数配额或数据量配额使用listquota查看配额设置我曾经遇到过一个服务疯狂创建节点导致ZooKeeper性能下降的问题后来通过设置配额及时发现并解决了这个问题。