zookeeper

5 篇文章 0 订阅
1 篇文章 0 订阅

 

 

 zookeeper的介绍

简介

1,中间件,提供协调服务

2,作用于分布式系统,发挥其优势,可以为大数据服务

3,支持java,提供java和c语言的客户端api

分布式系统

1,很多台计算机组成一个整体,一个整体一直对外挺且处理同一请求

2,内部的每台计算机都可以互相通信(REST/RPC)

3,客户端到服务端的一次请求到响应结束会经历多台计算机

特性

一致性:数据一致性,数据按照顺序分批入库

原子性:事务要么成功要么失败,不会局部化

单一视图:客户端连接集群中的任一zk节点,数据都是一致的

可靠性:每次对zk的操作状态都会保存在服务端

实时性:客户端可以读取到zk服务端的最新数据

zookeeper安装(在Linux上)

1,首先安装jdk(jdk安装见前面写的博客)

2,解压缩zookeeper

[root@Ting installpackage]# tar -zxvf zookeeper-3.4.13.tar.gz

[root@Ting installpackage]# mv zookeeper-3.4.13 ../worktool/
[root@Ting installpackage]# cd

[root@Ting /]# cd usr/java/worktool/

重命名
[root@Ting worktool]# rename zookeeper-3.4.13 zookeeper zookeeper-3.4.13/

配置环境变量

[root@Ting worktool]# vi /etc/profile

export ZOOKEEPER_HOME=/usr/java/worktool/zookeeper

export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

 

 图片中包含了jdk、mysql、 zookeeper的配置

[root@Ting worktool]# cd zookeeper/conf/

1.复制zoo_sample.cfg
[root@Ting conf]# cp zoo_sample.cfg zoo.cfg

2,配置文件参数介绍

tickTime:用于计算的时间单元。比如session超时:N*tickTime

initLimit:用于集群,允许从节点连接并同步到主节点的初始化连接时间,以                           tickTime的倍数表示

syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制),以tickTime的倍数表示

dataDir:存放数据目录

dataLogDir:日志目录,如果不配置,将于dataDir共用一个目录

比如:dataDir=/usr/java/worktool/zookeeper/dataDir

dataLogDir=/usr/java/worktool/zookeeper/dataLogDir

clientPort:连接服务器的端口,默认为2181

[root@Ting conf]# vi zoo.cfg

在zoo.cfg中添加

dataDir=/usr/java/worktool/zookeeper/dataDir
dataLogDir=/usr/java/worktool/zookeeper/dataLogDir

zookeeper的主要目录结构

bin:运行命令

conf:配置文件,运行之前需要修改zoo_sample.cfg

contrib:附加的功能

dist-maven:mvn编译后的目录

docs:文档目录

lib:jar包目录

recipes:案例demo目录

src:源码
 

数据模型基本操作

1,客户端连接

[root@Ting conf]# cd ..

[root@Ting zookeeper]# cd bin/

[root@Ting bin]# ./zkServer.sh start

[root@Ting bin]# ./zkCli.sh -server 192.168.56.130:2181

2,查看znode结构

[zk: 192.168.56.130:2181(CONNECTED) 0]
[zk: 192.168.56.130:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.56.130:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: 192.168.56.130:2181(CONNECTED) 2] ls /zookeeper/quota
[]

3,关闭客户端连接

Ctrl+C Quit

4.停止服务

./zkServer.sh stop

5.重启服务

./zkServer.sh restart

6.查看状态

./zkServer.sh status

zookeeper作用体现

1,master节点选举,主节点挂了之后,从节点就会接手工作。并且保证这个节点是唯一的,即首脑模式。从而保证集群的高可用

2,统一配置文件管理。即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器。(云计算)

3,发布与订阅。类似于消息队列RabitMQ 、ActiveMq。dubbo发布者把数据存到znode上,订阅者会读取该数据

4,提供分布式锁, 分布式环境中不同进程之间争夺资源,类似于多线程中的锁

5,集群管理,保证数据的强一致性。

zookeeper常用命令操作

1,通过./zkCli.sh打开zk客户端进入命令行后台

2,ls与ls2命令 ls2为ls与stat命令的组合

cZxid = 0x0 创建ID

ctime = Wed Dec 31 16:00:00 PST 1969 创建时间

pZxid = 0x0 子节点ID

dataVersion = 0 当前数据版本号

aclVersion = 0 acl权限版本

ephemeralOwner = 0x0 持久节点与临时节点的区分标示 此处为持久节点

 

3,get与stat命令

4,create命令

 

create -e 创建临时节点

create -s 创建顺序节点

 

5,set指令

 

dataVersion = 1 版本号发送了变化

根据版本号来修改数据-即乐观锁

6,delete指令

删除也有版本号的限制

watcher机制

针对每个节点的操作,zk都会有一个监督者->watcher

当监控的某个对象(znode)发送了变化,则会处罚watcher事件

zk中的watcher是一次性的,触发后立即销毁

父节点、子节点 增删改都能够触发其watcher

针对不同类型的操作,触发的watcher事件也不同

1,(子)节点创建事件

2,(子)节点删除事件

3,(子)节点数据变化事件

watcher命令行操作

1,通过get/stat path 【watch】设置watcher

2,父节点增删改操作都会触发watcher

3,子节点增删改操作触发watcher

watcher事件类型之父节点

创建父节点触发:NodeCreated                   通过help指令查看设置watch事件的命令

 

修改父节点数据触发:NodeDataChanged

 

删除父节点:NodeDeleted

 

watcher事件类型之子节点

ls为父节点设置watch,创建子节点触发:NodeChildrenChanged

 

ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged

 

ls为父节点设置watch,修改子节点不触发事件;通过get/stat设置事件

 

watch使用场景

统一资源配置

zk特性-session的基本原理

1,客户端与服务端之间的连接会话

2,每个会话都可以设置一个超时时间

3,心跳结束,session则过期

4,session过期,则临时节点znode会被抛弃

5,心跳机制:客户端向服务端的ping包请求。可通过创建临时节点来查看(退出客户端临时节点还会继续发送心跳包,此时还可以查看。时效段过了后,则查看不了该节点)

ALC(access control lists)权限控制列表

1,针对节点可以设置相关读写等权限

2,权限可以指定不同的权限范围以及角色

ACL命令行

1,getAcl:获取某个节点的acl权限信息

2,setAcl:设置某个节点的acl权限信息

3,addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk系统里,密码是以加密的形式存在的

ACL的构成

1,zk的acl通过[scheme:id:permissions]来构成权限列表

scheme:代表采用的某种权限机制

1),world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]

2),auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]

3),digest:需要密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]

auth与digest的区别就是,前者明文,后者密文

setAcl /path auth:lee:lee:cdrwa与

setAcl /path digest:leeBASE64(SHA1(password))cdrwa是等价的,在通过addauth digest lee:lee后都能操作指定节点的权限

4),ip:当设置ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]

5)super:代表超级管理员,拥有所有的权限

id:代表允许访问的用户

permissions:权限组合字符串

     --权限字符串缩写 crdwa

1,create:创建子节点

2,read:获取节点/子节点

3,delete:删除子节点

4,write:设置节点数据

5,admin:设置权限

ACL命令行学习

1,world:anyone:cdrwa

 

此时删除节点报错

 

重新赋值权限再删除

 

2,acl auth的使用

[zk: localhost:2181(CONNECTED) 0] addauth digest aa:aa 添加用户密码到zk库

'digest,'aa:yr3WY3jl0t9TOJWOvenTBfrUTe8= 密码以密文形式存储

3,acl digest的使用

todo

4,acl ip的使用

 

5,acl super超级管理员

1)修改zkServer.sh增加super管理员

2)重启zkServer.sh

zk四字命令

1,与服务器进行交互

zk集群 主从节点,心跳机制(选举模式)

搭建集群注意点

1,配置数据文件 myid 1/2/3 对于 server.1/2/3

2,通过./zkCli.sh -server [ip]:[port]检测集群是否配置成功

伪分步是集群搭建

克隆虚拟机的话,修改vi /etc/sysconfig/network-scripts/ifcfg-eth0 ,将HWADDR="00:0C:29:8C:32:25"

修该为虚拟机对于的MAC地址(虚拟机设置 网络适配器 高级 MAC),然后重启网卡service network restart

1,copy zookeeper

   cp zookeeper/ zookeeper02 -rf

cp zookeeper/ zookeeper03 -rf

2,修改zoo.cfg       ip:同步端口号:选举端口

server.1=192.168.25.128:2888:3888  

server.2=192.168.25.128:2889:3889

server.3=192.168.25.128:2890:3890

3,在zookeeper中的dataDir目录中创建myid 内容为1

4,在zookeeper02中修改zoo.cfg 将clientPort修改为2182,添加server配置见步骤2

并修改日志目录 数据目录

5,进入zookeeper02的dataDir目录 创建myid 内容为2

6,在zookeeper03中修改zoo.cfg 将clientPort修改为2183,添加server配置见步骤2,并 修改日志目录 数据目录

7,进入zookeeper03的dataDir目录 创建myid 内容为3

8,分别进入zookeeper zookeeper02 zookeeper03 bin目录下启动./zkServer.sh start

启动日志如果报错,查看 bin/zookeeper.out

测试伪分步的集群

连接一台服务        ./zkCli.sh -server localhost:2181

[zk: localhost:2181(CONNECTED) 0] ls /

[zookeeper, java12, ipdemo]

创建节点

[zk: localhost:2181(CONNECTED) 1] create /culster 111111

Created /culster

[zk: localhost:2181(CONNECTED) 2] ls /

[zookeeper, java12, ipdemo, culster]

退出并连接另外一台服务器

[zk: localhost:2181(CONNECTED) 3] [root@localhost bin]# ./zkCli.sh -server localhost:2182

查看是否存在culster节点

[zk: localhost:2182(CONNECTED) 0] ls /

[zookeeper, java12, ipdemo, culster]

[zk: localhost:2182(CONNECTED) 1]

测试选举

关闭集群中主节点的机子或伪分步的主节点服务

伪分步下:

 

zookeeper Apache Curator客户端的使用

1,会话连接与恢复

2,节点的增删改查

3,watch与acl的相关操作

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值