1、zookeeper介绍
2、linux安装zookeeper
3、zookeeper配置文件介绍
4、zookeeper基本数据模型
5、ZK基本特性与基于Linux的ZK客户端命令行学习
5.1、help和查看节点
5.2、创建命令
5.3、修改命令
5.4、删除命令
6、zk特性--watcher机制
6.1、创建父节点触发NodeCreated事件
6.2、修改父节点数据触发NodeDataChanged事件
6.3、删除父节点触发NodeDeleted事件
6.4、创建子节点触发NodeChildrenChanged事件
6.5、删除子节点 触发NodeChildrenChanged事件
7、acl权限
7.1、acl的构成
7.2、acl相关命令操作getAcl和setAcl
7.3、addauth digest user:pwd
7.4、设置权限ip
7.5、设置权限super
7.6、zk四字命令
1、zookeeper介绍 <--返回目录
简介
1)中间件,提供协调服务
2)作用于分布式系统,发挥其优势,可以为大数据服务
3)提供java和c语言的客户端api
zookeeper的特性
1)一致性:数据一致性,数据按照顺序分批入库
2)原子性:事务要么成功,要么失败,不会局部化
3)单一视图:客户端连接集群中的任一zk节点,数据都是一致的
4)可靠性:每次对zk的操作状态都会保存在服务端
5)实时性:客户端可以读取到zk服务端的最新数据
zookeeper的作用体现
1)master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群式高可用的。
2)统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多。
3)发布与订阅,类似消息队列MQ,dubbo发布者把数据存在znode上,订阅者会读取这个数据。
4)提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程中的锁。
5)集群管理,集群中保证数据的强一致性。
2、linux安装zookeeper <--返回目录
首先要有jdk环境。
zookeeper下载、安装以及配置环境变量
1)下载zookeeper linux安装包:zookeeper-3.4.11.tar.gz
2)安装 tar -xzvf zookeeper-3.4.11.tar.gz -C /usr/local
3)配置环境变量 vim /etc/profile
3、zookeeper配置文件介绍 <--返回目录
tickTime: 用于计算的时间单元。比如session超时:N*tickTime
initLimit: 用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
syncLimit: 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度。(心跳机制)
dataDir:数据存储的位置,必须配置
dataLogDir: 日志目录,如果不配置会和dataDir共用
clientPort: 连接服务器的端口,默认2181
bin目录的命令
启动:./zkServer.sh start
查看状态: ./zkServer.sh status
客户端连接:./zkCli.sh
4、zookeeper基本数据模型 <--返回目录
https://blog.csdn.net/qq_39827935/article/details/81214063
session基本原理:
客户端与服务器之间的连接存在会话;每个会话可以设置一个超时时间;心跳结束,session则过期;
session过期,则临时节点znode会被抛弃;
心跳机制:客户端向服务器的ping包请求
5、ZK基本特性与基于Linux的ZK客户端命令行学习 <--返回目录
5.1、help和查看节点 <--返回目录
help:查看所有指令
查看节点: ls /zookeeper 或 ls2 /zookeeper(保护状态信息)
查看节点状态信息: stat /zookeeper
查看节点数据和状态信息: get /zookeeper
5.2、创建命令 <--返回目录
默认创建持久节点(不加参数): create /oy data。如果ephemeralOwner=0x0则表示是持久节点,如果是其他,则是临时节点。
创建临时节点: create -e /oy/temp aaa, 断开客户端则临时节点被删除
创建顺序节点:create -s /oy/sec seq
5.3、修改命令 <--返回目录
set /oy/temp new-data。修改data后,dataVersion增1。
修改时的乐观锁控制
5.4、删除命令 <--返回目录
delete path [version]: 带版本号进行乐观锁控制;如果不带版本好,则直接删除
6、zk特性--watcher机制 <--返回目录
针对每个节点的操作,都会有一个监督者watcher;当监控的某个对象znode发生了变化,则触发watcher事件;zk中的watcher是一次性的,触发后立即销毁;
父节点、子节点增删改都能够触发其watcher;针对不同类型的操作,触发的watcher事件也不同:
(子)节点创建事件;(子)节点删除事件;(子)节点数据变化事件;
watcher使用场景:统一资源配置
6.1、创建父节点触发NodeCreated事件 <--返回目录
通过stat path [watch] 设置watcher,然后创建create /oy aaa会触发NodeCreated事件
6.2、修改父节点数据触发NodeDataChanged事件 <--返回目录
首先通过stat path [watch] 设置watcher,然后修改事件set /oy bbb会触发NodeDataChanged事件
6.3、删除父节点触发NodeDeleted事件 <--返回目录
首先通过命令get /oy watch注册事件;然后通过 delete /oy删除节点
6.4、创建子节点触发NodeChildrenChanged事件 <--返回目录
ls 为父节点设置watcher: ls /oy watch , 然后创建 create /oy/son1 aaa
6.5、删除子节点 触发NodeChildrenChanged事件 <--返回目录
ls 为父节点设置watcher: ls /oy watch , 然后创建 delete /oy/son1。
注: 修改字节点数据,不触发事件。需要通过 get或stat /oy/son1 watch来给 “/oy/son1”注册事件,然后修改该节点数据触发的是父节点NodeDateChanged事件
7、acl权限 <--返回目录
acl: access control lists 权限控制。针对节点可以设置相关读写权限,目的为了保障数据安全性。权限permissions可以指定不同的权限范围以及角色。
7.1、acl的构成 <--返回目录
zk的acl通过 [scheme:id:permissions] 来构成权限列表。scheme: 代表采用的某种权限机制;id:代表允许访问的用户;permissions: 权限组合字符串。
sheme之world: world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是 world:anyone:[permissions]。
sheme之auth: 代表认证登陆,需要注册用户有权限就可以,形式为auth:user:password:[permissions]。
scheme之digest: 需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]。简而言之,auth与digest的区别就是,前者明文,后者密文。setAcl /path auth:lee:lee:cdrwa 和 setAcl /path digest:lee:BASE64(sha1(password)):cdrwa是等价的,在通过addauth digest lee:lee后都能操作指定节点的权限。
sheme之ip: 当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]。
sheme之super:代表超级管理员,拥有所有的权限。
permissions:权限字符串缩写 cdrwa ==> create 创建子节点, delete 删除子节点, read 获取节点/子节点 , write 设置节点数据, admin 设置权限
7.2、acl相关命令操作getAcl和setAcl <--返回目录
getAcl:获取某个节点的acl权限信息。使用默认创建: create /oy/son1 aaa,默认的权限是 world:anyone:cdrwa 所有人有所有权限
setAcl: 设置某个节点的acl权限信息。
创建时指定权限
path=/oy/son1的权限是crwa, 没有d(delete)删除子节点权限。
auth:user:pwd:cdrwa
digest:user:BASE64(SHA1(pwd)):cdrwa
7.3、addauth digest user:pwd <--返回目录
addauth: 输入认证授权信息,注册时输入明文密码(登陆),但是在zk的系统里,密码是加密的形式存在的。
设置权限 auth:user:pwd:cdrwa 时,需要先用addauth创建用户。
第一次设置完auth权限后,无法修改用户名和密码,可以修改permissons
设置权限: digest:user:密文的密码
退出当前客户端连接,再次使用客户端连接,需要先使用 "addauth diegest user:明文密码" 进行登陆
7.4、设置权限ip <--返回目录
设置权限 ip:192.168.213.100:cdrwa
7.5、设置权限super <--返回目录
修改zkServer.sh 增加super管理员,然后重启zkServer
改前:
改后:
使用super用户登陆,可以操作
7.6、zk四字命令 <--返回目录
需要使用nc命令,安装yum install nc
四字命令格式:echo [commond] | nc [ip] [port]
查看zk状态信息:echo stat | nc 192.168.213.200 2181
查看当前zkServer是否启动,返回imok:echo ruok | nc 192.168.213.200 2181
列出未经处理的会话和临时节点: echo dump | nc ip port
创建一个临时节点create -e /oy/son6 aaa后再次使用dump查看
查看服务器配置 echo conf | nc ip port
查看客户端信息 echo cons | nc ip port
查看环境变量 echo envi | nc ip port
监控zk健康信息 echo mntr | nc ip port
展示watch的总数 echo wchs | nc ip port
使用wchc和wchp(需要配置zoo.cfg:4lw.commands.whitelist=stat,wchc等或*), 测试前使用 get /oy watch和get /oy1 watch 注册watcher
---