【Zookeeper基本数据模型及注意点】

* zk的数据模型可以类比为Linux的文件目录,是一种树状结构,如:/dubbo/com.service.DemoService/provider....

* 每一个节点都称之为znode,它可以有子节点,也可以有数据。

* 每个节点分为临时节点和永久节点,临时节点在客户端断开连接后消失。

* 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息

* 每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)。

* 删除/修改过时节点,版本号不匹配会报错。

* 每个zk节点存储的数据不宜过大,不超过几k。

* 节点可以设置ACL,可以通过权限来限制用户的访问。

【ZK特性——session基本原理】

* 客户端和服务端之间的连接存在会话

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

* 心跳结束,Session则过期(客户端会定时向服务端发送心跳指令)

* Session过期,则临时节点Znode会被抛弃

* 心跳机制:客户端向服务端的ping包请求

【Zookeeper数据模型基本操作】

【 zkServer.sh 相关 】

[ 启动zkServer ]

//进入zk的bin目录:cd /zookeeper-3.4.8/bin
./zkServer.sh start

[ 停止zkServer ]

./zkServer.sh stop

[ 重启zkServer ]

./zkServer.sh restart

[ 查看zkServer状态 ]

./zkServer.sh status

【zkCli.sh相关】

zkCli.sh 使用的基本格式

//-timeout:表示客户端向zk服务器发送心跳的时间间隔,单位为毫秒
//-r:表示客户端以只读模式连接 
//-server:指定指定zk服务器的IP与端口,zk默认的客户端端口为2181
zkCli.sh -timeout -r -server ip:port

[ zkCli连接本地默认的zkServer ]

./zkCli.sh 

[ zkCli连接远程的zkServer ]

./zkCli.sh -timeout  -server .xxx.x.xxx:

【创建Znode——create命令】

create [-s] [-e] path data acl

使用create命令,可以创建一个znode节点,其中-s或-e分别指定节点的特性,顺序或临时节点,若不指定,则表示持久节点,acl用来进行权限控制。

[示例1:create创建永久节点]

[ 示例2:create创建顺序节点 ]

create -s higginA  

[ 示例3:create创建临时节点 ]

create -e /higginB 

使用quit指令退出客户端

再次启动zk客户端连接,查看发现对应的higginB节点已经被删除

[ 注意 ]

直接创建路径,不创建节点,无法成功创建路径,如下所示:

【 读取节点 】

与读取相关的命令有ls 和 get命令,

ls:可以列出zk指定节点下的所有子节点,但只能查看指定节点下的第一级的所有子节点。

get:可以获取zk指定节点的数据内容和属性信息。

[ ls示例:获取根节点下的所有子节点 ]

[ get示例:获取根节点的内容和属性 ]

[ 注意:也可以用ls2查看 ]

ls2有点类似get+ls组合后的效果

【 更新节点 】

使用set命令,可以更新指定节点的数据内容

set path data [version]

data:要更新的新内容

version:表示数据版本

[ 更新higgin的数据为xixix ]

【删除节点】

使用delete命令可以删除zk上指定的节点

delete path [version]

[ 示例:删除higgin节点 ]

[ delete注意 ]

若删除的节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

【Zookeeper的作用】

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

2.统一配置文件管理,即只需要一台服务器,就可以把相同配置文件的内容同步更新到其他所有服务器(例如修改redis的统一配置)

3.发布与订阅,类似消息队列的MQ,dubbo服务提供者会把数据存在znode上,dubbo服务消费者会订阅读取这个数据。

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

5.数据强一致性,在集群中保证数据的强一致性,如图:

03_Zookeeper基本数据模型及基本命令操作的更多相关文章

  1. linux云计算集群架构学习笔记:rhel7基本命令操作

     1-3-RHEL7基本命令操作 1.1Linux终端介绍 Shell提示符 Bash Shell基本语法. 1.2基本命令的使用:ls.pwd.cd. 1.3查看系统和BIOS硬件时间. 1.4 L ...

  2. Linux高级运维 第三章 Linux基本命令操作

    3.1  Linux终端介绍.Shell提示符.Bash基本语法 3.1.1  登录LINUX终端 两种终端仿真器:1.GNOME桌面的GHOME Terminal : 2.KDE桌面的Konsole ...

  3. Linux基本命令操作

    3.1  Linux终端介绍.Shell提示符.Bash基本语法 3.1.1  登录LINUX终端 两种终端仿真器:1.GNOME桌面的GHOME Terminal : 2.KDE桌面的Konsole ...

  4. 第三章 Linux基本命令操作

    第三章  Linux基本命令操作 ¨  本节所讲内容: ¨  3.1  Linux终端介绍 Shell提示符 Bash Shell基本语法 ¨  3.2  基本命令的使用:ls.pwd.cd.hist ...

  5. MySQL基本命令操作及数据库基本概念

    MySQL基本命令操作及数据库基本概念 1.数据库的基本概念 2.主流数据库介绍 3.关系型非关系型数据库介绍 4.Mysql 安装方法 5.Mysql 基本操作命令 1.数据库的基本概念: 数据库的 ...

  6. Redis(三)Redis基本命令操作与API

    一Redis 连接 Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1: ...

  7. 追溯了解Ubuntu之------基本命令操作(叁)

    在使用Ubuntu中的一些基本命令与Linux中是有区别的: 1.       查看Ubuntu系统位数:uname  -ar 或 getconf LONG_BIT 2.          获取Ubu ...

  8. H3CNE实验:Comware基本命令操作

    第1步:Comware命令视图及切换操作 <H3C>system-view System View: return to User View with Ctrl+Z. [H3C]quit ...

  9. 【Linux】基本命令操作

    一.用户操作 1.新增用户 useradd -u 1101 -g zte -d /home/xhs -m xhs --其中,1101,为用户ID,尽量使用500以上的 zte,为用户组 /home/x ...

随机推荐

  1. docker 容器 centos + tomcat + jdk

    环境: 阿里云ecs服务器 步骤: 1.安装docker 2.获取centos镜像 3.下载tomcat 和 jdk 安装包 4.配置 1.安装docker https://www.cnblogs.c ...

  2. Ubuntu18.04安装thunderbird并设置中文

    Ubuntu18.04安装thunderbird并设置中文 安装thunderbird sudo apt-get install thunderbird 安装中文包 sudo apt-get inst ...

  3. android 报错: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper;

    在使用SmartRefreshLayout时,报 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/a ...

  4. sql server 保留小数,向上保留指定位数的小数,仅记录,勿看。

    比如 4.05 要取成 4.1 , 4.16 取成 4.2 ,4.5 取成 4.5 ,意思就是小数部分第二位不管是多少都丢掉然后加0.1,但是如果是 4.5 这样完整的就不需要处理. 可以像下面这么写 ...

  5. vue2.0修饰符sync用法

    如果子组件是一个弹窗,我们想通过点击关闭按钮来关闭子组件弹窗,子组件弹窗的v-show由变量isVisible控制,这个变量通过props由父组件来注入, 而子组件无法改变props里面的变量的值,但 ...

  6. 如何使一个div能够铺满整个页面? && 模态框的制作 && outerHTML

    说明: 使用 ele.outerHTML = '' 这样的方法可以很容易的清除一个元素. 当然也可以使用parent.removeChild() ,但是相较而言,还是使用 outerHTML = '' ...

  7. JAVA学习7:在Maven仓库中添加Oracle JDBC驱动

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle ...

  8. JAVA学习1:Maven3环境搭建

    好长时间不用Java,今天看了下,Maven集成成主流了,在技术水平与日俱进的同时,感叹下IT行业必须有活到老学到老的精神. 先说下环境: Maven:Maven 3.0.5 解压后路径:F:\Mav ...

  9. springmvc整合mybatis详细教程

    需求:整合springmvc和mybatis 整合的目标是:控制层采用springmvc,持久层使用mybatis 整合思想 dao层: 1.SqlMapConfig.xml.空文件即可.但是需要头文 ...

  10. 【javascript】jq之display:none与visible:hidden

    今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给目标元素附加一个"display: none"属性,那么如果在类似于下面的布局中 ...