| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Zookeeper基础常用操作以及ACL权限 -> 正文阅读 |
|
[大数据]Zookeeper基础常用操作以及ACL权限 |
这次将Zookeeper的一些基础用法以及权限这块的都补充一下在这篇博客中。 上篇博客介绍了基于ZooKeeper实现的分布式锁,也介绍了一些ZooKeeper的节点类型以及监听机制,今天这里就不作过多的介绍了,大家也可以自行的去官方文档上看看更具体的介绍ZooKeeper官方链接 会话会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关, 客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输: ? 看下这图,Zk客户端和服务端成功连接后,就创建了一次会话,ZK会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括: CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE 一旦客户端开始创建Zookeeper对象,那么客户端状态就会变成CONNECTING状态,同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED,通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重新连上服务端后,状态又变为CONNECTED,在通常情况下,客户端的状态总是介于CONNECTING和CONNECTED之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态 目录下载了ZooKeeper之后在bin目录下有以下可执行文件: 常用脚本zkCli:连接ZooKeeper服务的客户端脚本
zkServer:ZooKeeper服务的启动、状态以及关闭脚本
参数大全ZooKeeper服务启动默认需加载conf文件夹下的zoo.cfg文件,参数也可以自行去官方文档查询,ZooKeeper配置文件官方参数大全 这里列举一些常用的: clientPort:参数无默认值,必须配置,用于配置当前服务器对外的服务端口,客户端必须使用这端口才能进行连接 clientPortAddress:在3.3.0版本之后,监听客户端连接的地址(ipv4、ipv6或主机名);即客户端试图连接到的地址。这是可选的,默认情况下,我们以这样一种方式进行绑定,即服务器上的任何地址/接口/网卡的任何连接都将被接受。 dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。) dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争 dataDir:新安装zk这文件夹里面是没有文件的,可以通过snapCount参数配置产生快照的时机 以下配置集群中才会使用,后面再讨论 tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间 initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值 syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。 常用命令在ZooKeeper的客户端使用help命令是可以看到所有命令: 介绍一些常用命令: 显示根目录下、文件:?ls?/?使用?ls?命令来查看当前?ZooKeeper?中所包含的内容? 显示根目录下、文件:?ls2?/?查看当前节点数据并能看到更新次数等数据? 创建文件,并设置初始内容:?create?/zk?"test"?创建一个新的?znode节点“?zk?”以及与它关联的字符串? [-e] [-s] 【-e 零时节点】 【-s 顺序节点】 获取文件内容:?get?/zk?确认?znode?是否包含我们所创建的字符串? [watch]【watch 监听】 修改文件内容:?set?/zk?"zkbak"?对?zk?所关联的字符串进行设置 删除文件:?delete?/zk?将刚才创建的?znode?删除,如果存在子节点删除失败? 递归删除:rmr? /zk将刚才创建的?znode?删除,子节点同时删除 退出客户端:?quit 帮助命令:?help 节点上篇讲过节点,所以今天这里就不谈节点类型了,谈谈节点状态属性,在使用get命令查看具体数据的时候,会打印: ? ?ACL权限在ZooKeeper里面可以控制节点的访问权限,保障数据的安全 表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等) schema:代表授权策略 id:代表用户 permission:代表权限 scheme?world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的 auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication) digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication ip: 它对应?的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段 idscheme为auth时: username:password scheme为digest时:username:BASE64(SHA1(password)) scheme为ip时:客户端的ip地址。 scheme为world时anyone。 permissionCREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写) CREATE(c):创建子节点的权限 DELETE(d):删除节点的权限 READ(r):读取节点数据的权限 WRITE(w):修改节点数据的权限 ADMIN(a):设置子节点权限的权限 ACL命令getAcl?获取指定节点的ACL权限信息 setAclsetAcl /demo?world:anyone:crwa 设置指定节点的ACL权限 由于没用设置删除权限,所以在删除的时候就会提示无法删除 addauthaddauth? digest user1:123456设置用户和密码, setAcl /demo auth:user1:123456:crwa?使用用户去设置指定的权限,然后就可以直接登陆用户进行访问 在退出客户端之后再次连接客户端 对使用用户设置权限的节点无权访问,所以需登陆用户进行访问 即addauth digest user1:123456执行一下,就可以访问指定节点了 digestauth与digest的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录 addauth digest user1:123456? 设置用户密码 setAcl /demo digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa?使用digest来设置权限 如果这里使用明文登陆的话,会导致改节点不可访问 在ZooKeeper里面有可以获取密文方法,在命令执行如下: 命令:java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456 结果:deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs= IPcreate? /testDir/testIp data? 创建节点 setAcl? /testDir/testIp ip:192.168.30.10:cdrwa? 给指定节点设置指定IP可访问 getAcl ?/testDir/testIp?获取节点权限信息 超级管理员为了避免出现因权限设置的问题,所以在ZooKeeper中有超级管理员的权限存在 先获取super:admin的密文:super:xQJmxLMiHGwaqBvst5y6rkB6HQs= 在ZooKeeper启动的参数中添加启动超级管理员 添加参数:"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" 在客户端中启动超级管理员: addauth digest super:admin? 常用四字命令ZooKeeper?支持某些特定的四字命令字母与其的交互。用来获取?ZooKeeper?服务的当前状态及相关信息。可通过?telnet?或?nc?向?ZooKeeper?提交相应的命令?: 当然,前提是安装好了nc echo?stat|nc?127.0.0.1?2181?来查看哪个节点被选择作为follower或者leader echo?ruok|nc?127.0.0.1?2181?测试是否启动了该Server,若回复imok表示已经启动。 echo?dump|?nc?127.0.0.1?2181?,列出未经处理的会话和临时节点。 echo?kill?|?nc?127.0.0.1?2181?,关掉server echo?conf?|?nc?127.0.0.1?2181?,输出相关服务配置的详细信息。 echo?cons?|?nc?127.0.0.1?2181?,列出所有连接到服务器的客户端的完全的连接?/?会话的详细信息 echo?envi?|nc?127.0.0.1?2181?,输出关于服务环境的详细信息(区别于?conf?命令)。 echo?reqs?|?nc?127.0.0.1?2181?,列出未经处理的请求。 echo?wchs?|?nc?127.0.0.1?2181?,列出服务器?watch?的详细信息。 echo?wchc?|?nc?127.0.0.1?2181?,通过?session?列出服务器?watch?的详细信息,它的输出是一个与?watch?相关的会话的列表。 echo?wchp?|?nc?127.0.0.1?2181?,通过路径列出服务器?watch?的详细信息。它输出一个与?session?相关的路径。 还有一些其他的东西,后面有空在说呀 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:31:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |