zookeeper记录笔记

1 Zookeeper简述

1.1 什么是zookeeper?

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

1.2 Zookeeper的数据结构

他有点类似于Linux的文件系统,一个根目录,下面有着众多的子目录。在zookeeper中则叫做根节点于子节点,每个节点都可以存放内容。
数据结构:
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是默认存在的,其它则由自己创建
zookeeper记录笔记
如上图,当前节点有4个节点,分别是:dubbo、dtp、zookeeper、galaxyl
stat path: 获取某个节点状态信息,如zookeeper节点
stat /zookeeper 结果如下图
zookeeper记录笔记
状态信息:
Czxid:创建该节点的事物ID
Ctime:创建该节点的时间
Mzxid:更新该节点的事物ID
Mtime:更新该节点的时间
get path:获取某个节点内容,如node1节点,至于如何创建,下面
get /node1
zookeeper记录笔记
其中ls2 path命令是ls和stat的结合
增:
创建节点只有一个命令,那就是create,他的语法格式如下:
create [-s] [-e] path data acl
-s: 顺序,可用来作主键生成器
-e: 表示创建的这个节点是一个临时节点,意味着当客户端与服务器失去连接之后,这个节点会被删除
data : 至于这个data的值,就是这个节点存放的数据
acl : 则是权限控制
zookeeper记录笔记
改:
修改节点的命令也有一个,就是set,语法格式如下:
set path data
当使用这个命令后会产生数据版本变化,如当前版本信息如下图:
zookeeper记录笔记
使用set /node1 321 命令后结果如下
zookeeper记录笔记
删:
删除节点有两个命令,一个是delete,另一个是rmr,都用于删除指定路径节点,区别如下:
delete:这个命令不能删除有子节点的节点,如node_1节点:
当输入:delete /node_1命令后(),它会提示:Node not empty:/node_1,那是因为/node_1节点下还有子节点。
zookeeper记录笔记
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 配置文件

基础配置
zookeeper记录笔记
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.修改服务器启动脚本,
zookeeper记录笔记
添加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(规定是否使用权限)
最终如下:
zookeeper记录笔记
如果需要每一台服务器需要使用JMX,那么每一台服务器都需要相应的更改。
2.切换到Java目录下,进入bin目录
有一个jconsole.exe文件,运行它直接在命令行窗口出现如图
zookeeper记录笔记
选择“远程进程”,输入服务器的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.在出现的界面就可以进行配置