zookeeper 集群搭建及Shell操作

zookeeper 集群搭建及Shell操作

      • 一、搭建准备
      • 二、修改配置
      • 三、 启动步骤
      • 四、客户端的基本操作
      • 五 、常用的 shell 操作命令
      • 六、zookeeper的watch机制
      • 七、zookeeper集群leader的选举机制

一、搭建准备

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

zookeeper官网

② 准备三台服务器

服务器需要配置域名映射

node1 / 172.17.0.8 node2 / 172.17.30.12 node3 / 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 集群搭建及Shell操作_第1张图片

四、客户端的基本操作

① 启动客户端

# 进入 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

zookeeper 集群搭建及Shell操作_第2张图片

④ 更新节点信息

# 查看节点里边的内容
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

    KeeperState EventType 触发条件 说明
    None 连接成功
    SyncConnected NodeCreated Znode被创建 此时处于连接状态
    SyncConnected NodeDeleted Znode被删除 此时处于连接状态
    SyncConnected NodeDataChanged Znode数据被改变 此时处于连接状态
    SyncConnected NodeChildChanged Znode的子Znode数据被改变 此时处于连接状态
    Disconnected None 客户端和服务端断开连接 此时客户端和服务器处于断开连接状态
    Expired None 会话超时 会收到一个SessionExpiredExceptio
    AuthFailed None 权限验证失败 会收到一个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的选举机制

你可能感兴趣的:(zookeeper,大数据)