zookeeper 集群搭建及Shell操作

本文详细介绍了Zookeeper集群的搭建步骤,包括服务器准备、配置修改、启动流程,以及客户端的基本操作和常用Shell命令。同时,深入探讨了Zookeeper的watch机制和领导者选举机制,提供了实际操作示例,帮助读者全面理解Zookeeper集群的管理和使用。
摘要由CSDN通过智能技术生成

一、搭建准备

① 下载 zookeeeper 的压缩包,我们在此处使用版本为 3.4.6

zookeeper官网

② 准备三台服务器

服务器需要配置域名映射

node1 / 172.17.0.8node2 / 172.17.30.12node3 / 172.17.30.26

将安装包上传到 3 台服务器,并解压安装包到指定的目录

# 进入到自定义的目录
cd /opt/software

# 解压安装包
tar -zxvf zookeeper-3.4.6.tar.gz

二、修改配置

① 3 台服务器的 zookeeeper 的这些操作是相同的,只有修改 zoo.cfg 中的配置信息是不同的

# 1. 进入zookeeeper配置文件目录
cd /opt/software/zookeeper-3.4.6/conf/

# 2. 复制并创建新的配置文件
cp zoo_sample.cfg zoo.cfg

# 3.创建数据存放目录
mkdir -p /opt/software/zookeeper-3.4.6/zkdatas/

② 修改 3 台服务器的 zookeeeper 配置信息

# 3 台服务器相同的操作
cd /opt/software/zookeeper-3.4.6/conf/
vim zoo.cfg
# 修改和增加以下内容
# Zookeeper的数据存放目录,修改数据目录
dataDir=/opt/software/zookeeper-3.4.6/zkdatas/
# 保留多少个快照,本来就有这个配置, 只不过注释了, 取消注释即可
autopurge.snapRetainCount=3
# 日志多少小时清理一次,本来就有这个配置, 只不过注释了, 取消注释即可
autopurge.purgeInterval=1
# 集群中服务器地址,集群间通讯的端口号,文件末尾直接增加
server.1=node1:2888:3888	
server.2=node2:2888:3888
server.3=node3:2888:3888

③ 配置 myid 文件

说明:该 myid 文件中的值用于和 zoo.cfg 配置文件中的配置项 server.x=nodex:2888:3888 进行对应,用于标识当前节点的 zookeeper,在 zookeeper 集群启动的时候,完成 leader 的选举

# 1. 在第 1 台服务器上操作
echo 1 > /opt/software/zookeeper-3.4.6/zkdatas/myid     
# 2. 在第 2 台服务器上操作
echo 2 > /opt/software/zookeeper-3.4.6/zkdatas/myid 
# 3. 在第 3 台服务器上操作
echo 3 > /opt/software/zookeeper-3.4.6/zkdatas/myid 

三、 启动步骤

① 从第 1 台服务器开始,依次执行如下命令

# 启动
cd /opt/software/zookeeper-3.4.6
bin/zkServer.sh start

② 启动状态和日志查看

# 查看启动状态
cd /opt/software/zookeeper-3.4.6
bin/zkServer.sh status

# 查看启动日志
cd /opt/software/zookeeper-3.4.6/
cat zookeeper.out

# 查看进程
 jps

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、客户端的基本操作

① 启动客户端

# 进入 zookeeper 的 bin 目录下
cd /opt/software/zookeeper-3.4.6

# 启动客户端
# 命令格式: zkCli.sh -server ip
sh bin/zkCli.sh -server node1

② 查看命令的帮助信息

# 查看命令参数
[zk: localhost:2181(CONNECTED) 0] help		# 直接输入 help就行
	ZooKeeper -server host:port cmd args
	      set path data [version]		# 设置数据
	      ls path [watch]				# 查看列表(目录结构)
	      delquota [-n|-b] path
	      ls2 path [watch]			# 查看列表(目录结构) 和 详情
	      setquota -n|-b val path
	      history 
	      redo cmdno
	      delete path [version]		# 删除路径
	      listquota path
	      rmr path
	      get path [watch]			# 查看某一个节点数据以及和节点的说明信息
	      create [-s] [-e] path data acl

五 、常用的 shell 操作命令

① 退出当前会话

quit

② 创建节点

# 格式: create [-s][-e] path data acl
   #1. -s    一旦添加了此选项, 表示要创建一个序列化节点
	 #2. -e 	 一旦添加了此选项, 表示要创建一个临时节点
	 #3. acl   用来进行权限控制
	 
# 创建永久节点
create /aaa 123456
create /aaa/bbb 123456

# 创建临时节点
create -e /ccc 789			
create -e /ccc/ddd 123456 # 报错, 临时节点不能有子节点

# 创建永久序列化节点
create -s /eee 789

# 创建临时序列化节点
create -s -e /fff 12345

③ 显示节点信息

# 说明
ls  # 主要是查看目录结构的
get # 查看节点下的内容

# 查看根节点下边有什么.
ls /			

# 查看aaa下有什么
ls /aaa

# 查看根目录详情, 在ls的基础看到当前这个节点详细说明信息
ls2 /		

# 查看 /aaa目录详情, 在ls的基础看到当前这个节点详细说明信息
ls2 /aaa

# 查看它里边的内容
get /aaa

在这里插入图片描述

④ 更新节点信息

# 查看节点里边的内容
get /aaa

# 设置节点中的内容
set /aaa 789

⑤ 删除节点信息

# 查看根目录下有什么
ls /

# 删除eee0000000006这个节点
delete /eee0000000006

# 查看根目录下有什么, 是否删除成功
ls /

# 因为/aaa下边有 bbb, 所以删不掉.  如果没有字节点, 则可以直接删除
delete /aaa

# 这个可以直接把/aaa给删除
rmr /aaa

# 查看根目录下有什么, 是否删除成功
ls /

⑥ 节点权限控制

# 创建节点
create /aaa 123456

# 查看该节点的权限
listquota /aaa

# 设置aaa的子节点个数不超过3个
setquota -n 3 /aaa

# 此时能看到上述的配置, 但是我们发现目前的节点数是1, 因为 /aaa也算一个节点
listquota /aaa

# 新建子节点
create /aaa/bbb 123
create /aaa/ccc 123		

# 因为上述 设置aaa的子节点个数不超过3个, 理论上这里不能成功, 但是我们发现还是成功了,是因为quota的权限没有那么严格, 依然可以正常添加的, 只不过会在日志文件中打印一条警告信息.
create /aaa/ddd 123		

# 创建新节点, 指定内容, 用来测试 设置长度后, 能不能超出最大长度
create /ddd 123

# 设置长度
quota -b 10 /ddd

# 查看权限信息
listquota /ddd

# 设置内容
set /ddd 1234567891011

# 注意1: zookeeper中各个数据节点没有任何的限制条件的, 可以存数据, 长度没有限制(系统固定为1M), 子节点数量也没有限制
# 注意2: 如果设置权限规定某一个节点的数量或者长度, 其实当创建节点大于这个数量的时候或者长度大于设置长度, 依然可以正常添加的, 只不过会在日志文件中打印一条警告信息记录一下警告信息

⑦ 其他命令

# 列出命令历史
history
# 该命令可以重新执行指定命令编号的历史命令,命令编号可以通过
redo

六、zookeeper的watch机制

  • watch 机制执行过程

    ① 客户端向服务端注册Watcher

    ② 服务端事件发生触发Watcher

    ③ 客户端回调Watcher得到触发事件情况

  • watch机制的使用场景

    ① 从节点 想知道 主节点 什么时候宕机

    ② 主节点 想知道 从节点 什么时候就启动

  • watch机制的特点

    ① 一次性触发

    如果客户端绑定一个监听操作, 只会监听到一次对应事件, 后续在发送就无法监听到, 如果想监听, 重新绑定

    ② 事件封装

    zookeeper将可能发生的事件使用一个对象 WatchedEvent来表示

    ③ event异步发送

    后台发送信息, 不占用主线程

    ④ 先注册再触发

    如果要监听某一个事件, 必须先对这个事件做监听, 然后才会触发对应事件

  • 通知状态和事件类型

    同一个事件类型在不同的通知状态中代表的含义有所不同,下表列举了常见的通知状态和事件类型

    事件封装: Watcher 得到的事件是被封装过的, 包括三个内容 keeperState, eventType, path

    KeeperStateEventType触发条件说明
    None连接成功
    SyncConnectedNodeCreatedZnode被创建此时处于连接状态
    SyncConnectedNodeDeletedZnode被删除此时处于连接状态
    SyncConnectedNodeDataChangedZnode数据被改变此时处于连接状态
    SyncConnectedNodeChildChangedZnode的子Znode数据被改变此时处于连接状态
    DisconnectedNone客户端和服务端断开连接此时客户端和服务器处于断开连接状态
    ExpiredNone会话超时会收到一个SessionExpiredExceptio
    AuthFailedNone权限验证失败会收到一个AuthFailedException
  • watch机制操作演示
    登陆zookeeper的客户端之后, 可以通过help命令查看zookeeper的命令, 发现后边有watch的, 表示支持watch监听机制

    ① 绑定监听:需要对那个路径进行监听, 需要监听什么内容

    # 在第 1 个 zookeeper 节点上开启新的客户端后执行以下命令
    # 创建节点
    create /dddd 123
    
    # 在第 1 个节点中开启对 /ddd 路径的监听
    get /dddd watch	
    

    ② 测试监听

    # 在新的 zookeeper 节点上开启新的客户端后执行以下命令
    
    # 对 /dddd 路径内容进行修改
    set /dddd 123456789	
    

    ③ 查看监听内容

    # 在第 1 个 zookeeper 节点上显示出以下信息
    [zk: localhost:2181(CONNECTED) 5] 
    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeDataChanged path:/dddd
    

    在这里插入图片描述

七、zookeeper集群leader的选举机制

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值