第一部分 初识zookeeper?
1,什么是zookeeper?
1,高可用、高性能、开源的分布式协调服务。为分布式应用提供一致性服务,可以实现发布/订阅,负载均衡,分布式协调/通知,集群管理等
2,目标是封装好复杂易出错的关键服务,提供给用户
3,ZooKeeper保证了分布式一致性(顺序一致性、原子性、单一视图、可靠性、实时性/最终一致性)
4,客户端的读请求
5,有序性,所有更新都是全局有序的
2,zookeeper的linux环境搭建
官网下载地址Apache ZooKeeper
步骤:
-
因为zookeeper是java写的,所以要安装jdk,并配置好环境
-
将在官网下载好的压缩包上传到linux系统上(最好建一个专门存软件包的文件夹)解压,解压命令tar -zxvf 压缩文件名
-
进入解压后的目录,看到zoo_sample.cfg配置文件,这是模板文件,我们复制一份,并创建data文件夹(用于存储数据)
cp zoo_sample.cfg zoo.cfg
-
pwd命令复制data文件夹路径,cd到conf文件夹,vi修改我们复制的那个文件
dataDir=复制的路径
-
尝试启动、连接、关闭zookeeper服务:cd到bin目录
./zkServer.sh start //开启服务 ./zkServer.sh stop //关闭服务 ./zkCli.sh //连接服务 ./zkCli.sh -server ip地址:端口号 //用ip地址连接 ./zkServer.sh status //查看服务状态
启动服务成功截图
关闭服务成功截图
状态查看截图
3,zookeeper的数据模型
ozookeeper的数据节点可以视为树状结构(或者目录),树中的各节点被称为znode(即zookeeper node),一个znode可以有多个子节点。zookeeper节点在结构上表现为树状;使用路径path来定位某个znode,比如/ns-1/guigu/mysql/schema1/table1,此处ns-1、guigu、mysql、schema1、table1分别是根节点、2级节点、3级节点以及4级节点;其中ns-1是guigu的父节点,guigu是ns-1的子节点,guigu是mysql的父节点,mysql是guigu的子节点,以此类推。
oznode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。
一个znode可以分为三个部分:节点的数据 节点的子节点,节点的状态
第二部分 基本命令的使用
连接zookeeper客户端后,可以使用如下命令:
help 查看帮助信息(最重要,这是帮助文档,记住这个命令即可)
whoami 查看当前用户
stat 查看节点的属性
下面是所有命令
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b|-N|-B] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,…]]] | [-add serverId=host:port1:port2;port3[,…]] [-remove serverId[,…]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b|-N|-B val path
stat [-w] path
sync path
version
使用监听器注意: 监听器是一次性的
参数说明
[]中的都是可选参数(即可加可不加)
-w watch,监听
-s sequence,顺序
-e ephemeral,临时
-v version,数据版本号
-R recursively,递归操作
节点属性说明
acl权限控制
1,权限模式
world 只有一个用户:anyone,代表登录的所有人(默认)
ip 对客户端通过ip:端口连接的做认证
auth 对添加认证(addauth digest 用户名:密码)的用户认证
digest 使用“用户名:加密密码”方式认证
2,授予的权限
create、delete、read、writer、admin也就是 增、删、改、查、管理权限,这5种权限简写为cdrwa,注意:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
3,举例
world模式 setAcl /路径 world:anyone:cdrwa
ip模式 先用ip连接服务,setAcl /路径 ip:127.0.0.1:cdrwa
auth模式
- addauth digest 用户名:明文密码
- setAcl /路径 auth:用户名:cdrwa
digest模式
- 用linux命令,echo -n 用户名:密码 | openssl dgst -binary -sha1 | openssl base64,复制加密后的密码
- addauth digest 用户名:明文密码
- setAcl /路径 digest:用户名:加密后的密码:cdrwa
4,多种模式授权
setAcl /node world:anyone:cdra,ip:192.168.211.129:crwa,auth:javagirl:drwa,digest:javagirl:tMWv2OiUQwAESYVpyRLr4NcbM1s=:ac
5,超级管理员
zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问任何权限的节点,其它用户的所有权限super都会有
设置
重启服务,并 vi 修改conf文件夹中的zkServer.sh
nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
之后启动连接服务,并输入addauth digest super:admin添加用户认证