zookeeper-day01

Zookeeper

1、Zookeeper概念

  • Zookeeper是Apache Hadoop项目下的一个子项目,是一个树形目录结构(后面操作时讲解树形目录结构)。Apache是一个基金组织,它里面的项目都是免费开源的。Hadoop是大数据的一个框架。Zookeeper是Hadoop的一个子项目,它和大数据的结合比较紧密。Java中的一些框架也依赖于Zookeeper来实现,比如Dubbo就将Zookeeper作为注册中心来使用。
  • Zookeeper翻译过来就是动物园管理员。用来管理Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)。简称zk。
  • Zookeeper是一个分布式的、开源的分布式应用程序的协调服务(管理别的东西)。
  • Zookeeper提供的主要功能包括:
    • 配置管理:作为配置中心来使用。多个应用程序把共有的配置信息,放在一个配置中心里面统一管理。
    • 分布式锁:作为分布式锁提供的组件来使用。期望数据在同一时间只被一个应用程序访问,就要加锁。这时,如果另一个应用程序来访问数据,此时,A加的锁并不对B生效,此时数据就被两个服务访问到。引入第三方锁——分布式锁。访问数据时就要去分布式锁那里拿锁。Zookeeper可以作为一种分布式锁来使用。
    • 集群管理:作为注册中心来使用。provider(服务提供方)先把自己的地址告诉注册中心,consumer(服务消费方)想访问provider时,先去注册中心获取provider的地址然后进行RPC的远程调用。

2、Zookeeper安装与配置

  • 安装:Dubbo中已经讲解

  • 配置:

    • 打开虚拟机
    [root@localhost ~]# cd /opt
    [root@localhost opt]# ll
    drwxr-xr-x. 4 root root 95 7月   4 11:40 zookeeper
    [root@localhost opt]# cd zookeeper/
    [root@localhost zookeeper]# ll
    drwxr-xr-x. 7 root    root        146 7月   4 11:49 apache-zookeeper-3.5.6-bin (zookeeper的安装目录)
    drwxr-xr-x. 3 root    root         23 7月   5 13:56 zkdata	(zookeeper的数据目录)
    [root@localhost zookeeper]# cd apache-zookeeper-3.5.6-bin/
    [root@localhost apache-zookeeper-3.5.6-bin]# ll
    [root@localhost apache-zookeeper-3.5.6-bin]# cd bin/
    [root@localhost bin]# ll
    -rwxr-xr-x. 1 gubowen gubowen 1621 10月  9 2019 zkCli.sh(zookeeper的客户端)
    -rwxr-xr-x. 1 gubowen gubowen 9386 10月  9 2019 zkServer.sh(zookeeper的服务端)
    (如果我们要操作zookeeper,就是我们要对zookeeper里面的数据进行改造,有两种方式:一是客户端和服务端连接一下;二是可以写代码。配置管理和集群管理一般不需要我们写代码来操作,一些框架都已经整合它了。以后写分布式锁可能需要编码来实现,就需要掌握客户端命令的操作和Java代码API的操作)
    [root@localhost bin]# ./zkServer.sh start (启动zookeeper)
    Starting zookeeper ... STARTED
    [root@localhost bin]# ./zkServer.sh status
    Mode: standalone (此时zookeeper是单节点的,没有搭建集群的方式)
    (启动完毕)
    

3、Zookeeper操作

  • 命令操作,通过命令行的方式发送命令来操作zk的服务端
  • 代码操作:JavaAPI写代码来操作zk的服务端
  • Zookeeper Client 和 Zookeeper Java API 都被称为客户端,都可以连接上Zookeeper Server 来完成对应的操作

3.1、Zookeeper命令操作

3.1.1、Zookeeper的数据模型
  • 先了解zk的结构,再学习命令
  • Zookeeper是一个树形目录服务,其数据模型和Unix(Linux)的文件系统目录树很类似,(Unix是目录,zk是节点),拥有一个层次化结构。节点非常重要,操作其实就是操作节点。
    • 根节点的目录是一个(/),它的path是一个(/)
    • 下面有子节点(/app1)和(/app2)
    • 下面还有子节点(/app1/p_1)…
  • 这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据节点信息
  • 节点可以拥有子节点。同时也允许少量(1MB)数据存储在该节点之下。(可以当目录来用,也可以当文件来用)
  • 节点可分为四大类:(牢记 -e -s 这两个参数)
    • PERSISTENT 持久化节点(节点创建后,即使zk客户端断开连接,服务端关闭,该节点依然存在)
    • EPHEMERAL 临时节点:-e(zk客户端和zk服务端创建连接之后创建该节点,当客户端断开连接之后(?客户端断开连接和关闭客户端是一个意思吗。是的),该节点便被销毁。该节点只在当前的会话中有效)
    • PERSISTENT_SEQUENTIAL 持久化顺序节点:-s(创建顺序节点会在节点后面添加数字编号)
    • EPHEMERAL_SEQUENTIAL 临时顺序节点:-es (临时的顺序节点)

小节:zk就是一种树形结构,每一个点被称为节点,可以存数据,也可以有子节点。节点可以是:顺序的,非顺序的,临时的或持久的。

3.1.2、服务端常用命令
  • 启动Zookeeper服务:./zkServer.sh start
  • 查看Zookeeper服务状态:./zkServer.sh status
  • 停止Zookeeper服务:./zkServer.sh stop
  • 重启Zookeeper服务:./zkServer.sh restart
3.1.2、客户端常用命令(重要)
1、CRUD
  • Client要知道Server在哪,连接之后操作节点,节点的操作和数据的操作一样:CRUD。
(右键克隆一个会话,切换到root家目录)
[gubowen@localhost ~]$ su root
[root@localhost gubowen]# cd /
[root@localhost /]# cd ~
(服务端pwd一下,得到bin的路径)
[root@localhost bin]# pwd
/opt/zookeeper/apache-zookeeper-3.5.6-bin/bin
(回到客户端命令窗口)
[root@localhost ~]# cd /opt/zookeeper/apache-zookeeper-3.5.6-bin/bin
[root@localhost bin]# ll
(指定zk的server在哪,以及主机IP和zkServer端口号)
[root@localhost bin]# ./zkCli.sh -server localhost:2181
[zk: localhost:2181(CONNECTED) 0] (连接成功)
[zk: localhost:2181(CONNECTED) 0] quit (退出连接)
[root@localhost bin]# ./zkCli.sh (连接本机Sever)

(ls 查看当前节点下的子节点)
[zk: localhost:2181(CONNECTED) 0] ls / (查看根节点)
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /dubbo (查看dubbo节点)
[com.itheima.service.UserService]

(创建节点 create /节点 数据)
[zk: localhost:2181(CONNECTED) 2] ls / (返回根节点)
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 3] create /app1 itheima
Created /app1
[zk: localhost:2181(CONNECTED) 4] ls /
[app1, dubbo, zookeeper]

(获取节点中数据的命令 get /节点)
[zk: localhost:2181(CONNECTED) 7] get /app1
itheima
[zk: localhost:2181(CONNECTED) 8] get /app2
null
(设置节点中数据 set /节点)
[zk: localhost:2181(CONNECTED) 9] set /app2 itcast
[zk: localhost:2181(CONNECTED) 10] get /app2
itcast

(删除节点)
[zk: localhost:2181(CONNECTED) 11] delete /app2
[zk: localhost:2181(CONNECTED) 12] ls /
[app1, dubbo, zookeeper]

(节点不可重复)
[zk: localhost:2181(CONNECTED) 13] create /app2
Created /app2
[zk: localhost:2181(CONNECTED) 14] create /app2
Node already exists: /app2

(创建子节点)
[zk: localhost:2181(CONNECTED) 15] create /app2/p1
Created /app2/p1
[zk: localhost:2181(CONNECTED) 16] create /app2/p2
Created /app2/p2
[zk: localhost:2181(CONNECTED) 17] ls /app2
[p1, p2]

(删除单节点)
[zk: localhost:2181(CONNECTED) 18] delete /app2/p1
[zk: localhost:2181(CONNECTED) 19] ls /app2
[p2]
(有子节点存在不可删除父节点)
[zk: localhost:2181(CONNECTED) 20] delete /app2
Node not empty: /app2
(删除全部可删除含有子节点的父节点)
[zk: localhost:2181(CONNECTED) 21] deleteall /app2
[zk: localhost:2181(CONNECTED) 22] ls /
[app1, dubbo, zookeeper]

(help 帮助命令)
2、-e -s
  • 前面创建的节点都是持久化节点
  • -e 临时节点
(create -e /节点 ——创建临时节点)
[zk: localhost:2181(CONNECTED) 25] create -e /app2
Created /app2
[zk: localhost:2181(CONNECTED) 26] ls /
[app1, app2, dubbo, zookeeper]

(关闭会话之后再连接server查看/)
[zk: localhost:2181(CONNECTED) 27] quit
[root@localhost bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[app1, dubbo, zookeeper]
  • -s 顺序节点
    • 所有节点共用同一套编号(看最后代码)
[zk: localhost:2181(CONNECTED) 1] create -s /app2
Created /app20000000005
[zk: localhost:2181(CONNECTED) 2] create -s /app2
Created /app20000000006
[zk: localhost:2181(CONNECTED) 3] create /app1
Node already exists: /app1
[zk: localhost:2181(CONNECTED) 4] ls /
[app1, app20000000005, app20000000006, dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 5] create -s /app1
Created /app10000000007
[zk: localhost:2181(CONNECTED) 6] ls /
[app1, app10000000007, app20000000005, app20000000006, dubbo, zookeeper]
  • -es 临时顺序节点
[zk: localhost:2181(CONNECTED) 7] create -es /app3
Created /app30000000008
[zk: localhost:2181(CONNECTED) 8] create -es /app3
Created /app30000000009
[zk: localhost:2181(CONNECTED) 9] ls /
[app1, app10000000007, app20000000005, app20000000006, app30000000008, app30000000009, dubbo, zookeeper]

[zk: localhost:2181(CONNECTED) 10] quit
[root@localhost bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[app1, app10000000007, app20000000005, app20000000006, dubbo, zookeeper]
3、ls2
  • xxxid后面搭建集群时会使用
[zk: localhost:2181(CONNECTED) 1] ls2 /
'ls2' has been deprecated. Please use 'ls [-s] path' instead.(li2 已被淘汰,建议使用ls -s path代替)
[zookeeper, app20000000005, app20000000006, dubbo, app10000000007, app1]
cZxid = 0x0 (事务id)
ctime = Thu Jan 01 08:00:00 CST 1970 (创建时间)
mZxid = 0x0 (最后一次的id)
mtime = Thu Jan 01 08:00:00 CST 1970 (修改时间 modify)
pZxid = 0x44
cversion = 14 (创建版本号,每次修改之后加一)
dataVersion = 0 (数据版本号)
aclVersion = 0 (权限版本号)
ephemeralOwner = 0x0 (临时状态,不是临时就是0,十六进制的数的表示方式)
dataLength = 0 (数据长度 /下没数据)
numChildren = 6 (子节点个数)

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

(查看dubbo下面的子节点的内容)
[zk: localhost:2181(CONNECTED) 5] ls /dubbo/com.itheima.service.UserService
[configurators, consumers, providers, routers]
[zk: localhost:2181(CONNECTED) 6] get /dubbo/com.itheima.service.UserService/providers
192.168.111.1
(服务方的IP地址存在了这个节点中,消费方通过providers的服务名称找到对应的地址,完成地址的远程调用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值