『互联网架构』软件架构-zookeeper快速入门(33)

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『互联网架构』软件架构-zookeeper快速入门(33)

上次在配置zookeeper分布式的时候,有个很重要的文件zoo.cfg,里面重点配置了几个信息clientPort,server.1的端口号。实际用到了2个端口号2181,2888,还有个2888这是备用的端口号。有人说zk是互联网的基石,一点都不夸张,它的作用很大。源码:https://github.com/limingios/netFuture/ 【zookeeper】

(一)原理重申

zk本身就是一个服务端,它跟客户端直接就是一个长链接(tcp),通过的2181的端口。分布式有多个zk,它们之间的通信是通过2188,如果网络抖动的话2888也可以使用。org.apache.zookeeper.ClientCnxn是管理网络IO的模块。

image.png
  • 1.1启动zk(分布式的)
cd ~/zookeeper-3.4.10/bin
sh zkServer.sh start
  • 1.2 进入zk
sh zkCli.sh -server 192.168.69.101:2181,192.168.69.102:2181,192.168.69.103:2181
  • 1.3 zk命令

查看命令

help

(二)zookeeper服务端

  • 2.1bin 目录下常用的脚本解释

cmd是windows的,sh是linux的

参数 意义
zkCleanup 清理 Zookeeper 历史数据,包括食物日志文件和快照数据文件
zkCli Zookeeper 的一个简易客户端
zkEnv 设置 Zookeeper 的环境变量
zkServer Zookeeper 服务器的启动、停止、和重启脚本
  • 2.2进入 bin 目录

使用 zkServer.sh start 启动服务

  • 2.3服务状态

使用 jps 命令查看,存在 QuorumPeerMain 进程,表示 Zookeeper 已经启动

jps
sh zkServer.sh status
  • 2.4停止服务

在 bin 目录下,使用 zkServer.sh stop 停止服务

sh zkServer.sh stop
jps

(三)zookeeper客户端

  • 3.1客户端连接服务端
sh zkCli.sh -server ip:port
#如果是多个服务端
sh zkCli.sh -server ip1:port1,ip2:port2,ip3:port3
  • 3.2创建节点

使用 create 命令,可以创建一个 Zookeeper 节点, 如
create [-s] [-e] path data acl
其中,-s 或-e 分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;acl
用来进行权限控制

  • 3.2.1创建顺序节点

使用 命令创建 zk-test 顺序节点,可以看到创建的 zk-test 节点后面添加了一串数字以示区别。

 create -s /zk-test 123
  • 3.2.2创建临时节点

使用 命令创建 zk-temp 临时节点

 create -e /zk-temp 123

临时节点在客户端会话结束后,就会自动删除,下面使用 quit 命令退出客户端,在进入就没有啦。

  • 3.2.2创建永久节点

使用 命令创建 zk-permanent 永久节点

 create /zk-permanent 123 

可以看到永久节点不同于顺序节点,不会自动在后面添加一串数字。

  • 3.3读取节点

与读取相关的命令有 ls 命令和 get 命令,ls 命令可以列出 Zookeeper 指定节点下的
所有子节点,只能查看指定节点下的第一级的所有子节点;get 命令可以获取 Zookeeper
指定节点的数据内容和属性信息。其用法分别如下
ls path [watch]
get path [watch]
ls2 path [watch]
若获取根节点下面的所有子节点,使用 ls / 命令即可

1.若获取根节点下面的所有子节点,使用 ls / 命令即可
2.若想获取根节点数据内容和属性信息,使用 get / 命令即可
3.也可以使用 ls2 / 命令查看,其实ls2=ls+get
4.若要看某个的属性可以通过 get /名称

可以看到其数据内容为 123,还有其他的属性。

  • 3.4更新节点

使用 set 命令,可以更新指定节点的数据内容,用法如下
set path data [version]
其中,data 就是要更新的新内容,version 表示数据版本,如将/zk-permanent 节点的数据更新为 456,可以使用如下命令:

set /zk-permanent 456

现在 dataVersion 已经变为 1 了,表示进行了更新。

  • 3.5删除节点

使用 delete 命令可以删除 Zookeeper 上的指定节点,用法如下
delete path [version]
其中 version 也是表示数据版本,使用 delete /zk-permanent 命令即可删除/zk-permanent 节点

delete /zk-permanent

可以看到,已经成功删除/zk-permanent 节点。值得注意的是, 若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

  • 3.5Znode结构

Stat:状态信息、版本

状态属性 说明
czxid 节点创建时的 zxid
mzxid 节点最新一次更新发生时的 zxid
ctime 节点创建时的时间戳
mtime 节点最新一次更新发生时的时间戳
dataVersion 节点数据的更新次数
cversion 其子节点的更新次数
aclVersion 节点 ACL(授权信息)的更新次数
ephemeralOwner 如果该节点为 ephemeral 节点
ephemeralOwner 值表示与该节点绑定的
session id. 如果该节点不是 ephemeral 节点
ephemeralOwner 值为 0. 至于什么是
ephemeral 节点
dataLength 节点数据的字节数
numChildren 子节点个数
  • 3.6节点类型

2 大类、四种类型 持久、临时、持久有序、临时有序

状态属性 说明
PERSISTENT 持久类型,如果不手动删除 是一直存在的
PERSISTENT_SEQUENTIAL
EPHEMERAL 临时 客户端 session 失效就会随着删除节点 没有子节点
EPHEMERAL_SEQUENTIAL 有序 自增
  • 3.7顺序号

创建 znode 时设置顺序标识,znode 名称后会附加一个值
顺序号是一个单调递增的计数器,由父节点维护在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺
序号推断事件的顺序.

  • 3.8ACL(Access Control List)权限

内置的 ACL schemes :

属性名称 说明
world 默认方式,相当于全世界都能访问
auth 代表已经认证通过的用户(cli 中可以通过 addauth digest user:pwd 来添加当前上下文中的授权用户)
digest 即用户名:密码这种方式认证,这也是业务系统中最常用的
ip 使用 Ip 地址认证
ACL 支持权限
CREATE 能创建子节点
READ 能获取节点数据和列出其子节点
WRITE 能设置节点数据
DELETE 能删除子节点
ADMIN 能设置权限
  • 3.9Watcher
  • 3.10ZAB协议

Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 的完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。一旦 leader 已经和多数的 follower 进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 zookeeper 服务中,它会在恢复模式下启动,发现 leader,并和leader 进行状态同步。待到同步结束,它也参与消息广播。

Zookeeper 服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的followers 支持。广播模式需要保证 proposal 被按顺序处理,因此 zk 采用了递增的事务 id 号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 为的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch。低 32 位是个递增计数。当 leader 崩溃或者 leader 失去大多数的 follower,这时候 zk 进入恢复模式,恢复模式需要重新选举出一个新的 leader,让所有的 server 都恢复到一个正确的状态。

  • 3.11Leader 选举流程
    LOOKING, FOLLOWING, LEADING, OBSERVING

PS:重点原理和基本命令。Zookeeper 是一个有上下级关系(Leader 、follower 、Observer )的集群。客户端链接 zookeeper 集群是通过 Seesion 链接(TCP 长链接)。客户端链接以后可以对节点(存储在 zookeeper 上 znode)增删改查。Znode 有四种类型:临时、临时有序、持久、持久有序对(znode)节点做增删改查时我们可以监控其动作(Watcher 机制)还可以对节点设置权限访问。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容