zookeeper记录笔记

mac2022-06-30  25

zookeeper笔记

1 Zookeeper简述1.1 什么是zookeeper?1.2 Zookeeper的数据结构1.3 Zookeeper的启动1.4 Zookeeper常见命令 2 Zookeeper的配额2.1 设置配额2.2 查看配额2.3 删除配额2.4 额外命令 3 JavaAPI操作zookeeper3.1 实例:id生成器 4 Zookeeper环境搭建(集群、单机、伪集群)4.1 集群4.2 伪集群4.3 单机模式 5 运维5.1 配置文件5.2 配置JMX与使用jconsole.exe5.3 保留笔记,待完善

1 Zookeeper简述

1.1 什么是zookeeper?

简单理解就是它是一个调度中心,相当于电脑中的cpu和人的大脑,专门用来协调各个对象之间的一种服务工具。并且它还是高性能的、开源的。

1.2 Zookeeper的数据结构

他有点类似于Linux的文件系统,一个根目录,下面有着众多的子目录。在zookeeper中则叫做根节点于子节点,每个节点都可以存放内容。 数据结构: 从上图可知node_1 path:/node_1 node_1_1 path:/node_1/node_1_1,其中 / 表示根节点

1.3 Zookeeper的启动

Zookeeper安装成功之后,启动服务,客户端 Windows系统直接运行.cmd文件即可 Linux系统需要注意: 启动服务:bin/zkServer.sh start (stop\status) 客户端:.bin/zkCli.sh -timeout 5000 -server ip地址:端口(默认2181)

1.4 Zookeeper常见命令

Zookeeper中的一些命令,学习之后,会发现跟数据库操作的一些命令差不多,主要就是增删改查操作 查: ls path:(/是根节点),列出某个节点下的所有子节点 如:ls / 结果如下图,其中zookeeper是默认存在的,其它则由自己创建 如上图,当前节点有4个节点,分别是:dubbo、dtp、zookeeper、galaxyl stat path: 获取某个节点状态信息,如zookeeper节点 stat /zookeeper 结果如下图 状态信息: Czxid:创建该节点的事物ID Ctime:创建该节点的时间 Mzxid:更新该节点的事物ID Mtime:更新该节点的时间 get path:获取某个节点内容,如node1节点,至于如何创建,下面 get /node1 其中ls2 path命令是ls和stat的结合 增: 创建节点只有一个命令,那就是create,他的语法格式如下: create [-s] [-e] path data acl -s: 顺序,可用来作主键生成器 -e: 表示创建的这个节点是一个临时节点,意味着当客户端与服务器失去连接之后,这个节点会被删除 data : 至于这个data的值,就是这个节点存放的数据 acl : 则是权限控制 改: 修改节点的命令也有一个,就是set,语法格式如下: set path data 当使用这个命令后会产生数据版本变化,如当前版本信息如下图: 使用set /node1 321 命令后结果如下 删: 删除节点有两个命令,一个是delete,另一个是rmr,都用于删除指定路径节点,区别如下: delete:这个命令不能删除有子节点的节点,如node_1节点: 当输入:delete /node_1命令后(),它会提示:Node not empty:/node_1,那是因为/node_1节点下还有子节点。 rmr:他可以删除有子节点的节点,它会在删除父节点之前,会将父节点的子节点循环删除,最后删除需要删除的父节点。

2 Zookeeper的配额

配额的设置也是通过一些命令来设置,他可以用对节点做一些限制,比如 这个节点拥有子节点的个数、节点数据值的长度。

2.1 设置配额

命令如下: setquota -n | -b val path val 此参数值的具体含义由-n或者-b来决定 -n 表示限制此节点拥有子节点的个数,如 setquota -n 4 /node1 意思就是node1节点可以拥有4个节点,如果超过四个,系统虽然不会报错,但是会发出警告,在zookeeper安装目录下会产生一个zookeeper.out的日志文件,会记录下来 -b 表示数据值的长度,如 setquota -b 4 /node1 意思就是node1节点的数值长度为4,如果超出也不会报错,只会在日志文件记录

2.2 查看配额

listquota path 当查出来的值为-1,表示没有任何限制

2.3 删除配额

delquota path

2.4 额外命令

history:查看历史执行命令 redo:重复执行某条指令,如,redo 15,其中15这个值取决于上图中红色框框中的某一个具体的值。

3 JavaAPI操作zookeeper

这里主要是写了一些常用Java代码,如节点的创建、删除、获取数据、更新数据。 命名服务

3.1 实例:id生成器

这个可以用在分库分表时确保每一条记录是单独的,不与其它记录存在相同的主键id 主要代码查看附件,注意导包和包的路径。 可参考我的另一文章:zookeeper唯一ID生成器 zookeeper唯一ID生成器

4 Zookeeper环境搭建(集群、单机、伪集群)

4.1 集群

机器如下: 配置服务器格式: Server.id=host:port1:port2 参数说明: id:是一个整数,可以看做是对服务器的编号 host:服务器的IP地址,如上图,根据实际设定来写 port1:是flooler服务器和leader通信端口 port2:用于leader选举过程中通信 1.打开zookeeper zoo.cfg配置文件,在文件最后追加配置如下: server.1=192.168.1.105:2888:3888 server.2=192.168.1.106:2888:3888 Server.2=192.168.1.107:2888:3888 注意:每台服务都需要进行以上配置 2.创建myid文件在dataDir配置文件指定目录下 vim myid 内容就是服务器中的id值(在哪一台服务器进行创建myid文件,就写那一台服务器id的值)如,我先在105号机器创建文件,则写1,记住,每台机器都需要创建myid文件,内容就是每台服务器的id值。 105对应1 106对应2 107对应3 3.启动服务,如下: ./zkServer.sh start(启动的路径以实际路径为主) 4.验证是否启动成功 telnet telnet 192.168.1.105 2181 提示服务器stat不能对外提供服务(因为我们只启动了一台服务器,只有过半的服务器正常工作才能对外提供服务,因此还需要至少启动一台)

4.2 伪集群

伪集群只是在集群模式下对配置做了一点点修改,主要是将IP地址写成一样的,只是flooler和leader之间通信端口不一样。配置如下: server.1=192.168.1.105:2888:3888 server.2=192.168.1.105:2889:3889 Server.2=192.168.1.105:2890:3890

4.3 单机模式

删除其它服务器配置,留一个,如下: server.1=192.168.1.105:2888:3888(具体留哪一个,实际需求来决定)

5 运维

5.1 配置文件

基础配置 clientPort=2181, dataDir:用于配置zookeeper存储快照文件的路径 tickTime:用于配置zookeeper最小单元的长度

高级配置 dataLogDir:用于存储zookeeper事务日志的目录(对磁盘性能要求高) globalOutstandingLimit:最大请求约集数。为了防止服务端资源过度消耗,必须限制同时处理请求数。 preAllocSize:用于配置zookeeper事务日志文件大小,默认64M snapCount:用于配置相邻两次数据快照文件操作的次数 4字命令 以前使用Telnet 192.168.1.105 2181,现在使用nc方式,格式如下: echo stat | nc IP地址 port 例如:echo stat | nc 192.168.1.105 2181,效果和Telnet一样的 conf:打印有关服务配置的基本配置信息 cons:用于输出当前这台服务器上所有连接详细信息 crst:功能性,重置所有客户端连接统计信息 dump:输出当前集群火会话信息 envi:用于输出zookeeper运行环境时的信息(系统版本用户名等) ruok:用于输出当前zookeeper服务器是否在运行 stat:用于获取服务器运行时的状态信息(角色,节点个数) srvr:类似stat,不过不会输出客户端信息 srst:用于重置所有服务器统计信息 wchs:输出当前服务器管理watch的概要信息(wchc命令输出的信息更加全面) wchp:和wchc非常相似,不过它输出的信息是以节点路径为单位 mntr:用于输出比stat更加详细的信息

5.2 配置JMX与使用jconsole.exe

在使用JMX之前需要进行配置,主要有两大步骤: 1.修改服务器启动脚本, 添加4个启动选项 -DJava.rmi.server.hostname=192.168.1.105(用于规定使用JMX连接到zookeeper服务器的名称) -Dcom.sun.management.jmxremote.port=8899(端口号) -Dcom.sun.management.jmxremote.ssl=false(是否启用ssl) -Dcom.sun.management.jmxremote.authenticate=false(规定是否使用权限) 最终如下: 如果需要每一台服务器需要使用JMX,那么每一台服务器都需要相应的更改。 2.切换到Java目录下,进入bin目录 有一个jconsole.exe文件,运行它直接在命令行窗口出现如图 选择“远程进程”,输入服务器的IP地址与端口号:192.168.1.105:8899 注意:注意这里的端口号是刚刚在启动脚本配置的8899端口。 点击连接。 然后就可以进行查看主要信息了。

5.3 保留笔记,待完善

监控平台的搭建和使用 能够配置zookeeper和查看zookeeper信息 工具: Netflix的exhibitor,zabbix 1.下载exhibitor的源代码(GitHub或者其它路径) 2.解压,进入目录(我们使用jar包,所以进入standlone目录) 3.我们采用maven方式构建,进入maven目录 4.执行mvn clean package 5.上传到zookeeper服务器 6.在服务器执行jar包,Java -jar 上传的jar包文件名 -c file 7.打开浏览器,输入以下网址 192.168.1.105:8080/exhibitor/v1/ui/index.html (具体IP地址要看文件在那一台服务器) 8.在出现的界面就可以进行配置

最新回复(0)