【ZooKeeper教程】(1)zookeeper集群配置教程

TangLu 未命名 2021-12-17 8732 0

ZooKeeper是Apache开源的分布式服务框架,可以为分布式应用程序提供协调服务,用来解决分布式应用中存在的问题,比如配置信息统一管理、域名服务、提供分布式同步、集群管理。ZooKeeper分为了文件系统和通知机制两个部分


一、ZooKeeper文件系统与znode节点

ZooKeeper有着类似Linux一样的文件系统,这个文件系统由许多znode节点构成,每个节点对应了一个系统路径,通过该路径可以找到这个节点。由于znode主要用于存储一些配置信息,所以每个节点只能存储大约1M的数据另外ZooKeeper还有以下几种节点类型:

1、持久化目录节点(persistent):集群宕机或者客户端断开连接后,该节点依然存在

2、持久化顺序编号目录节点(persistent_sequential):在持久化目录节点的基础上会将节点进行顺序编号,如0000000001、0000000002,在创建顺序编号节点时需要注意它是由父节点维护的,编号会从已有的子节点个数(包含已删除的节点)开始递增

3、临时目录节点(ephemeral):集群宕机或者客户端断开连接后,该节点会被删除

4、临时顺序编号目录节点(ephemeral):同持久化顺序编号目录节点


二、ZooKeeper通知机制与应用场景

ZooKeeper负责管理和维护项目上的公共数据,如集群环境中有多台应用服务器,它们拥有相同的配置文件,如果配置文件要变动的话每台服务器都需要变。为了解决这个问题,可以将这些配置文件放在ZK的某个节点中,然后ZK会将这些应用服务器看作是观察者并接受它们的订阅,如果数据发生变化,则通知这些观察者让它们做出相应处理。也就是说ZooKeeper是一个注册中心的角色。

除此之外ZooKeeper还可以对集群进行管理,在父目录GroupMembers下为所有集群节点创建临时顺序编号目录节点,然后选举编号最小的机器作为Master,并且监听父目录所有子节点的变化情况,一旦有机器挂掉,临时节点就会删除,此时集群其他机器都会收到通知。


三、ZooKeeper的安装和配置

1、在官方下载二进制安装包并完成解压,由于是二进制安装包,无需编译。在运行zk之前请确认已经配置好JDK环境

tar zxf zookeeper-3.4.14.tar.gz
mv zookeeper-3.4.14 /usr/local/

cd /usr/local/zookeeper-3.4.14
cp zoo_sample.cfg zoo.cfg #zoo.cfg是ZK默认读取的配置文件,所以先复制一份示例文件做修改


2、修改主配置文件相关内容

vi zoo.cfg
dataDir=/data/zkdata  #数据存放目录
dataLogDir=/data/zkdata/logs  #ZK日志文件存放路径
clientPort=2181  #ZK服务端口
tickTime=2000  #集群节点间心跳检查间隔,单位是毫秒,后续所有和时间相关的配置都是该值的倍数,进行整数倍的配置,如4等于8000
initLimit=10  #集群其他节点与Master通信完成的初始通信时间限制,这里代表10*2000
syncLimit=5  # 如果Master节点在超过syncLimit*tickTime的时间还未收到响应,认为该节点宕机
maxClientCnxns=60  #单个客户端最大连接数限制,0代表不限制
autopurge.snapRetainCount=3  #快照文件保留的数量
autopurge.purgeInterval=1  #清理快照文件和事务日志文件的频率,默认为0代表不开启,单位是小时

#server.A=B:C:D 集群设置,A表示第几号服务器;B是IP;C是该服务器与leader通信端口;D是leader挂掉后重新选举所用通信端口;两个端口号可以随意
server.1=192.168.1.100:2888:3888
server.2=192.168.1.101:2888:3888
server.3=192.168.1.102:2888:3888


3、启动ZooKeeper

/usr/local/zookeeper-3.4.14/bin/zkServer.sh start
/usr/local/zookeeper-3.4.14/bin/zkServer.sh status  #查看ZK状态,默认是standalone单机模式,也可以配置集群模式


四、ZooKeeper集群配置
每个服务器在启动时都认为自己是集群的Leader,会给自己投一票,然后将投票信息发送出去。后来启动的每个节点也会给自己投票,但是服务器编号越大的节点权重越大。当有投票数过半的节点率先出现时它将成为Leader,其他节点则是Follower。


1、在每台ZK机器的zoo.cnf配置添加以下内容:

#配置了三个节点的信息,server.后面的数字是一个可自定义的编号,后面跟上每个节点的IP,2888是该节点与集群Master交换信息时所用端口,3888是执行选举Master时互相通信的端口
server.100=192.168.1.100:2888:3888 
server.110=192.168.1.110:2888:3888
server.120=192.168.1.120:2888:3888


2、在每个ZK节点的dataDir目录中去创建myid配置文件,文件内容是当前服务器的编号,也就是上面server.后面的数字,上面配了三个server.x,所以我们需要在三个机器都做配置:

echo 1 > /data/zkdata/myid  #以一台为例做配置


3、启动所有节点服务,检查集群状态,然后随便在一个节点创建数据,在其他节点查看是否同步即可

/usr/local/zookeeper-3.4.14/bin/zkServer.sh start
/usr/local/zookeeper-3.4.14/bin/zkServer.sh status  #模式显示为leader和follower了



五、ZooKeeper客户端常用命令

1、连接ZooKeeper

/usr/local/zookeeper-3.4.14/bin/zkCli.sh  #连接方式和redis-cli有点像,默认连接本机2181端口
#/usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.1.110:2181  #也可以连接指定主机端口


2、登录ZK后运行ls或者ls2命令可以查看节点信息

ls /  #查看节点信息
ls2 / #查看节点详细状态信息


3、登录ZK后运行create命令创建子节点和内容,加上-e代表是临时节点,-s是顺序编号节点

create -e /test1  #在根节点上创建test1这个临时子节点
create -e /test1/test1_p1 "test1节点的子节点"  #在/test1节点上创建test1_1子节点并赋值
create -s /test3 ""

ls2 /  #可以看到被创建出来的节点,其中test1在客户端断开后会自动删除,而test3的名字加上了数字编号


4、登录ZK后运行get命令获取节点数据

get /test2  #能看到创建时添加的test for test2


5、登录ZK后运行delete命令删除空节点,如果要递归删除的话应该使用rmr命令

delete /test300000000003  #删除了顺序编号节点/test3


评论