ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。(百度百科)。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,其中分布锁和队列有Java和C两个版本,选举只有Java版本。一般用于分布式的消息监听(主要)和分布式锁的用途(次要)。

  我们这次先来简单安装一个zookeeper和zookeeper的一些简单命令的使用。

一、安装

1,下载

  输入,即可下载。我们最新版3.5.5为例来说。

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.5-bin.tar.gz

我们也可以直接去官网下载压缩包,然后自己上传到服务器上,下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

2,解压

tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz

根据自己的习惯可以自行建立软连接,我这apache还有一个tomcat,我就建立一个软连接了。

ln -s apache-zookeeper-3.5.5-bin zookeeper-3.5.5-bin

3,启动

  切换到我们zookeeper下的conf目录下,我们看到有三个文件,其中一个叫zoo_sample.cfg,我们拷贝一份,叫做zoo.cfg。

cp zoo_sample.cfg zoo.cfg

  切换回我们zookeeper下的bin目录下,直接输入

./zkServer.sh start

就可以启动我们的zookeeper,默认会执行我们刚才复制的配置文件。如果我们不想复制配置文件,我们也可以输入

./zkServer.sh start ../conf/zoo_sample.cfg

来指定我们的配置文件来启动

查看是否启动成功(在bin目录下执行)

./zkServer.sh status

4,配置(单机)

  我们来看一下我们的配置文件都写了什么吧。

tickTime=2000  # zookeeper时间配置中的基本单位 (毫秒)

initLimit=10 # 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime

syncLimit=5 # 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 即:syncLimit*tickTime

dataDir=/tmp/zookeeper # zookeper 数据存储目录

clientPort=2181 # 对客户端提供的端口号

maxClientCnxns=60 # 单个客户端与zookeeper最大并发连接数

autopurge.snapRetainCount=3 # 保存的数据快照数量,之外的将会被清除

autopurge.purgeInterval=1  # 自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。

5,客户端参数详解(本节重点)

  在我们的zookeeper的bin目录下输入

./zkCli.sh

就进入到我们的客户端了。输入help,先看看都有什么命令再来一个个尝试。

一个个来说一下。

addauth scheme auth 添加用户,语法在后面权限内会详细去说。

close 断开当前客户端和服务端的连接

config [-c] [-w] [-s] 动态加载配置

connect host:port 连接到客户端

create [-s] [-e] [-c] [-t ttl] path [data] [acl] 创建节点 -e 临时节点(不允许有子节点) -s 序列节点 -c 默认节点  (path为路径)  【data为数据】 【acl权限】 -t节点存活时间,我这未成功。有弄明白-t的小伙伴帮我一下,留言就行。

delete [-v version] path 删除节点(不能带有子节点) [-v version] 版本号,一般不用

deleteall path 删除节点(包含其子节点)

delquota [-n|-b] path 删除节点限额 -n 子节点数 -b 字节数

get [-s] [-w] path 取得节点的值 -s 取值和状态,-w 添加监听(监听数据)

getAcl [-s] path 取得限权,-s取权限和状态

history 历史操作记录

listquota path 查看节点限额

ls [-s] [-w] [-R] path查看节点  -s查看节点和内容  -w(添加监听是否添加或删除子节点,但不会监听子节点值的变化) -R查到所有节点(包含根节点)

ls2 path [watch] 相当于ls和stat的组合

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 重新操作某命令,与history配合使用

removewatches path [-c|-d|-a] [-l] 移除监听

rmr path 删除和deleteAll完全一致(已被deleteAll替换,不建议继续使用)

set [-s] [-v version] path data 给节点赋值 -s返回节点状态

setAcl [-s] [-v version] [-R] path acl 设置节点权限(后面会详细说一下这个)

setquota -n|-b val path 设置节点限额 -n 子节点数 -b 字节数

stat [-w]path 查看节点状态,-w同get -w用法

sync path 强制同步

二、节点类型:

  节点类型主要有四种:

PERSISTENT持久节点,一直存在的

PERSISTENT_SEQUENTIAL持久序号节点,不会重名的节点,可用于分布式锁

EPHEMERAL临时节点(不可在拥有子节点),当客户端退出时会删除。可用于心跳监听

EPHEMERAL_SEQUENTIAL临时序号节点(不可在拥有子节点)

三、节点属性:

我们可以通过stat [path]命令来查看节点的属性,我们来逐个看一下它对应的什么意思。

cZxid = 0x40 创建时事务ID,持久不变的数值。

ctime = Sat Sep 28 10:39:45 CST 2019 创建时间

mZxid = 0x47 当前数据变更时的事务ID,不包含子节点

mtime = Sat Sep 28 10:43:26 CST 2019 最后修改时间

pZxid = 0x41 子节点变更的事务ID,不包含子节点的数据变更,只是子节点的数量变化

cversion = 1 子节点变更版本号(子节点变更次数)

dataVersion = 1 数据版本号,变更次数

aclVersion = 0 权限版本号,变更次数

ephemeralOwner = 0x0 是否为临时节点,有值表示临时节点

dataLength = 4 当前节点的数据长度

numChildren = 1 子节点的数量

四、节点监听:

  这里很简单,只要我们添加get  -w [path] 就可以对我们的节点添加监听。这里需要注意的是,我们这的监听不会监听子节点,只监听当前设置节点值得变化和是否被删除。创建子节点和变更子节点的值不会监听。而且这个监听是一次性的。

如果想监听该节点下子节点的新增和删除,我们可以设置ls -w即可。

五、acl权限:

  ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode的防问。基于scheme:id:permission的方式进行权限控制。scheme表示授权模式、id模式对应值、permission即具体的增删改权限位。

scheme:认证模型分为四种:

1.world开放模式,world表示全世界都可以访问(这是默认设置)

2.ip,ip模式,限定客户端IP防问。

3.auth用户密码认证模式,只有在会话中添加了认证才可以防问

4.digest与auth类似,区别在于auth用明文密码,而digest 用sha-1+base64加密后的密码。在实际使用中digest 更常见。

permission权限位

c->CREATE可以创建子节点

d->DELETE可以删除子节点(仅下一级节点)

r->READ可以读取节点数据及显示子节点列表

w->WRITE可以设置节点数据

a->ADMIN可以设置节点访问控制列表权限

我们来看一下几个权限设置的小例子。

输入

getAcl /root

模式一全开放的就不写了,例如:setAcl /root world:anyone:ra即可。我们先来看一下IP模式的

IP模式:setAcl <path> ip:<ip地址|地址段>:<权限位>

setAcl /authDir ip:127.0.0.1:ra

意思我是对于127.0.0.1的IP设置了authDir目录的读和控制的权限(权限控制)

auth模式:

语法:

1. setAcl <path> auth:<用户名>:<密码>:<权限位>

setAcl /authDir auth:root:111:rwcda

2. addauth digest <用户名>:<密码>  注意中间的空格

addauth digest root:111

digest 权限:

语法:

设置echo -n root:123456 | openssl dgst -binary -sha1 | openssl base64 得到输出结果我们进行保存。

也就是我们一会账号root,密码123456对应的加密结果。

1. setAcl <path> digest :<用户名>:<密钥>:<权限位>

setAcl /digestDir digest:root:qiTlqPLK7XM2ht3HMn02qRpkKIE=:ra

2. addauth digest <用户名>:<密码>

addauth digest root:123456

到这里zookeeper的基本单机操作就说完了,也熟悉了一下,记住stat下面的几个ID啊,后面选举机制很重的参数。我们明天来说一下集群和JAVA_API的操作。


java架构之路-(分布式)初识zookeeper安装与参数详解的更多相关文章

  1. zookeeper的配置参数详解(zoo.cfg)

    配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件) 参数名 说明 clientPort 客户端连接server的端口,即对外服务端口,一般设置为2181吧. data ...

  2. tcpdump安装与参数详解

    Centos7安装Tcpdump 对于大部分的Linux操作系统,已经默认安装了tcpdump,可以通过以下命令查看: [root@localhost local]# tcpdump --versio ...

  3. Zookeeper安装和配置详解

    http://coolxing.iteye.com/blog/1871009 Zookeeper是什么 http://www.cnblogs.com/yuyijq/p/3391945.html Zoo ...

  4. 图灵学院Java架构师-VIP-【性能调优-Mysql索引数据结构详解与索引优化】

    最近报名了图灵学院的架构专题的付费课程,没有赶上6月份开课,中途加入的.错过了多线程的直播课程,只能看录播了

  5. 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响

    下面我们看一下Apache的 MaxClients 参数在Full GC 发生时是如何影响系统的. 大部分开发人员都知道在由于GC发生而导致的”停止世界现象(STW) “(详细请参见Understan ...

  6. Linux iftop 安装与参数详解

    介绍 iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能.必须以root身份才能运行. .编译安装如果采用编译安装可以到iftop官网下载最新的源码包. 安装前需要已经安装好 ...

  7. mysql5.6快速安装及参数详解

    一.所需软件 软件名称 版本 下载地址 当前环境 管理员账号/密码 mysql 5.6 yum安装 centOS6.7系统 zxfly/zxfly 二.安装说明 数据库所在目录 /database/m ...

  8. Xtrabackup 安装 参数详解

    目录 安装 常用参数详解 innobackupex 相关参数 xtrabackup相关参数 安装 继Xtrabackup 介绍,本次来讲解安装和使用. Xtrabackup的RPM包下载地址: 系统版 ...

  9. [转帖]java架构之路-(面试篇)JVM虚拟机面试大全

    java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html   下文连接比较多啊,都是我过整理的博客,很多答案都 ...

随机推荐

  1. python 35 多线程

    目录 多线程 1. 线程 2. 线程vs进程 3. 开启线程的两种方法. 4. 线程的特性 5. 线程的相关方法 6. join 阻塞 7. 守护线程 daemon 8. 互斥锁 多线程 1. 线程 ...

  2. unity_小功能实现(碰撞检测)

    1.触发器Trigger:勾选IsTrigger属性 //当player刚进入触发区域的时刻发生触发检测,比如在靠近门的某个区域门一直处于开着状态 void OnTriggerEnter(Collid ...

  3. tomcat8 编写字符编码Filter过滤器无效问题

    做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.charles.web.filter; import java.io.IOException; import ...

  4. JDBC主要API学习总结

    JDBC主要API学习 一.JDBC主要API简介 JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果. 二.Driver 接口 Java.sql.D ...

  5. ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名

    ABP默认的MVC启动模板在登录后, 右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备 使用ABP CLI创建一个名 ...

  6. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. sql查询技巧指南

    传送门(牛客网我做过的每到题目答案以及解析) sql定义: 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用 ...

  8. UVA-10004-Bicoloring二分图染色

    题意:给一张图,判断是不是二分图: 自己一开始不知道是二分图染色,理解的是任意三点不能互相连接 可能以后遇到这样的模型,可以往二分图想: 首先怎么判定一个图是否为二分图 从其中一个定点开始,将跟它邻接 ...

  9. cogs2223. [SDOI2016 Round1] 生成魔咒(后缀数组 hash 二分 set

    题意:对一个空串每次在后面加一个字符,问每加完一次得到的字符串有几个不同的子串. 思路:每个子串都是某个后缀的前缀,对于每个后缀求出他能贡献出之前没有出现过的前缀的个数,答案累加就行. 要求每个后缀的 ...

  10. codeforce440C-Maximum splitting-规律题

    题意:问一个数最多可以变成几个合数的和: 思路: 时刻提醒自己再看到题目的时候的所作所为,该找规律找规律,想什么ksm,质数判断开根号. 除了1.2.3.5.7.11外,其余的数都可以通过4,6,9获 ...