目录
Zookeeper环境搭建
主机名以及其myid值,myid越大权值越大
第一步:下载Zookeeper
第二部:解压到export/servers目录
第三步修改配置文件
在解压好的目录中找conf进入
里面有个zoo_sample.cfg是个模板,我们要拷贝成zoo.cfg
进入修改
打开该行注释,意思是最多保留三个日志文件
日志多久清理一次,这里默认是1
配置集群中服务器的地址server.1,2,3代表权值2888和3888端口是固定的
保存退出
在上面这一行加上我们之后要写的一个myid文件的目录
第四步:添加myid配置
在第一台机器的
/export/servers/zookeeper-3.4.9/zkdatas/这个路径下创建一个文件,文件名为myid
内容为1
zkdatas需要自己创建
只有一个1
第五步:将安装包分发给其他机器
scp -r /export/servers/zookeeper-3.4.9/ node02:/export/servers/ 注:如果pwd在servers下面后面的路径可以写为$PWD
并修改他们各自的myid文件为他们各自的权值
第六步:三台机器都启动Zookeeper
在bin目录下执行 ./zkServer.sh start
启动成功
查看谁是Leader
在bin目录在把上面的启动命令的start换成status
node01
node02
发现node02是leader
Zookeeper数据模型
一、特点:
1、树形层次结构
2、兼具文件和目录,在有权限的情况下可以增删改查
3、存数据大小有限制,一般用于管理调度数据(如:配置文件信息、状态信息、汇集位置)
每个znode的数据大小至多1m
4、znode通过路径引用,路径必须是绝对的,/zookeeper这个文件用于保存管理Zookeeper的相关信息,不能删
5、每个Znode由3部分组成:
stat:状态信息,描述Znode的版本,权限等
data:与该节点关联的数据
children:该Znode下的子节点
二、节点类型
临时节点:生命周期依赖于创建它们的会话(客户端联系服务器)。一旦会话结束,临时节点将被自动删除,也可以主动删除,当然临时节点不能拥有子节点
永久节点:生命周期不依赖于会话,并且只有在客户端显示执行删除操作时它们才能被删除
序列化特性:如果指定序列化,Znode在创建的时候名字后面会自动追加一个不断增加的序列号。序列号对此节点的父节点来说是惟一的,记录每个子节点创建的先后顺序,格式是%10d,没有的数值用0补充,例:0000000001
这样有了4种类型的Znode节点,分别对应
PERSISTENT:永久节点
EPHEMERAL:临时节点
PERSISTENT_SEQUENTIAL:永久节点、序列化
EPHEMERAL_SEQUENTIAL:临时节点、序列化
Zookeeper的命令与操作
一、登录Zookeeper客户端
bin目录下输入 zkCli.sh -server node01(这是连接的主机名):2181,如果不加主机名+端口号进入的就是本机
2181端口是在zoo.cfg中指定的
出现一堆东西就是启动成功了
输入quit就是退出
随便敲入一个东西,就会出现一堆命令提示
二、命令学习
命令 | 说明 | 参数 |
create [-s] [-e] path data acl | 创建node,data代表创建时携带的参数,acl代表权限控制 | -s代表是一个序列化节点 -e是一个临时节点,不加表示是个永久节点 |
ls path [watch] | 列出Path下面所有Znode |
|
get path [watch] | 获取Path对应的数据和属性 |
|
set path data [version] | 更新节点 | version数据版本 |
delete path | 删除节点,不能删有子节点的 |
|
rmr | 递归删除 |
|
history | 列出历史记录 |
|
三、操作实例:
1、列出Path下所有Znode
ls /
2、创建永久节点:
create /hello world 这里hello是路径,world是参数
3、创建临时节点:
create -e /tem world
创建后我们quit退出
再进入看看temp还存不存在
发现这时已经没有了
4、创建序列化节点
5、临时序列化节点
6、永久节点创建子节点
尝试临时节点创建子节点
报错了
7、修改节点数据
set /hello xxx
8、通过get获取数据看看改没改
得到xxx
9、删除节点,如果有子节点则无法删除
delete /hello
10、递归删除,全删
rmr /abc
10、列出历史记录
history
Zookeeper节点属性
一、获取
每个Znode都包含一系列的属性,可以通过get,获取属性
二、属性
dataVersion:数据版本号,每次set,dataVersion都会+1(即使没修改数据)
cversion:子节点的版本号,当Znode的子节点变化时就+1
ACLVersion:ACL的版本号
cZxid:Znode创建的事务id
mZxid:Znode被修改的事务id,即每次对Znode的修改都会更新mZxid
对于zk来说每次变化都会产生一个唯一的事务idzxid,通过该id确定更新操作的先后顺序
例如:zxid1<zxid2,说明zxid1先于2发生,zxid对于整个zk都是唯一的
ctime:节点创建时的时间戳
ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id(当前会话id),如果不是则为0