分布式 - zookeeper客户端的使用 - 个人文章 - SegmentFault 思否


本站和网页 https://segmentfault.com/a/1190000012070655 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

分布式 - zookeeper客户端的使用 - 个人文章 - SegmentFault 思否
注册登录问答专栏标签招聘活动发现✓使用“Bing”搜本站使用“Google”搜本站使用“百度”搜本站站内搜索注册登录zookeeper客户端的使用poype4222关注作者首页专栏分布式文章详情1zookeeper客户端的使用poype4222发布于2017-11-19  
与mysql、redis等软件一样,zookeeper的软件包中也提供了客户端程序用于对服务器上的数据进行操作。本节我们就来学习zookeeper客户端的使用方法。不过在详细讲解zk客户端的使用方法之前,我们会先来讨论zookeeper的数据存储结构,只有理解了zookeeper的数据存储结构,才会真正明白zk操作的真正含义。
zookeeper数据存储结构
zookeeper采用树状结构对数据进行存储,整个数据存储结构非常类似于linux的文件系统。如下图所示,节点node_1的路径是/node_1,节点node_1_1的路径是/node_1/node_1_1。zookeeper就是通过对这些节点进行创建、删除、修改、读取等操作来完成系统功能的。
连接zookeeper服务器
在zookeeper的bin目录下,名为zkCli.sh的文件就是zookeeper为我们提供的客户端脚本程序。我们可以通过它操作zookeeper服务器上的数据。使用zkCli.sh连接zk服务器的命令格式:./zkCli.sh -timeout 0 -server ip:port。这里的timeout参数是会话超时时间,单位是毫秒,如果在此时间内zk服务器没有收到客户端的心跳包,那么这个会话就失效了。与zk服务器建立连接如下图所示,注意到最后的提示符中有CONNECTED代表已经成功与服务器建立了连接。
执行h命令可以查看zookeeper支持的操作命令列表。
这些命令大致可分为增删改查4种类型,下面我们对其进行一一介绍。
ls查看某个节点的全部子节点
ls命令用于列出某个节点下的所有子节点信息。
此处列出了/节点下的全部子节点信息,由于我们还没有创建任何节点,所以只有一个zookeeper节点(由zk自己默认创建)存在。
create创建一个节点
create命令用于创建一个新的节点,它的命令格式create [-s] [-e] path data acl。path是节点的路径,data是节点中存储的数据值,acl是节点的权限(权限相关内容将在java api部分讲解)。参数s表示创建一个顺序节点。
上面的示例连续执行了3次create -s /node_1 123命令,由于加了参数-s,所以zk会自动在创建的节点名字后面增加一个后缀,并且后缀名字是递增的。参数e表示创建的是一个临时节点,临时节点只在本会话内有效,登出之后临时节点就会被删除。
stat查看一个节点的状态信息
下面例子创建了一个新的/node_1节点,用stat命令查看节点的信息如下:
在zookeeper中,每次对数据节点的写操作都是一个事务,每个事务都有一个唯一的事务id作为这个事务的标识。cZxid就是创建这个节点的事务id。ctime是创建这个节点的时间。mZxid是最后更新该节点的事务id。mtime是节点被最后更新的时间。pZxid是节点的子节点列表被最后一次更新的事务id。子节点列表被更新只有两种情况,分别是“增加子节点”和“删除子节点”。修改子节点的数据内容不包括在内。cversion是当前节点的子节点的变更版本号。dataVersion当前节点存储数据内容的变更版本号。aclVersion当前数据节点acl的变更版本号。上面3个版本号均可以用于实现乐观锁。ephemeralOwner为创建该临时节点的事务id。如果是持久节点,那么该值固定为0。dataLength表示当前节点存储数据内容的长度。numChildren表示当前节点包含的子节点个数。
get命令获取当前节点存储数据的内容
get命令可以获取一个节点存储的数据内容,同时可以获取该节点的stat信息。
ls2是ls的超级指令
ls2除了可以列出当前节点的所有子节点,还能列出当前节点的stat信息。
set命令修改一个节点中存储的数据
delete命令删除节点
delete命令可以用于删除一个节点,但它只能删除没有任何子节点的节点。在下面的例子中,节点/node_1中有一个子节点/node_1/node_1_1。所以不能用delete命令删除节点/node_1。
以上就是zookeeper客户端提供的比较重要的命令。注意在zookeeper的所有写操作中,都有一个version字段,可以利用这个字段实现乐观锁。
分布式zookeeper阅读 11.2k更新于 2017-11-19 赞1收藏9分享本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议被 2 篇内容引用zookeeper java api介绍zookeeper节点权限介绍poype422 声望77 粉丝关注作者0 条评论得票最新提交评论评论支持部分 Markdown 语法:**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用 @ 来通知其他用户。推荐阅读ES系列教程02:Elasticsearch一日游学习ElasticSearch(后续简称ES)最好的方法就是多动手实践。在该系列教程中,我会使用“在线书店”这个小项目贯穿每一个章节。这个项目的背景很简单,每本书都有ISBN、标题(title)、描述(description)、价格(price)...poype阅读 824注册中心服务注册中心,是一个给服务提供者注册服务、给服务消费者获取服务信息的地方,一般还提供服务列表查询、心跳检测等功能。注册中心为保证可用性一般集群部署。注册中心组件我们可选的组件有Eureka、ZK、Nacos,ZK...步履不停赞 2阅读 385分布式ID生成服务的技术原理和项目实战导读 ID在我们的开发工作和日常生活中使用的非常频繁,几乎只要是在开发就会天天打交道,它的应用场景十分广泛,比如:身份证号,下单生成的订单号,购买的联合会员商品的兑换券码。不同场景对ID生成服务的要求不...百度Geek说赞 2阅读 250软硬件结合,分布式数据库 ZNBase 存储架构优化实践ZNBase 是开放原子开源基金会旗下的首个分布式数据库项目,由浪潮大数据团队开源并捐赠。本文将介绍 ZNBase 的存储架构,以及 ZNBase 技术团队在其 KV 存储引擎基础上所做的优化实践。开务数据库阅读 1k浅析数据库多表连接:开务数据库的分布式 join 计算Join 是 SQL 中的常用操作。在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用 SQL 语句中的连接(join),在两个或多个数据表中查询数据。开务数据库阅读 991开务数据库delete流程解读delete主要分为两个部分,一个部分为scan过程,拉取表中的数据,第二部分,根据过滤条件,调用b.Del()函数删除对应的数据。相关逻辑计划对象图为:开务数据库阅读 845深入解析分布式数据库的 SQL 引擎优化开务数据库(原:云溪数据库)的 SQL 引擎包含连接、编译、缓存、分布式日志和分布式执行五大服务组件,实现了多集群多节点协同的高效计算,大大提升了用户的查询效率。开务数据库阅读 809poype422 声望77 粉丝关注作者宣传栏文章目录跟随▲19产品热门问答热门专栏热门课程最新活动翻译酷工作课程Java 开发课程PHP 开发课程Python 开发课程前端开发课程移动开发课程资源每周精选用户排行榜帮助中心建议反馈合作关于我们广告投放职位发布讲师招募联系我们合作伙伴关注产品技术日志社区运营日志市场运营日志团队日志社区访谈条款服务协议隐私政策下载 AppCopyright © 2011-2022 SegmentFault. 当前呈现版本 22.12.19浙ICP备15005796号-2浙公网安备33010602002000号ICP 经营许可 浙B2-20201554杭州堆栈科技有限公司版权所有