1.概念

1.1集群中的角色
leader服务器:zookeeper集群的核心
follower服务器:zookeeper集群状态的跟随者
observer服务器:观察者1.2会话
会话是指客户端与zookeeper服务器连接,客户端与服务器建立一个长的TCP的连接来维持一个session,客户端启动时首先与服务器建立一个TCP连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的对话,也能向服务器发送请求获取响应。1.3数据节点
zookeeper中的数据节点有两类
集群中的一台机器称为一个节点;
数据模型中的数据单元Znode,分为持久节点和临时节点。
zookeeper就像一颗树,树的节点就是Znode

1.4版本号
version:当前数据节点数据内容的版本号
cversion:当前数据节点子节点的版本号
aversion:当前数据节点ACL变更版本号
在zookeeper中版本号一般是数据节点的变更次数,所以可以用来实现分布式锁1.5事件监听器
zookeeper允许用户在指定节点上注册一些watcher,当数据节点发生变化的时候,zookeeper服务器会把变化通知给订阅的客户端。1.6采用ACL策略进行权限控制
create:创建子节点的权限
read:获取节点数据和子节点列表的权限
write:更新节点列表的权限
delete:删除子节点列表的权限
admin:设置节点ACL的权限

2.zookeeper环境的搭建

ZooKeeper的模式分为三种,分别为:单机模式、集群模式和伪集群模式。
2.1 准备工作(集群模式)
使用vmware创建三个centos7的虚拟机,ip地址为,172.16.114.129,
172.16.114.130,172.16.114.133,必须安装java环境。
分别下载zookeeper包(3.4.6),将包下载到/opt目录下。2.2 创建配置文件
zookeeper运行时默认加载conf的zoo.cfg文件,而在conf下有一份模版配置文件zoo_sample.cfg,复制这份模版并命名zoo.cfg。修改zoo.cfg。
dataDir:zookeeper存储快照文件的目录,可以改成/var/zookeeper
clientPort:zookeeper对外提供服务的端口号
配置服务器的格式:
server.id=host:port:port
id:服务器的id,为整数
host:服务器的ip地址
第一个port:follow服务器和leader服务器的通信端口
第二个port:用于leader选举过程中的投票通信端口这里有三台服务器,所以配置三台(端口号不冲突就行)
server.1=172.16.114.129:2888:3888
server.2=172.16.114.130:2888:3888
server.3=172.16.114.133:2888:3888


把这份配置文件分别复制到三台服务器conf目录下。

2.3 启动服务器
在zookeeper的bin目录下有一些可执行文件
zkserver.sh 有几个参数
start:普通启动zookeeper服务器
start-foreground:启动zookeeper服务器,并在控制台打印出启动日志(这个启动日志在bin目录下zookeeper.out内)
stop:关闭服务器
restart:重启服务器
status:查看服务器状态
upgrade:升级zookeeper使用
print-cmd:查看zookeeper启动的各个参数,包括java路径等这里启动zookeeper服务器
./zkServer.sh start
然后执行./zkServer.sh status查看启动状态
如果只启动了一台zookeeper肯定会报错,必须半数以上启动才成功。伪集群模式:集群所有的机器都在一台机器上,但是还是以集群的特性对外提供服务。
配置文件:
server.1=172.16.114.129:2888:3888
server.2=172.16.114.129:2889:3889
server.3=172.16.114.129:2880:3880单机模式:保留一台服务器
配置文件:
server.1=172.16.114.129:2888:3888

3.zookeeper客户端

3.1建立连接
通过conf下的zkcli.sh,与服务器建立连接
./zkCli.sh -timeout 0 -r -server ip:port
timeout:与服务端建立连接的超时时间,通过心跳来判断连接的有效,如果在指定时间内没有收到心跳包,连接就失效。单位:毫秒
r:如果这个服务器也集群中半数以上服务器失去连接后,就不再处理客户端的请求,设置r可以使服务器对外只提供读服务。
./zkCli.sh -timeout 5000  -server 172.16.114.130:21813.2客户端命令
输入h:可以查看可使用的命令

基本归纳为对数据节点的增删改查
查询:
ls path:列出某个节点下的所有子节点的信息
例 ls / :列出根目录下所有的子节点信息
stat path:查看某个节点的状态信息
例 stat /node_3:node_3节点的状态信息

cZxid:zookeeper每一次写操作都是一次事务,代表事务id
ctime:当时创建的时间
mZxid:最后一次更新时的事务id
mtime:最后一次更新的时间
pZxid:最后一次修改子节点列表的事务id(子节点的添加删除,修改子节点数据内容不算在内)
cversion:子节点的版本号
dataVersion:数据版本号
aclVersion:权限版本号
ephemeralOnwer:临时节点版本号,如果是持久节点固定为0
datalength:数据的长度
numChildren:子节点的数目get path:获取节点的数据内容
例 get /node_3
stat指令的内容也会输出ls2 path:相当于 ls指令加上stat指令创建:
create [-s] [-e] path data acl
-s:创建顺序节点
-e:创建临时节点
path:创建的路径
data:创建节点的数据内容
acl:创建节点的权限管理加-s和不加的区别在于

所以可以利用顺序节点制作分布式的主键生成器修改:
set path data [version]:version修改的版本号

版本号会自增,而当我们添加版本号参数时,版本号必须与当前版本号一致,否则修改失败,相当于验证版本号(和乐观锁类似)删除:
delete path [version]:只能删除没有子节点的节点
rmr path:循环删除子节点配额(限制子节点的个数与子节点数据值的长度):
setquota -n|-b val path:设置配额
-n:val代表所有子节点的个数(包括他自己)
-b:val代表所有子节点数据值的长度(包括他自己的数据值)
配额的设置不是不允许你超过这个值,而是超过后会以警告的形式记录到日志(zookeeper.out)中。listquota path:查看配额信息

第一行:配额设置的完整路径
第二行:设置的配置信息,-1代表没做设置
第三行:当前节点的信息delquota -n|-b path:删除配额其他:
quit:结束当前客户端与服务端会话
connect host:port :与其他服务端建立连接
close:关闭与其他服务端的连接
history:执行过的指令
redo cmdno:根据历史命令的编号重复执行该条指令

4.zookeeper配置文件详解(zoo.cfg)

4.1基础配置
dataDir:zookeeper存储快照文件的目录
clientPort:zookeeper对外提供服务的端口号
tickTime:zookeeper中配置最小时间单元的长度4.2高级配置
dataLogDir:设置存储事务日志文件的目录(默认会和快照数据存放在同一目录)
为了保证事务的一致性,zookeeper会在事务请求响应之前,必须将本次请求对应的事务日志写入到磁盘中,因此事务写入的性能,直接决定zookeeper处理请求的吞吐量。因此将日志存储点挂载在新的磁盘上能大大提高性能。globalOutStandingLimit:为了防止服务端资源过度消耗,服务端限制同时处理的请求数。preAllocSize:事务日志文件预分配的存储空间,默认64MsnapCount:用于配置相邻两次数据快照之间的事务处理次数maxClientCnxns:限制单个服务器与单台客户机之间的并非连接数,通过IP地址ClientPortAddress:针对多网卡机器,为每个ip地址指定不同的监听端口maxSessionTimeout、minSessionTimeout:服务端对客户端超时时间进行限制fsync.warningthresholdms:事务日志记录消耗时间的报警阀值,一旦超过这个时间就会在日志中打印出警告信息autopurge.snapRetainCount:3.4.0版本开始,提供历史事务日志和快照数据自动清理的功能,该参数保证清理时需要保存的最小事务日志和快照数据文件,最小值是3。autopurge.purgeInterval:与autopurge.snapRetainCount配套使用,设定清理的频率,配置0或负数就不开启,默认不开启electionAlg:用于配置leader选举算法,目前没什么意义initLimit:用于配置leader服务器等待follow服务器启动并完成数据同步的时间
follow服务器在启动时会与leader服务器建立连接,并完成对数据的同步,从而确定自己对外提供服务的起始状态。leader服务器允许follow服务器在initLimit时间内完成这个操作。通常不配置。当数据量增大时,可以适当调整。leaderServes:用于配置leader服务器是否接受客户端的连接,默认是。通常leader服务器用于处理分布式的协调。syncLimit:leader服务器和follow服务器进行心跳检测的最大延时时间。网络延时时,适当调大参数。cnxTimeout:用于配置leader选举过程中,各个服务器之间进行数据交换,建立TCP连接的最大超时时间forceSync:用于配置服务器是否在事务提交的时候将日志写入操作,强制刷入磁盘,默认是yesjute.maxbuffer:单个节点上可以存储的最大数据量的大小,必须所有服务器都设置才生效,默认1MskipACL:用于配置服务器是否跳过ACL权限检查,默认是no。详细可以查看
http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html

5.zookeeper四字命令

5.1 echo stat|nc 172.16.114.133 2181

5.2 echo conf|nc 172.16.114.133 2181
用于输出zookeeper的运行时的基本配置信息

5.3 echo cons|nc 172.16.114.133 2181
当前这台服务器所有客户端连接的详细信息(ip,会话id,最后一次与服务器交互的操作类型)

5.3 echo crst|nc 172.16.114.133 2181
重置所有客户端连接统计信息5.4 echo dump|nc 172.16.114.133 2181
用于输出当前集群的所有会话信息,包括这些会话的会话ID,以及每个会话创建的临时节点信息。5.5 envi命令用于输出ZooKeeper所在服务器运行时的环境信息。5.6 ruok命令用于输出当前ZooKeeper服务器是否在正常运行。如果返回"imok"则表示正常,否则没有任何响应输出。5.7 srvr命令和stat命令的功能一致,唯一的区别是srvr不会将客户端的连接情况输出,仅仅输出服务器的自身信息。5.8 srst命令是一个功能性命令,用于重置所有服务器的统计信息。5.9 wchs命令用于输出当前服务器上管理的Watcher的概要信息。5.10 wchc命令用于输出当前服务器上管理的Watcher的详细信息,以会话为单位进行归组,同时列出该会话注册了Watcher的节点路径。5.11 wchp命令和wchc命令非常类似,用于输出当前服务器上管理的Watcher的详细信息。5.12 mntr命令用于输出比stat命令更详细的服务器统计信息,包括请求处理的延迟情况、服务器内存数据库大小和集群的数据同步情况。

6.zookeeper Acl权限管理

ZK的节点有5种操作权限:CREATE、READ、WRITE、DELETE(对子节点的删除权限)、ADMIN 增、删、改、查、管理权限,这5种权限简写为crwda身份的认证有4种方式:
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证
ip:使用Ip地址认证
可以通过getAcl path 来查看当前的权限添加权限:
ip方式:
setAcl /node ip:172.16.114.129:crwda
digest方式:create /node data digest:(Base64(SHA-1(username:password))):权限
create /node 3123 digest:wjw:SR86oLgHR5LQYIJvgm1H7U9j/Z8=:crwda
当然也能对已创建的节点添加 把create 换成 setAcl即可认证用户:
addauth digest wjw:123456
addauth ip:172.16.114.129还有一种用明文的方式创建
先用addauth digest user:12345 增加一个认证用户,然后用 setAcl /test auth:user:12345:r 设置权限当权限密码忘了,zookeeper还提供了超级管理员,修改zkServer.sh的109行添加
"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:g9oN2HttPfn8MMWJZ2r45Np/LIA="
使之变成
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=wj:T+mFmaVnFBU3Do5/VBaOdCMlLsE=" \

7.zookeeper JMX

1.修改zookeeper的启动脚本(zkServer.sh)

修改ZOOMAIN

-Djava.rmi.server.hostname=172.16.114.129(规定jconsole连接的服务器的名称)
-Dcom.sun.management.jmxremote.port=8899(端口号)
-Dcom.sun.management.jmxremote.ssl=false(是否启用ssl)
-Dcom.sun.management.jmxremote.authenticate=false(是否启用权限验证)

重新启动(每个服务器都要修改)
打开jdk bin目录下的jconsole,然后登陆。

在MBean下org.apache.ZooKeeperService下是zookeeper服务器的一些信息。

zookeeper集群搭建与使用相关推荐

  1. 2021年大数据ZooKeeper(二):ZooKeeper集群搭建

    目录 ZooKeeper集群搭建 第一步:下载zookeeeper的压缩包,下载网址如下 第二步:解压 第三步:修改配置文件 第四步:添加myid配置 ​​​​​​​第五步:安装包分发并修改myid的 ...

  2. 单台主机 kafka + zookeeper 集群搭建

    文章转自: https://www.jianshu.com/p/dc4770fc34b6 在单台主机上搭建kafka + zookeeper 集群. zookeeper 集群搭建 kafka是通过zo ...

  3. 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel

    ZooKeeper集群搭建中出现错误: [myid:1] - WARN [QuorumPeer[myid=1](plain=0.0.0.0:2181)(secure=disabled):QuorumC ...

  4. Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建

    Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...

  5. zeekooper集群搭建_How to do - ZooKeeper集群搭建(我见过最详细的完整教学)

    ZooKeeper集群介绍 最典型集群模式: Master/Slave 模式(主备模式).在这种模式中,通常 Master服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的 ...

  6. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  7. zookeeper专题:zookeeper集群搭建和客户端连接

    文章目录 1. Zookeeper 集群模式介绍 2. zookeeper 集群搭建 3. 使用curate客户端连接zookeeper集群 1. Zookeeper 集群模式介绍 Zookeeper ...

  8. Zookeeper集群搭建(涵盖命令详解)与Error contacting service. It is probably not running的问题解决

    搭建部分参考文章:http://www.cnblogs.com/luotianshuai/p/5206662.html 这篇博客分为四个部分: >>>zookeeper简介 > ...

  9. DCOS搭建zookeeper集群搭建

    dcos上zookeeper集群搭建 参考地址:https://my.oschina.net/dslcode/blog/1944775 1.在docs上构建zookeeper服务的json脚本 {&q ...

  10. Kafka+zookeeper集群搭建

    Kafka[第一篇]Kafka集群搭建 Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews) ...

最新文章

  1. q函数表格怎么看_会计表格函数玩不会?超实用会计表格函数公式大全,财务人都在用...
  2. oracle23290,oracle标题
  3. xxx钻石商城功能开发需求
  4. mysql 停止同步_MYSQL从库数据冲突导致同步停止
  5. python装饰器作用和功能_python装饰器大详解
  6. 前馈神经网络对mnist数据集实战
  7. 根据用指定的月份,打印该月所属的季节(if else)3,4,5 春季 6,7,8 为夏季 9,10,11 秋季 12,1,2为冬季(switch 与 if(){}else{})两种写法
  8. 3D Object Detection入门——PointRCNN代码学习
  9. Cronbach’s α?KMO系数?因子载荷?史上最易懂的问卷信效度分析教程!!!(SPSS和AMOS)
  10. 0.96寸OLED12864显示屏设计方案(原理图+PCB+BOM表+程序)
  11. 互联网产品经理面试问题汇总(18问)
  12. php 汇率接口,PHP 对交易对汇率 转换
  13. python百度关键词自动提交订单_Python+selenium刷百度关键词点击
  14. 黑马旅游网-旅游分类线路分页显示(七)
  15. YOLO-先验框/anchor(锚点)
  16. 微信公众号渠道二维码怎么生成?可以进行用户分组吗?
  17. 跑动大数据的笔记本配置_大数据专业用什么样的笔记本合适?
  18. 帝国html5图片站模板,html5响应式自适应帝国CMS整站模板源码瀑布流文章图片资讯文章站...
  19. 基金学习笔记 (一)
  20. linux改变群组的命令,linux改变文件群组命令

热门文章

  1. kettle | error working eith XUL fedinition
  2. 1年工作经验的一个初中学历程序员的感悟
  3. 基于JAVA视听小说计算机毕业设计源码+数据库+lw文档+系统+部署
  4. 可折叠手机是未来趋势吗?三星和苹果谁能脱颖而出?
  5. 用css做一个小风车
  6. 模仿百度卫士应用最新版源码下载
  7. 一款仿知音漫客的漫画 APP
  8. ibe加密原理_第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案...
  9. GS12170-IBE3,SDI/HDMI 桥接器
  10. 昨天的朋友圈貌似推出了阅后即焚的功能