一、Linux环境安装Zookeeper
话不多说,直接上命令,按步骤执行即可~
1、查看JDK版本【Zookeeper需要Java环境】
java ‐version
2、下载并解压Zookeeper
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
3、重命名配置文件zoo_sample.cfg【备份原来的配置文件】
cd apache-zookeeper-3.5.8-bin/conf/
cp zoo_sample.cfg zoo.cfg
4、启动Zookeeper
bin/zkServer.sh start conf/zoo.cfg& #最后的‘&‘表示以守护线程的方式启动
5、连接Zookeeper
bin/zkCli.sh -server IP地址:2181 #默认端口为2181
二、Zookeeper的常用操作
创建节点
1、创建节点的命令格式
create [‐s] [‐e] [‐c] [‐t ttl] 目录 [data] [acl]
??:create /node1
- -s : 顺序节点
- -e : 临时节点
- -c : 容器节点
- -t : 可以给节点添加过期时间,默认禁用,需要通过系统参数启用
- data :节点值
- acl :权限控制【下面会介绍】
中括号为可选项,没有则默认创建持久化节点。
PS:Zookeeper没有相对路径的说法,任何对节点的操作都需要以/开头。
PS:临时节点不能创建子节点
PS:容器节点主要用来容纳字节点,如果没有给其创建子节点,容器节点表现和持久化节点一样,如 果给容器节点创建了子节点,后续又把子节点清空,容器节点也会被zookeeper删除。【分布式锁的父节点一般就是容器节点,因为当容器节点如果没有子节点(标识锁定的线程)时,会自动删除,不需要额外维护】
查看节点值
1、查看节点
get /node1 #查看/node1节点的值
ls / #查看/下的所有节点
修改节点
1、修改节点
set /node1 ‘this is value‘ #设置/node1节点的值为this is value
set -v 2 /node1 ‘new value‘ #带上版本号去修改/node1节点的值为new value【带版本号可以实现类似于乐观锁的功能】
查看节点状态
1、查看节点状态
stat /node1
- cZxid :创建znode的事务ID。
- mZxid :最后修改znode的事务ID。
- pZxid :最后添加或删除子节点的事务ID【子节点列表发生变化才会发生改变】。
- ctime :znode创建时间。
- mtime :znode最近修改时间。
- dataVersion :znode的当前数据版本【修改数据时可以用上这个字段实现乐观锁,与数据乐观锁类似的使用方式】。
- cversion :znode的子节点结果集版本【一个节点的子节点增加、删除都会影响这个版本】。
- aclVersion :表示对此znode的acl版本。
- ephemeralOwner :znode是临时znode时,表示znode所有者的sessionID。 如果 znode不是临时znode,则该字段设置为零。
- dataLength :znode数据字段的长度。
- numChildren :znode的子znode的数量。
三、事件监听机制
针对节点的监听:由特定的事件触发,对应的监听会被移除。PS:事件监听都是一次性的。
使用方法:
get ‐w /path #注册监听的同时获取数据
stat ‐w /path #对节点进行监听,且获取元数据信息
Zookeeper事件类型:
- None :连接建立事件
- NodeCreated :节点创建
- NodeDeleted :节点删除
- NodeDataChanged :节点数据变化
- NodeChildrenChanged :子节点列表变化
- DataWatchRemoved :节点监听被移除
- ChildWatchRemoved :子节点监听被移除
四、ACL 权限控制
定义:权限控制,可以控制节点的读写操作,保证数据的安全性。
组成:权限模式(Scheme)、授权对象(ID)、权限信息(Permission)
Scheme(权限模式)
用来设置ZooKeeper服务器进行权限验证的方式。ZooKeeper 的权限验证方式大体分为两种类型:
范围验证
定义:针对一个IP或者一段IP地址授予某种权限。
举个??:比如我们可以让一个IP地址为“120.24.58.161”的机器对服务器上的某个数据节点具有写入的权限。或者也可以通过“120.24.58.162/180”给一段IP地址的机器赋权。
口令验证
定义:使用用户名和密码验证的方式。
在ZooKeeper中这种验证方式是Digest认证,而Digest这种认证方式首先在客户端传送“username:password”这种形式的权限表示符后,ZooKeeper服务端会对密码部分使用 SHA-1和BASE64算法进行简单加密,以保证安全性。
world模式
定义:默认方式,相当于全世界都能访问。
auth
定义:不使用任何id,表示任何经过身份验证的用户【能登录就行~】。
授权对象(ID)
定义:把权限赋予谁
举个??:如果我们选择采用IP方式,使用的授权对象可以是一个IP地址或IP地址段。
举个??:如果使用Digest或Super方式,则对应于一个用户名。
PS:World 模式,是授权系统中所有的用户。
权限信息(Permission)
权限就是指我们可以在数据节点上执行的操作种类,Zookeeper中已经定义好的权限有 5 种:
- 创建权限(c: create):授予权限的对象可以在数据节点下创建子节点。
- 更新权限(w: wirte):授予权限的对象可以更新该数据节点。
- 读取权限(r: read):授予权限的对象可以读取该节点的内容以及子节点的列表信息。
- 删除权限(d: delete):授予权限的对象可以删除该数据节点的子节点。
- 管理者权限(a: admin):授予权限的对象可以对该数据节点体进行ACL权限设置。
常用命令
1、获取/node1节点的acl权限
getAcl /node1
2、修改/node1节点的acl权限
setAcl /node1 ip:127.0.0.1:cdrwa #ip的形式设置