Zookeeper

发布于 2022-01-25  27 次阅读


集群分类

zookeeper集群分为:

  • 单机模式:只需要一个节点
  • 集群模式:
    • 当整个集群中,有半数以上的节点成功启动,则认为ZK集群已经正常启动
    • 当集群在启动之后,会选举一个Leader
    • ZK集群一般搭建在奇数个节点上

搭建单机模式

安装zookeeper

解压zookeeper

tar zxvf zookeeper-3.4.12.tar.gz -C /opt/softwares/

创建软链接

ln -sf /opt/softwares/zookeeper-3.4.12 /opt/links/zookeeper

配置环境变量

vi ~/.bashrc

####__ZK_CONF__####
export ZOOKEEPER_HOME=/opt/softwares/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

更新配置文件

source ~/.bashrc

配置zookeeper

将$ZOOKEEPER_HOME/conf/zoo_sample.cfg重命名为zoo.cfg,编辑zoo.cfg文件

vi $ZOOKEEPER_HOME/conf/zoo.cfg

L12:dataDir=/tmp/zookeeper  -->  dataDir=/opt/links/zookeeper/data/zookeeper/data
#该目录需要提前创建,在搭建分布式ZK集群的时候,会向该目录中写入一些数据
L13:新增一行  -->  dataLogDir=/opt/links/zookeeper/data/zookeeper/log

编辑$ZOOKEEPER_HOME/conf/log4j.properties

vi $ZOOKEEPER_HOME/conf/log4j.properties

L4和L7:  .   -->    /opt/links/zookeeper/logs

编辑$ZOOKEEPER_HOME/bin/zkCli.sh

vi $ZOOKEEPER_HOME/bin/zkCli.sh

L38:增加一行-->  ZOO_LOG_DIR=/opt/links/zookeeper/logs
或者在~/.bashrc中配置环境变量:
export ZOO_LOG_DIR=/opt/links/zookeeper/logs

编辑$ZOOKEEPER_HOME/bin/zkServer.sh

vi $ZOOKEEPER_HOME/bin/zkServer.sh

L124:增加一行  -->  ZOO_LOG_DIR=/opt/links/zookeeper/logs

命令行操作

#启动zookeeper服务器端
zkServer.sh start
#查看zookeeper状态
zkServer.sh status
jps —— QuorumPeerMain
#使用zookeeper客户端连接服务器端
zkCli.sh -server 部署ZKS的IP[:2181]

搭建集群模式

安装与配置

安装、配置步骤与单机模式一致,不过每个节点都需要安装zookeeper

主节点编辑zoo.cfg时还需配置

#文件最后加入下面的行:
server.数字1=us8:2888:3888
server.数字2=us9:2888:3888
server.数字3=us10:2888:3888
#端口说明:2888是各个ZK节点之间的通信端口;3888是选举Leader的端口。
#数字说明:该数字是本机的ZK的标识该数字 需要写入各自主机的/opt/links/zookeeper/data/myid文件中
#即 数字1需要写入到“us8”这个主机的/opt/links/zookeeper/data/myid文件中
#数字2需要写入到“us9”这个主机的/opt/links/zookeeper/data/myid文件中
#数字3需要写入到“us10”这个主机的/opt/links/zookeeper/data/myid文件中

命令行操作

#在每个节点启动zookeeper
zkServer.sh start
#客户端连接集群
zkCli.sh -server us8:2181,us9:2181,us10:2181

数据模型

zookeeper的数据模型类似于Linux文件系统中的目录结构

节点的分类

ZK中存在的ZNODE,称之为节点

  • 永久节点:在客户端和服务器端断开连接后,还存在的节点
  • 临时节点:断开和客户端连接时就会被删除的节点(解决单点故障)
  • 带序列号的节点:不管是临时节点还是持久节点,都可以带序列号,而且序列号是全局自增

节点的创建

#创建节点
create /test1 ""
#创建临时节点
create -e /test2 ""
#创建带序列号的节点
create -s /test1 ""

注意:

  • 必须在节点名后跟上该节点的数据,如果没有数据,跟空字符串
  • 在ZK中的节点,必须使用绝对路径,没有相对路径的概念

节点的删除

#只能删除没有子节点的节点
delete 节点路径 
#能删除任何节点
rmr 节点路径 

注意: 不要将“/zookeeper”节点删除