Zookeeper基础常用操作以及ACL权限

这次将Zookeeper的一些基础用法以及权限这块的都补充一下在这篇博客中。

上篇博客介绍了基于ZooKeeper实现的分布式锁,也介绍了一些ZooKeeper的节点类型以及监听机制,今天这里就不作过多的介绍了,大家也可以自行的去官方文档上看看更具体的介绍ZooKeeper官方链接

会话

会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关,

客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输:

 

看下这图,Zk客户端和服务端成功连接后,就创建了一次会话,ZK会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括:

CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE

一旦客户端开始创建Zookeeper对象,那么客户端状态就会变成CONNECTING状态,同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED,通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重新连上服务端后,状态又变为CONNECTED,在通常情况下,客户端的状态总是介于CONNECTINGCONNECTED之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态

目录

下载了ZooKeeper之后在bin目录下有以下可执行文件:

常用脚本

zkCli:连接ZooKeeper服务的客户端脚本

bin/zkCli.sh -server 127.0.0.1:2181

zkServer:ZooKeeper服务的启动、状态以及关闭脚本

启动ZK服务:  bin/zkServer.sh start

查看ZK服务状态: bin/zkServer.sh status

停止ZK服务: bin/zkServer.sh stop

重启ZK服务: bin/zkServer.sh restart 

参数大全

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, 只要是通过authenticationuser都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)

digest: 它对应的idusername:BASE64(SHA1(password)),它需要先通过username:password形式的authentication

ip: 它对应 的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16bitIP

id

scheme为auth时:

username:password

scheme为digest时:username:BASE64(SHA1(password))

scheme为ip时:客户端的ip地址。

scheme为world时anyone。

permission

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

CREATE(c):创建子节点的权限

DELETE(d):删除节点的权限

READ(r):读取节点数据的权限

WRITE(w):修改节点数据的权限

ADMIN(a):设置子节点权限的权限

ACL命令

getAcl 

获取指定节点的ACL权限信息

setAcl

setAcl /demo world:anyone:crwa 设置指定节点的ACL权限

由于没用设置删除权限,所以在删除的时候就会提示无法删除

addauth

addauth  digest user1:123456设置用户和密码,

setAcl /demo auth:user1:123456:crwa 使用用户去设置指定的权限,然后就可以直接登陆用户进行访问

在退出客户端之后再次连接客户端

对使用用户设置权限的节点无权访问,所以需登陆用户进行访问

即addauth digest user1:123456执行一下,就可以访问指定节点了

digest

auth与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=

IP

create  /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 相关的路径。

还有一些其他的东西,后面有空在说呀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[中医经络学习一]足阳明胃经

人体有六脏(心、肝、脾、肺、肾五脏,再加心包)六腑(胃、小肠、大肠、膀胱、胆、三焦),每个脏腑都联接着一条经络,一共12条经络,称“十二正经”,经络的走向在四肢两侧基本…

ThreadLocal原理解析以及是否需要调用remove方法

平常的开发过程中,如果有个类不是线程安全的,比如SimpleDateFormat,要使这个类在并发的过程中是线程安全的,那么可以将变量设置位局部变量,不过存在的问题就是频繁的创建对象,对性能和资源会有一定降低和消…

Maven基础及概念

前言 今天就来聊聊Maven的基础和一些比较概念性的东西,还有一些常用的Maven命令啥的,主要是某人脑子记不住,记在博客中让她自己看吧,省的费心给她找。 后续的文章会聊到Maven的一些比较高级用法,像自定义插件&#x…

织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上域名绝对路径...

今天又接了个织梦CMS的有偿服务,客户想要后台添加文章内容的时候,缩略图自动变成带上绝对路径的格式.比如我们默认的缩略图是这样的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是这样的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的复习计划(二维树状数组)

题目链接:http://acm.buaa.edu.cn/problem/436/ 题意:一个数列两种操作:(1)将某个位置的数字改成另一个数字;(2)交换两个位置的数字。每次操作之后输出逆序数的个数。 思路&#xff…

Maven之pom.xml常用标签解析及镜像配置

前言 Maven仅仅是个打包工具而已,个人觉得没有太大必要花费在打包工具上,这里就列举一下个人觉得会常用标签的使用就好了,原理啥的基本就不太会去深度了解了,如果以后遇到需了解Maven工作原理的工作的话,到时候一定分…

idea 导入svn代码_idea导入svn项目

起初和导入git项目一样,file - new - project from version control - ,这后面选 subversion。在打开的 checkout from subversion对话框中,输入svn地址,比如 svn://11.22.33.44/demo。添加一个后,展开新加项&#xff…

由mysql8降级到mysql5

最近在研究liferay的使用。liferay可以连接mysql数据库。电脑中装的mysql的最新版本是mysql8。于是开始按照liferay的要求进行连接。但是多番尝试后,均报错:java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf计算矩阵维度_tensorflow中关于 多维tensor的运算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同与* ,用于计算矩阵之间的element-wise 乘法,要求矩阵的形状必须一致(或者是其中一个维度为1),否则会报错:import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…

Maven高级之插件开发

前言 终于来到了Maven的插件开发,其实Maven的插件并没有想象的那么难,刚开始讲Maven基础的时候就演示了一下JDK是如何打包的,Maven打包只是在JDK打包上封装了一层而已,Maven也支持自定义插件开发 创建 我们先使用quickstart原型…

HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处…

katalon进行app测试_Katalon API 测试 Demo

为何选择Katalon符合我们当下的情况,测试需要借助现有工具提高测试效率以及提高测试质量;为何不自己写代码?不是只有自己写的框架才是最好的,合适的才是最好的;katalon 支持ui、mobile、api 同时也支持脚本模式&#x…

Maven高级之archetype(原型/骨架)开发

前言 archetype这个的主要功能就是将写好的项目模块打包成一个原型,然后提供给其他人使用,这样别人就可以快速使用这个项目模板了。 这个东西虽然很多人都基本用不上,但原型这个东西用的好还是很方便的,能够在开发新项目上省去大…

深度学习在搜索业务中的探索与实践

本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改。引言 2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了非常重要的作用。本文会首先介绍…

cesium面积计算_cesium-长度测量和面积测量

(更新)多谢网友的提醒,面积测量的小问题已经修改,经测试可正常使用网上找的大神的实现方法有点问题,实现有一些bug,作为cesium新手一个,弃之不忍,只好硬着头皮修改了,不过还好问题不大&#xff…

SpringBoot自动配置原理流程

前言 新公司太忙了,都没啥空更新博客,就随便记录一下以前的学习笔记吧。SpringBoot是基于Spring上的衍生框架,只要看懂了Spring的话,学这个就比较简单了;SpringBoot也是在当前微服务时代下流行的框架,并且…

算法:对象方式数组去重

var arr [3, 1, 1, 4 , 2 , 4 , 2 , 4 , 2, 1, 1, 3, 3, 3];var ary[];var obj{};for(var i0;i<arr.length;i){var curarr[i];if(!obj[cur]){obj[cur]cur;ary.push(cur);}}console.log(ary); 复制代码

python实现路由功能_python 实现重启路由器

有一些服务&#xff0c;需要动态IP&#xff0c;所以我们用重启路由器的方法实现。人工重启不可选&#xff0c;用定时脚本执行即可。贴代码&#xff0c;每种路由器&#xff0c;提示不一样。需要路由器有telnet功能才行。#!/usr/bin/env python# -*- coding: utf-8 -*-import tel…

SpringBoot自定义Starter(自动配置类)

前言 SpringBoot其实从诞生以来围绕的核心就是快速构建项目&#xff0c;快速构建的前提是有人帮你做好轮子&#xff0c;开发者只要拿来即用就好了&#xff0c;而造好轮子的人就是SpringBoot的开发者&#xff0c;引入自动配置的形式帮助开发者快速创建项目&#xff0c;而自动配…

Java并发编程之synchronized关键字解析

前言 公司加班太狠了&#xff0c;都没啥时间充电&#xff0c;这周终于结束了。这次整理了Java并发编程里面的synchronized关键字&#xff0c;又称为隐式锁&#xff0c;与JUC包中的Lock显示锁相对应&#xff1b;这个关键字从Java诞生开始就有&#xff0c;称之为重量级锁&#xf…