dubbo+zookeeper

文章目录

  • 一 分布式系统
    • 1 概念
  • 二 zookeeper
    • 1 概念和特性
    • 2 安装
      • 2.1 目录介绍
      • 2.2 zoo.cfg配置
    • 3 zookeeper基本数据模型
      • 3.1概念
      • 3.2操作
    • 4 watcher机制
      • 4.1watcher机制(触发机制)
      • 4.2操作
    • 5 权限acl
      • 5.1 acl构成-permissions
      • 5.2 schema的world讲解
      • 5.3 schema的auth和digest讲解
      • 5.4 acl命令ip讲解
      • 5.4 acl值super超级管理员
      • 5.5 acl常用使用场景
    • 6 four letter words
    • 7 zk的作用体现
  • 三 集群
    • 1 伪分布式集群,真实集群类似
  • 四 java API
    • 1 zk连接和zk会话重试机制
    • 2 节点数据操作
    • 3 权限
    • countDownLatch
    • 五 Apache curator
  • 三 基于zookeeper的应用-dubbo服务
  • 四 分布式锁

一 分布式系统

1 概念

  • 一个整体一致对外并且处理同一个请求,内部的每台计算机都可以通信(rest/rpc)。
  • 经典的例子:一个客户下单,页面,到有商品服务,订单服务,账单服务。
  • 根据业务原有系统拆分,对客户不透明,对不同的服务可以进行集群。
  • 面向服务的开发就是所谓的微服务。

二 zookeeper

1 概念和特性

  • 概念:zookeeper是一个开源分布式协调服务。
  • 特性:
    dubbo+zookeeper_第1张图片
    dubbo+zookeeper_第2张图片

2 安装

jdk->单机zookeeper

2.1 目录介绍

  1. bin目录:常用命令
  2. conf:存放配置文件,需要修改zoo_sample.cfg,还包括configuration.xsl和log4j.properties
  3. contrib:附加功能
  4. dist-maven:mvn 编译后的目录
  5. docs:文档帮助
  6. lib:依赖jar包
  7. recipes:案例demo代码
  8. src:源码

2.2 zoo.cfg配置

  1. tickTime:用于计算的时间单元。比如session超时
  2. initLimit:用于集群,允许从节点连接并同步到master节点初始化连接时间,以tickTIme倍数来表示
  3. syncLimit:用于集群,master主节点与从节点职期间发送消息和应答的市价长度(心跳机制)。比如超过一定的时间,这个从节点是要被抛弃的。
  4. dataDir:必须配置。节点存储的数据存储位置
  5. dataLogDir:日志目录,如果不配置和dataDir公用
  6. clientPort:连接服务器的端口,默认是2181

    initLimit,tickTime,syncLimit是以tickTime的倍。
  • 启动:./ zkServer.sh start。状态:./ zkServer.sh status //standlone(单机)

3 zookeeper基本数据模型

3.1概念

  1. 树形结构,目录结构
  2. 每个节点称之为znode,也可以有子节点,也可以有数据
  3. 每个节点分为临时节点和永久节点,临时节点在客户端断开之后消失(session失效)
  4. 每个zk节点都各自的版本号,可以通过命令行显示节点信息
  5. 每当节点数据发生变化时,那么该节点的版本号会累加(乐观锁)
  6. 删除/修改过时节点,版本号不匹配则会报错
  7. 每个节点zk节点存储的数据不宜过大,几k即可
  8. 节点可以设置acl,可以通过权限来限制用户的访问

3.2操作

  1. 连接server,client
    启动server:./zkServer.sh start
    启动客户端:./zkCli.sh help有命令
    dubbo+zookeeper_第3张图片
    在这里插入图片描述
    下边的节点是空的。
    ls2 / = stat /
    get /
    详细解释
    dubbo+zookeeper_第4张图片
    test:是创建值的数据
    cZxid:id
    ctime:创建时间
    mzxid:修改id
    mtime:修改时间,如果没有修改过,和创建一致
    pZxid:子节点id
    cversion:子节点版本
    dataVersion:数据版本
    aclVersion:权限版本
    ephemeralOwner:临时节点会有值,否则就是0x0,后边不能创建节点(永久节点和临时节点)
    datalength:数据长度
    numChildren:有多少个孩子节点在这里插入图片描述
  • session的基本原理
    客户端与服务器之间的连接存在会话;每个会话都会可以设置一个超时时间;心跳结束,session过期。
  • session过期,则临时节点znode会被抛弃
  • 心跳机制:客户端向服务器发送ping命令
  1. create -s /test/seq value:有序节点
    create -e /test/tmp value:临时节点
    create /test/test1 test:永久节点
    dubbo+zookeeper_第5张图片
  2. set和create
    set path date [version]
    dubbo+zookeeper_第6张图片
    乐观锁 加版本号 set /test11 123 1:版本号已经变化就是会报错
    delete path version

4 watcher机制

4.1watcher机制(触发机制)

针对每个节点的操作,都会有一个监督者->wathcer
当监控的某个对象(znode)发生了变化,则触发watcher事件
zk中watcher是一次性的,触发后立即销毁
父节点,子节点增删改都能够触发器watcher
针对不同类型的操作,触发的watcher事件也不同:创建,删除,修改事件

4.2操作

  • 父节点watch事件
    dubbo+zookeeper_第7张图片
    对于父节点,ls /test20 watch设置之后,即使提示没有该node,则为创建该节点的时候增加了watch事件。当存在该节点的时候用stat和get命令。
  • 子节点事件: ls 设置父节点watch事件

5 权限acl

针对节点可以设置相关读写等权限,目的是为了保障数据安全性。
权限permissions可以指定不同的权限范围以及角色。

  • zk的acl通过[schema: id :permissions]来构成权限列表
    schema:代表采用的某种权限机制,4种
    id:代表允许访问的用户
    permissions:权限组合字符串
    以下是schema的:
    dubbo+zookeeper_第8张图片
    dubbo+zookeeper_第9张图片

5.1 acl构成-permissions

crdwa:create(创建子节点),read(读节点),delete(删除子节点),write(修改节点),admin

5.2 schema的world讲解

world:anyone:cdrwa
默认权限:
在这里插入图片描述
setAcl /test2 world:anyone:crdw
getAcl /test2

5.3 schema的auth和digest讲解

auth:明文
digest:密文
setAcl /name/test digest:test:密文:cdrwa
setAcl /name/test auth:test:test:cdrwa
addauth digest test:test登录

5.4 acl命令ip讲解

setAcl /names/ip ip:192.168.1.1

5.4 acl值super超级管理员

  1. 修改zkServer.sh增加super管理员
  2. 重启zkServer.sh

5.5 acl常用使用场景

命名空间 节点分离 开发/测试环境分离
生成环境上控制指定ip服务可以访问

6 four letter words

zk可以通过自身命令的简写来和服务器进行交互
nc命令
echo stat | nc localhost:2181
stat:查看zk的状态信息,以及是否mode(单例还是集群)
ruok:查看当前zkserver是否启动,返回imok
dump:列出未经处理的会话和临时节点
conf:相关服务器配置
cons:查看连接到服务器的客户端信息
envi:环境变量
mntr:监控zk健康信息
wchs:展示watch信息
wchp,wchc这两个比较全

7 zk的作用体现

  1. master节点选举:主节点挂了以后,从节点会接手工作,并且保证这个节点是惟一的,这也是所谓首脑模式,从而保证集群是高可用的。
  2. 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置更新到其他所有服务器,此操作在云计算中用的特别多 (使用的是watch事件)
  3. 发布订阅,类似于消息队列mq(amq,rmq),dubob发布者把数据存在znode中,订阅者会读取这个数据
  4. 提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁
  5. 集群管理,集群中保证数据的强一致性。主节点的数据同步到子节点

三 集群

zk集群,主从节点,心跳机制(选举模式)
最少的集群是3台
dubbo+zookeeper_第10张图片

1 伪分布式集群,真实集群类似

伪分布式是在同一台机器上,设置不同的ip来进行区分
需要注意:环境变量的配置,ip配置不同,端口号尽量相同

  1. 分别复制zookeeper,命名为zookeeper02,zookeeper03
  2. 分别修改conf中的zoo.cfg文件
    如下:
    server.1=127.0.0.1:2888:3888
    server.2=127.0.0.1:2889:3889
    server.3=127.0.0.1:2890:3890
    dubbo+zookeeper_第11张图片

server.A = B:C:D 其中A是一个数字,表示这个是第几号服务器;B是这个服务器的ip地址;C表示的是这个服务器与集群中的Leader服务器交换信息的端口;D表示的是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的leader,而这个端口就是用来执行选举时服务器相互通信端口。
clientPort:服务器接听客户端的端口

  1. myid文件 dataDir目录下,否则就是新建data目录,新建myid,同时写入对已经的server几号
  2. 记得修改zoo.cfg中的路径在这里插入图片描述
    以上这个是相对用户的路径,千万不要用这个。下边这个绝对路径才可以:
    在这里插入图片描述
  3. zkCli.sh -server localhost:2181来进行server1的节点,同时server2,server3的也会发生改变。
  4. 看主从状态

四 java API

常用的有zk原生api,zkclient,apache curator

1 zk连接和zk会话重试机制

2 节点数据操作

同步,异步

3 权限

countDownLatch

五 Apache curator

  1. 常用zk java客户端:zk原生api,zkclient,apache curator
  2. zk原生api的不足之处
  • 超时重连,不支持自动,需要手动操作
  • watch注册一次后会失效
  • 不支持递归创建节点
  1. apache curator 好处
  • 提供更多解决方案,分布式锁
  • 提供常用的zookeeper工具类
  • 解决watcher注册一次失效

三 基于zookeeper的应用-dubbo服务

dubbo.io 2.5.3
dubbox :当当
最大程度进行解耦,降低系统耦合性
生产者/消费者
zk注册中心,admin监控中心,协议支持

RPC调用,netty
dubbo+zookeeper_第12张图片
读数据库瓶颈,使用redis
rpc,restful
dubbo+zookeeper_第13张图片
同步调用
自定义响应数据 ,UUID
dubbo+zookeeper_第14张图片
dubbo+zookeeper_第15张图片
dubbo.xsd
< dubbo:application name=“imooc-”>
搭建一个项目:详见此博客
1.

四 分布式锁

你可能感兴趣的:(分布式框架)