java架构之路-(分布式)初识zookeeper安装与参数详解
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安装与参数详解的更多相关文章
- zookeeper的配置参数详解(zoo.cfg)
配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件) 参数名 说明 clientPort 客户端连接server的端口,即对外服务端口,一般设置为2181吧. data ...
- tcpdump安装与参数详解
Centos7安装Tcpdump 对于大部分的Linux操作系统,已经默认安装了tcpdump,可以通过以下命令查看: [root@localhost local]# tcpdump --versio ...
- Zookeeper安装和配置详解
http://coolxing.iteye.com/blog/1871009 Zookeeper是什么 http://www.cnblogs.com/yuyijq/p/3391945.html Zoo ...
- 图灵学院Java架构师-VIP-【性能调优-Mysql索引数据结构详解与索引优化】
最近报名了图灵学院的架构专题的付费课程,没有赶上6月份开课,中途加入的.错过了多线程的直播课程,只能看录播了
- 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
下面我们看一下Apache的 MaxClients 参数在Full GC 发生时是如何影响系统的. 大部分开发人员都知道在由于GC发生而导致的”停止世界现象(STW) “(详细请参见Understan ...
- Linux iftop 安装与参数详解
介绍 iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能.必须以root身份才能运行. .编译安装如果采用编译安装可以到iftop官网下载最新的源码包. 安装前需要已经安装好 ...
- mysql5.6快速安装及参数详解
一.所需软件 软件名称 版本 下载地址 当前环境 管理员账号/密码 mysql 5.6 yum安装 centOS6.7系统 zxfly/zxfly 二.安装说明 数据库所在目录 /database/m ...
- Xtrabackup 安装 参数详解
目录 安装 常用参数详解 innobackupex 相关参数 xtrabackup相关参数 安装 继Xtrabackup 介绍,本次来讲解安装和使用. Xtrabackup的RPM包下载地址: 系统版 ...
- [转帖]java架构之路-(面试篇)JVM虚拟机面试大全
java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html 下文连接比较多啊,都是我过整理的博客,很多答案都 ...
随机推荐
- python 35 多线程
目录 多线程 1. 线程 2. 线程vs进程 3. 开启线程的两种方法. 4. 线程的特性 5. 线程的相关方法 6. join 阻塞 7. 守护线程 daemon 8. 互斥锁 多线程 1. 线程 ...
- unity_小功能实现(碰撞检测)
1.触发器Trigger:勾选IsTrigger属性 //当player刚进入触发区域的时刻发生触发检测,比如在靠近门的某个区域门一直处于开着状态 void OnTriggerEnter(Collid ...
- tomcat8 编写字符编码Filter过滤器无效问题
做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.charles.web.filter; import java.io.IOException; import ...
- JDBC主要API学习总结
JDBC主要API学习 一.JDBC主要API简介 JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果. 二.Driver 接口 Java.sql.D ...
- ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名
ABP默认的MVC启动模板在登录后, 右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备 使用ABP CLI创建一个名 ...
- JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- sql查询技巧指南
传送门(牛客网我做过的每到题目答案以及解析) sql定义: 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用 ...
- UVA-10004-Bicoloring二分图染色
题意:给一张图,判断是不是二分图: 自己一开始不知道是二分图染色,理解的是任意三点不能互相连接 可能以后遇到这样的模型,可以往二分图想: 首先怎么判定一个图是否为二分图 从其中一个定点开始,将跟它邻接 ...
- cogs2223. [SDOI2016 Round1] 生成魔咒(后缀数组 hash 二分 set
题意:对一个空串每次在后面加一个字符,问每加完一次得到的字符串有几个不同的子串. 思路:每个子串都是某个后缀的前缀,对于每个后缀求出他能贡献出之前没有出现过的前缀的个数,答案累加就行. 要求每个后缀的 ...
- codeforce440C-Maximum splitting-规律题
题意:问一个数最多可以变成几个合数的和: 思路: 时刻提醒自己再看到题目的时候的所作所为,该找规律找规律,想什么ksm,质数判断开根号. 除了1.2.3.5.7.11外,其余的数都可以通过4,6,9获 ...