Zookeeper下载、本地模式安装、集群操作

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1、Zookeeper下载地址

2 、本地模式安装

2.1安装前准备

2.2配置修改

2.3操作 Zookeeper

2.4配置参数解读

3、集群操作

3.1 集群安装

3.2 ZK 集群启动停止脚本

4、客户端命令行操作

4.1、命令行语法 

4.2、znode 节点数据信息

4.3点类型持久/短暂/有序号/无序号

 ​编辑

4.4监听器原理 

4.5节点删除与查看


1、Zookeeper下载地址

1官网首页 https://zookeeper.apache.org/

 

2 、本地模式安装

2.1安装前准备

1安装 JDK

2拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下

3解压到指定目录

[atguigu@hadoop102 software]$ tar -zxvf apache-zookeeper-3.5.7bin.tar.gz -C /opt/module/

4修改名称

[atguigu@hadoop102 module]$ mv apache-zookeeper-3.5.7 -bin/ zookeeper-3.5.7

2.2配置修改

1 将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg

[atguigu@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg

2打开 zoo.cfg 文件修改 dataDir 路径

[atguigu@hadoop102 zookeeper-3.5.7]$ vim zoo.cfg

修改如下内容

dataDir=/opt/module/zookeeper-3.5.7/zkData

3在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹

[atguigu@hadoop102 zookeeper-3.5.7]$ mkdir zkData

2.3操作 Zookeeper

启动 Zookeeper

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start

2查看进程是否启动

[atguigu@hadoop102 zookeeper-3.5.7]$ jps

4020 Jps

4001 QuorumPeerMain

3查看状态

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg

Mode: standalone

4启动客户端

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh

5退出客户端

[zk: localhost:2181(CONNECTED) 0] quit

6停止 Zookeeper

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh stop

2.4配置参数解读

Zookeeper中的配置文件zoo.cfg中参数含义解读如下

1tickTime = 2000通信心跳时间Zookeeper服务器与客户端心跳时间单位毫秒

 2initIimit=10:LF初始通信时限

 

LeaderFollower初始连接时能容忍的最多心跳数tickTime的数量

3syncLimit = 5LF同步通信时限

 

LeaderFollower之间通信时间如果超过syncLimit * tickTimeLeader认为Follwer

掉从服务器列表中删除Follwer

4dataDir保存Zookeeper中的数据

注意默认的tmp目录容易被Linux系统定期删除所以一般不用默认的tmp目录。

5clientPort = 2181客户端连接端口通常不做修改。

3、集群操作

3.1 集群安装

1集群规划

在 hadoop102、hadoop103 和 hadoop104 三个节点上都部署 Zookeeper。

思考如果是10 台服务器需要部署多少台Zookeeper 

2解压安装

        ① 在 hadoop102 解压 Zookeeper 安装包到/opt/module/目录下

[atguigu@hadoop102 software]$ tar -zxvf apache-zookeeper-3.5.7bin.tar.gz -C /opt/module/

修改 apache-zookeeper-3.5.7-bin 名称为 zookeeper-3.5.7

[atguigu@hadoop102 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

3配置服务器编号 

在/opt/module/zookeeper-3.5.7/这个目录下创建 zkData

[atguigu@hadoop102 zookeeper-3.5.7]$ mkdir zkData

在/opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件

[atguigu@hadoop102 zkData]$ vi myid

在文件中添加与 server 对应的编号注意上下不要有空行左右不要有空格

2

注意添加 myid 文件一定要在 Linux 里面创建在 notepad++里面很可能乱码

拷贝配置好的 zookeeper 到其他机器上

[atguigu@hadoop102 module ]$ xsync  zookeeper-3.5.7

并分别在 hadoop103、hadoop104 上修改 myid 文件中内容为 3、4

4配置zoo.cfg文件

重命名/opt/module/zookeeper-3.5.7/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg

[atguigu@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg

打开 zoo.cfg 文件

[atguigu@hadoop102 conf]$ vim zoo.cfg

#修改数据存储路径配置

dataDir=/opt/module/zookeeper-3.5.7/zkData

#增加如下配置

#######################cluster########################## server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888

配置参数解读

server.A=B:C:D。

        A:是一个数字表示这个是第几号服务器集群模式下配置一个文件 myid这个文件在 dataDir 目录下这个文件里面有一个数据就是 A 的值Zookeeper 启动时读取此文件拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server

        B:是这个服务器的地址

        C:是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口

        D:是万一集群中的 Leader 服务器挂了需要一个端口来重新进行选举选出一个新的

Leader而这个端口就是用来执行选举时服务器相互通信的端口。

​​​​​​​④同步 zoo.cfg 配置文件

[atguigu@hadoop102 conf]$ xsync zoo.cfg

5集群操作

分别启动 Zookeeper

[atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start

[atguigu@hadoop103 zookeeper-3.5.7]$ bin/zkServer.sh start

[atguigu@hadoop104 zookeeper-3.5.7]$ bin/zkServer.sh start

​​​​​​​②查看状态

[atguigu@hadoop102 zookeeper-3.5.7]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg

Mode: follower

[atguigu@hadoop103 zookeeper-3.5.7]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg

Mode: leader

[atguigu@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower

3.2 ZK 集群启动停止脚本

1、在 hadoop102 的/home/atguigu/bin 目录下创建脚本

[atguigu@hadoop102 bin]$ vim zk.sh

 在脚本中编写如下内容

#!/bin/bash

 case $1 in "start"){

 for i in hadoop102 hadoop103 hadoop104

 do

        echo ---------- zookeeper $i 启动 ------------   ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"

 done

};; "stop"){

 for i in hadoop102 hadoop103 hadoop104

 do

        echo ---------- zookeeper $i 停止 ------------       ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"

 done

};; "status"){

 for i in hadoop102 hadoop103 hadoop104

 do

        echo ---------- zookeeper $i 状态 ------------       ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"  done

};; esac
  1. 增加脚本执行权限

[atguigu@hadoop102 bin]$ chmod u+x zk.sh

2)  Zookeeper 集群启动脚本

[atguigu@hadoop102 module]$ zk.sh start

3Zookeeper 集群停止脚本

[atguigu@hadoop102 module]$ zk.sh stop

4、客户端命令行操作

4.1、命令行语法 

命令基本语法

功能描述

help

显示所有操作命令

ls path 

使用 ls 命令来查看当前 znode 的子节点 [可监听]

-w  监听子节点变化

-s   附加次级信息

create

普通创建

-s  含有序列

-e  临时重启或者超时消失

get path 

获得节点的值 [可监听]

-w  监听节点内容变化

-s   附加次级信息

set

设置节点的具体值

stat

查看节点状态

delete

删除节点

deleteall

递归删除节点

1启动客户端

[atguigu@hadoop102 hadoop102:2181

zookeeper-3.5.7]$ bin/zkCli.sh

-server

2显示所有操作命令

[zk: hadoop102:2181(CONNECTED) 1] help

4.2、znode 节点数据信息

1查看当前znode中所包含的内容

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

[zookeeper]

2查看当前节点详细数据

[zk: hadoop102:2181(CONNECTED) 5] ls -s /

[zookeeper]cZxid = 0x0

ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0

mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1

1czxid创建节点的事务 zxid 每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的 zxid如果 zxid1 小于 zxid2那么 zxid1 在 zxid2 之前发生。

2ctimeznode 被创建的毫秒数从 1970 年开始

3mzxidznode 最后更新的事务 zxid

4mtimeznode 最后修改的毫秒数从 1970 年开始

5pZxidznode 最后更新的子节点 zxid

6cversionznode 子节点变化号znode 子节点修改次数

dataversionznode 数据变化号 

8aclVersionznode 访问控制列表的变化号

9ephemeralOwner如果是临时节点这个是 znode 拥有者的 session id。如果不是临时节点则是 0。

10 dataLengthznode 的数据长度

11 numChildrenznode 子节点数量

4.3点类型持久/短暂/有序号/无序号

 

1分别创建2个普通节点永久节点 + 不带序号

[zk: localhost:2181(CONNECTED) 3] create /sanguo "diaochan"

Created /sanguo

[zk: localhost:2181(CONNECTED) 4] create /sanguo/shuguo

"liubei"

Created /sanguo/shuguo

 注意创建节点时要赋值

2获得节点的值

[zk: localhost:2181(CONNECTED) 5] get -s /sanguo diaochan

cZxid = 0x100000003

ctime = Wed Aug 29 00:03:23 CST 2018 mZxid = 0x100000003

mtime = Wed Aug 29 00:03:23 CST 2018 pZxid = 0x100000004 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0

dataLength = 7 numChildren = 1

 

[zk: localhost:2181(CONNECTED) 6] get -s /sanguo/shuguo liubei

cZxid = 0x100000004

ctime = Wed Aug 29 00:04:35 CST 2018 mZxid = 0x100000004

mtime = Wed Aug 29 00:04:35 CST 2018 pZxid = 0x100000004 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0

3创建带序号的节点永久节点 + 带序号 

1先创建一个普通的根节点/sanguo/weiguo

[zk: localhost:2181(CONNECTED) 1] create /sanguo/weiguo

"caocao"

Created /sanguo/weiguo

​​​​​​​2创建带序号的节点

[zk:      localhost:2181(CONNECTED)      2]

create

-s

/sanguo/weiguo/zhangliao "zhangliao"

Created /sanguo/weiguo/zhangliao0000000000 

[zk:      localhost:2181(CONNECTED)      3]

create

-s

/sanguo/weiguo/zhangliao "zhangliao"

Created /sanguo/weiguo/zhangliao0000000001 

[zk:      localhost:2181(CONNECTED)      4]

/sanguo/weiguo/xuchu "xuchu"

Created /sanguo/weiguo/xuchu0000000002

create

-s

如果原来没有序号节点序号从 0 开始依次递增。如果原节点下已有 2 个节点则再排序时从 2 开始以此类推。

4创建短暂节点短暂节点 + 不带序号 or 带序号 

1创建短暂的不带序号的节点

[zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo

"zhouyu"

Created /sanguo/wuguo

​​​​​​​2创建短暂的带序号的节点

[zk: localhost:2181(CONNECTED) 2] create -e -s /sanguo/wuguo

"zhouyu"

Created /sanguo/wuguo0000000001

​​​​​​​3在当前客户端是能查看到的

[zk: localhost:2181(CONNECTED) 3] ls /sanguo  [wuguo, wuguo0000000001, shuguo]

​​​​​​​4退出当前客户端然后再重启客户端

[zk: localhost:2181(CONNECTED) 12] quit

[atguigu@hadoop104 zookeeper-3.5.7]$ bin/zkCli.sh

​​​​​​​5再次查看根目录下短暂节点已经删除

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

[shuguo]

5修改节点数据值

[zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "simayi"

4.4监听器原理 

节点的值变化监听

1在 hadoop104 主机上注册监听/sanguo 节点数据变化

[zk: localhost:2181(CONNECTED) 26] get -w /sanguo 

2在 hadoop103 主机上修改/sanguo 节点的数据

[zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"

3观察 hadoop104 主机收到数据变化的监听

WATCHER:: WatchedEvent path:/sanguo

state:SyncConnected

type:NodeDataChanged

 注意在hadoop103再多次修改/sanguo的值hadoop104上不会再收到监听。因为注册

一次只能监听一次。想再次监听需要再次注册。

节点的子节点变化监听路径变化

4在 hadoop104 主机上注册监听/sanguo 节点的子节点变化

[zk: localhost:2181(CONNECTED) 1] ls -w /sanguo 

[shuguo, weiguo]

5在 hadoop103 主机/sanguo 节点上创建子节点

[zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi" Created /sanguo/jin

6观察 hadoop104 主机收到子节点变化的监听

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

注意节点的路径变化也是注册一次生效一次。想多次生效就需要多次注册。

4.5节点删除与查看

1、删除节点

[zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin

2递归删除节点

[zk: localhost:2181(CONNECTED) 15] deleteall /sanguo/shuguo

3、查看节点状态

[zk: localhost:2181(CONNECTED) 17] stat /sanguo cZxid = 0x100000003

ctime = Wed Aug 29 00:03:23 CST 2018 mZxid = 0x100000011

mtime = Wed Aug 29 00:21:23 CST 2018 pZxid = 0x100000014 cversion = 9 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 1

​​​​​​​

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6