zookeeper服务部署与基础使用(二)!老男孩Linux培训班
老男孩IT教育
常见问题
2022年8月30日 17:26
本篇文章承接上一篇文章:【SRE工程师培训】zookeeper服务部署与基础使用,阅读本篇文章之前建议大家先阅读上一篇文章。
本篇文章承接上一篇文章:【SRE工程师培训】zookeeper服务部署与基础使用,阅读本篇文章之前建议大家先阅读上一篇文章。
zookeeper数据模型
| zookeeper的数据结构
zookeeper的数据模型的结构与Unix文件系统很类似,整体上可以看作一棵树,每个节点称做一个ZNode,每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识
zookeeper的数据节点可以视为树状结构(或者目录),树中的各节点被称为znode(即zookeeper node),一个znode可以有多个子节点
zookeeper节点在结构上表现为树状,使用路径path来定位某个znode
比如"/etc/sysconfig/network-scripts",此处"/","etc","sysconfig","network-scripts"分别是根节点,一级节点,二级节点,和三级节点,其中"etc"是"sysconfig"的父节点,"sysconfig"是"etc"的子节点
znode兼具文件和目录两种特点,既像文件一样维护着数据,元信息,ACL,时间戳等数据结构,又像目录一样可以作为路径标识的一部分
| znode的组成部分
一个znode大体上分为3个部分,如下所示:
节点的数据:即znode data(节点path,节点data)的关系就像是python中dict的key,value的关系。
子节点:即某个节点的子节点(children)
节点的状态:用来描述当前节点的创建,修改记录,包括cZxid,ctime等
| znode状态stat属性
在zookeeper shell中使用stat命令查看指定路径节点的状态信息,如下所示
zookeeper单机部署
| 测试环境介绍
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# uname -r
3.10.0-1160.el7.x86_64
uname -m
x86_64
# free -h
total used free shared buff/cache available
Mem: 3.7G 195M 3.4G 11M 78M 3.3G
Swap: 1.0G 0B 1.0G
| 安装JDK并配置环境变量
温馨提示:
JDK官方的下载地址: "https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html"
mkdir -pv /oldboyedu/softwares/
# 手动上传jdk软件包
tar xf jdk-8u301-linux-x64.tar.gz -C /oldboyedu/softwares/
ln -sv /oldboyedu/softwares/jdk1.8.0_301/ /oldboyedu/softwares/jdk
# 配置jdk环境变量
cat >/etc/profile.d/jdk.sh<<EOF
#!/bin/bash
JAVA_HOME=/oldboyedu/softwares/jdk
PATH=\$PATH:\$JAVA_HOME/bin
EOF
# 使环境变量生效
chmod +x /etc/profile.d/jdk.sh
source /etc/profile.d/jdk.sh
| 安装zookeeper并配置环境变量
# 下载zookeeper
wget --no-check-certificate https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
# zookeeper软件部署
tar xf apache-zookeeper-3.7.1-bin.tar.gz -C /oldboyedu/softwares/
ln -sv /oldboyedu/softwares/apache-zookeeper-3.7.1-bin/ /oldboyedu/softwares/zookeeper
# 配置zookeeper环境变量
cat >/etc/profile.d/zookeeper.sh<<EOF
#!/bin/bash
ZK_HOME=/oldboyedu/softwares/zookeeper
PATH=\$PATH:\$ZK_HOME/bin
EOF
# 使环境变量生效
chmod +x /etc/profile.d/zookeeper.sh
source /etc/profile.d/zookeeper.sh
| 创建zookeeper用户并指定家目录
mkdir -pv /oldboyedu/data
useradd -d /oldboyedu/data/zookeeper zookeeper
| 配置zookeeper服务
# cd /oldboyedu/softwares/zookeeper/conf/
# grep "dataDir=" zoo.cfg
dataDir=/tmp/zookeeper
# sed -ri 's#(dataDir=)/tmp/zookeeper#\1/oldboyedu/data/zookeeper#' zoo.cfg
# grep "dataDir=" zoo.cfg
dataDir=/oldboyedu/data/zookeeper
zookeeper服务管理
| 启动zookeeper
chown -R zookeeper. /oldboyedu/softwares/apache-zookeeper-3.7.1-bin/
# 切换到zookeeper用户
su - zookeeper
# 启动zookeeper服务
zkServer.sh start
# 查看zookeeper服务状态,启动zookeeper是需要耗时的,因为它会现启动JVM
zkServer.sh status
# 启动一段时间后,再次查看发现,其模式为:"standalone"
zkServer.sh status
| 使用"zkCli.sh"工具连接zookeeper服务
# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] quit
| 停止zookeeper
zkServer.sh stop
znode的基础操作
| 创建znode
zookeeper使用create命令创建znode
create命令常用的选项:
create -e /oldboy01
create -s /oldboy02
温馨提示:直接在命令行输入"create"指令就可以看到其对应的帮助信息哟~
| 查看znode
使用ls命令查看某个znode下的子znode信息,常用选项如下:
使用get命令可以查看znode中存储的数据:
温馨提示:
- 直接在命令行输入"ls","get"指令就可以看到其对应的帮助信息哟~
- 比较老的版本还在用"ls2"命令查看,zookeeper 3.7版本中已将其移除
| 修改znode数据
zookeeper使用set命令修改znode数据,常用命令选项如下所示:
| 删除znode
zookeeper使用delete命令删除znode,要求该znode没有子znode节点哟
zookeeper使用deleteall命令删除包含子znode节点,生产环境中慎用哟,有点类似于linux的"rm -rf"指令
监听器案例
| 使用"get -w path"注册监听器,监听znode的数据变化
create /oldboy01
get /oldboy01
set /oldboy01 "oldboy2022"
# 注意哈,此时我用"-w"监听了当前的znode
get -w /oldboy01
# 当我们修改znode的数据后,在当前终端会触发相应的通知机制
set /oldboy01 "SPARK"
# 当我们在此修改时,发现并没有新的通知机制,说明"-w"选项只能触发一次哟 ~
set /oldboy01 "FLINK"
| 使用"stat -w path"注册监听器,监听znode的数据变化
create /oldboy02
stat -w /oldboy02
set /oldboy02 "Storm"
set /oldboy02 "HBase"
| 使用"ls -w path"注册监听器,监听znode的子节点数量的变化
create /oldboy03
create /oldboy03/test01
# 注意,此处我启用了监听器
ls -w /oldboy03
# 修改当前znode数据发现并没有触发监听器的通知机制
set /oldboy03 "HADOOP"
# 修改子znode的数据发现依旧是没有触发监听器机制
set /oldboy03/hdfs "NN DN JN"
# 但当我们在监听的znode节点下创建(你也可以尝试一下删除)新节点时,就会触发监听器的通知机制
create /oldboy03/hive "Hive"
| 删除监听器
# 注意哈,此处使用了get指令添加了一个监视器
get -w /oldboy01
# 此处我又使用"removewatches"指令删除了监听器
removewatches /oldboy01
# 当我们修改znode发现并没有触发监听器,这正是由于上面我们删除监听器导致的
set /oldboy01 "OLDBOY"
为了让学员学以致用,老男孩教育不断更新Linux培训教学大纲,与一众讲师精心打造Linux云计算SRE课程体系。老男孩教育Linux云计算SRE运维课程,从零基础开始授课,适合零基础且对Linux感兴趣的学员学习。课程的主要目的就是培养出专业的Linux系统工程师,名师授课全程面授教学,边讲边练帮助学员高效掌握Linux技术。
