Zookeeper的基础

认识Zookeeper

zookeeper是什么

分布式数据的一致性解决方案.

Zookeeper 能做什么

数据发布和订阅(配置中心,config,disconf,diamond,appollo)

负载均衡 dubbo利用zookeeper的机制实现负载均衡。

命名服务

master选举

分布式锁

分布式队列

Zookeeper特征

顺序一致性: 从同一个客户端发起事务请求,最终会严格按照顺序被应用zookeeper中。

原子性: 所有的事务请求处理的结果在整个集群中的所有机器上的应用情况都是一致的。

可靠性:一旦服务器成功应用某个事务,并且对客户端做出响应,那么这个数据在整个集群中一定是同并且保留下来

实时性: 一旦一个事务被成功应用,客户端就能够立即从服务端读取到事务变更后的最新的数据状态(近实时)

如何安装Zookeeper

一、https://archive.apache.org/dist/zookeeper/ 选择需要下载zk版本

  • windows安装
  • linux安装
    • 安装jdk
      • 下jdk
      • 解压jdk
      • 配置jdk环境 source /etc/profile 让配置文件项马上生效

      java -version

    • 安装zookeeper
      • 解压 tar xf zookeeper-3.4.12
      • 找到conf/zoo_sample.cfg文件复制改为zoo.cfg
      • 添加日志和数据文件存储目录 dataDir=/usr/local/dev/zookeeper-3.4.12/dataDir ## 数据文件dataLogDir=/usr/local/dev/zookeeper-3.4.12/logDir ## 日志文件
      • 启动zookeeper检查是否成功 bin/zkServer.sh start|restart|stop|status(查看节点状态) ./zkServer.sh status ZooKeeper JMX enabled by defaultUsing config: /usr/local/dev/zookeeper-3.4.12/bin/../conf/zoo.cfgMode: standalone 代表zookeeper单节点配置成功了。

通过客户端连接到服务操作

注意点: ./zkCli.sh 连接到的时候本地2181端口,如何向连接到其他服务器对应zookeeper端口.

./zkCli.sh -server ip:port

Zookeeper数据模型 Znode

ZK常用命令

基本操作命令

  • stat /path 【节点路径】【查看某个节点的详情】 cZxid = 0x182 创建节点的ID ctime = Tue Jan 01 14:34:19 CST 2019 节点的创建时间 mZxid = 0x182 修改节点ID mtime = Tue Jan 01 14:34:19 CST 2019 修改节点的时间 pZxid = 0x195 子节点ID【最新插入子节点ID】 cversion = 4 子节点的版本 dataVersion = 0 当前节点的数据版本 aclVersion = 0 权限版本 ephemeralOwner = 0x0 是否为临时节点 dataLength = 4 数据长度 numChildren = 2 子节点的个数
  • ls2 /path 【除了详情以外,还要列出所有子节点列表】
  • get /path【除了详情以外,会显示当前节点的值】
  • listquota path 【列出某个path配额】
  • setquota -n|-b val path 【设置某个节点配额】
    • n 代表是配置该节点下面的子节点个数
    • b 代表是代表path设置数据大小
  • delquota [-n|-b] path 删除设置节点配额
  • history 显示最后执行11条命令
  • create 新增节点

​ create -s -e path data acl 【-s 有顺序,-e 临时节点】

​ zk的节点类型:

​ 永久节点 【默认创建的节点是永久的】create /node/abc abc-value

​ 永久顺序节点 create -s /node/abc/test- test-data

​ 临时节点 【当前会话有效】[注意:临时节点下面不能创建节点] create -e /node/tmp value

​ 临时顺序节点 create -e -s /node/tmp- tmp-value

  • delete 删除节点 delete /node/abc/test0000000001
  • get 获取某个节点信息
  • set 修改节点信息 set /node/abc aaaaaaaaa 2

事件监听 Watcher[事件注册是一次性,注册一次使用一次]

stat path [watch]

ls path [watch]

get path [watch]

父节点

  • stat /gerry-node watcher //注册节点创建,删除,修改监听
  • ls /gerry-node watcher //注册节点删除监听
  • get /gerry-node watcher // 注册节点的删除和修改事件

子节点:

只能监听到子节点的删除和新增操作,修改操作是监听不了

  表示为NodeChildrenChanged事件

注意: 每次命令操作path都必须是绝对路径。

权限控制命令

ACL(Access Control List)

/amdin

/customer

/vip

  • getAcl 获取某个节点的权限
  • setAcl 设置某个节点的权限
  • addauth 注册用户 addauth digest 用户名 : 密码

ACL构成:

[schema: id : permissions]

schema 权限机制

  • world: 配置下只有一个id,就是anyone,组合写法:[world: anyone : permissions]
  • auth: 认证登录,需要有一个注册的用户 ,格式: auth:user:password:permissions
  • digest: 和auth是差不多的,但是在设置密码的时候必须是密文. Base64(sha1(password))
  • ip: 进行IP的访问限制 ,格式: ip:ip地址:权限
  • super: 超级管理员.

cdrwa: 【permissions】

create 创建

delete 删除

read 查询

write 设置节点的值

admin 管理员

实例操作:

setAcl /gerry world:anyone:ca // 使用world

setAcl /acl-node/abc auth:gerry:gerry:cdrwa // 使用auth

setAcl /acl-node/abc digest:gerry:E/2rNVgA7j4V7rNv488bTrvFiVc=:cdrwa // 使用digest

注意: 如果客户端重连,那么需要是addauth digest gerry:gerry登陆,如果不登陆是不能使用权限

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • redis cluster 的核心原理分析:gossip 通信、jedis smart 定位、主备切换

    gossip 的延迟在我们上一章节中迁移 slots 时(reshard),去做另外一个操作,会发现 configuration error,需要等待一会才能达...

    HUC思梦
  • kettle学习笔记(二)——kettle基本使用

    Kettle 的 Spoon 设计器用来设计转换(Transformation)和 作业(Job)。

    HUC思梦
  • Concurrent.util中的一些类

    分析:每次调用countDown(),数值减1,减到0,程序继续运行。上面new CountDownLatch(2)初始化数值为2.

    HUC思梦
  • Zookeeper 分布式应用

    这篇文章是旨在为那些想要利用Zookeeper协调服务能力进行分布式应用创建的开发者的入门指导,包括一些理论性和实践性的内容。

    WindWant
  • Elasticsearch 6.6 官方文档 之「节点」

    每次启动 Elasticsearch 实例时,都会启动一个节点。连接节点的集合称之为「集群」。如果你运行的是单个 Elasticsearch 节点,那么你也就拥...

    CG国斌
  • 详解 React 16 的 Diff 策略

    我相信在看这篇文章的读者一般都已经了解过 React 16 以前的 Diff 算法了,这个算法也算是 React 跨时代或者说最有影响力的一点了,使 React...

    桃翁
  • javaScript 原生DOM节点操作(最实用的dom节点操作大全)

    注意:除了通过id选择节点的方式拿到的是一个确定的节点,其余的方式拿到的都会是一个数组,那么获取数组里面对应的节点需要用索引来取并且在Elements后面有s ...

    憧憬博客
  • 详解 React 16 的 Diff 策略

    这是我 Deep In React 系列的第二篇文章,如果还没有读过的强烈建议你先读第一篇:详谈 React Fiber 架构(1)。

    Nealyang
  • Rafy 领域实体框架 - 树型实体功能(自关联表)

    在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解。 场景 在开发数据库应用程序时,往往会遇到自关联表的场景。例如,分类信息...

    用户1172223
  • Zookeeper实例 - 分布式锁

    需求场景 在分布式系统中,通常会有多个子系统需要操作同一资源,例如修改数据存储中的某一数据 这些子系统各自独立,操作共享资源时没有逻辑顺序,有可能会出现同时...

    dys

扫码关注云+社区

领取腾讯云代金券