环境需要
Zookeeper是使用Java语言编写的,推荐使用JDK1.6及以上版本,JDK安装过程请自行百度
操作系统适配,Linux,Windows,MacOS等大部分主流操作系统均可
本文安装Zookeeper基于JDK1.8,MacOS,MacOS系统下支持brew安装,为了讲解的通用性选择官网下载压缩包方式安装,附上官网zk下载地址
http://www.apache.org/dyn/closer.cgi/zookeeper
本文中Zk版本是zookeeper-3.4.12
单机部署
下载zookeeper-3.4.12.tar.gz,并将压缩包放到自己对应的目录下
执行tar -xzvf zookeeper-3.4.12.tar.gz 将zk压缩包解压
解压后的zk文件夹目录结构如下所示
初次使用zk时,需要将conf目录下的zoo_sample.cfg文件重新命名为zoo.cfg,zk默认配置文件即为/zk安装目录/conf/zoo.cfg文件
zoo.cfg文件中配置参数说明如下
tickTime=2000
# 初始化同步时(Leader与Follwer建立链接)所耗费的时间,默认10个tickTime,如果zk中文件很大,可适当调大该值
initLimit=10
# Leader发出请求到得到Follower ack响应所耗费的时间,默认5个tickTime
syncLimit=5
# 数据目录路径,用于存放myid信息以及一些事务日志、znode快照信息,最好修改为自己的目录
dataDir=/tmp/zookeeper/data
# 日志文件路径
dataLogDir=/tmp/zookeeper/logs
# zk客户端连接的端口号,默认2181
clientPort=2181
# 可接受的客户端最大连接数
#maxClientCnxns=60
# 开启自动清除高级特性前,可参考
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# znode快照文件数量,超过这个数量会触发自动清除功能
#autopurge.snapRetainCount=3
# 自动清除时间间隔,单位-小时,如设置为0,则表示禁用自动清除功能
#autopurge.purgeInterval=1
附上我的zoo.cfg文件,如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/chenyin/zookeeper/data
dataLogDir=/Users/chenyin/zookeeper/logs
clientPort=2181
server.1=192.168.202.58:2888:3888
其中server.1=192.168.202.58:2888:3888 标识只有1个zk节点
server.X=IP:端口号1:端口号2
X对应dataDir下myid文件内容,机器唯一标识,故还需在dataDir下,即/Users/chenyin/zookeeper/data 新建myid文件,并只写入一行数字,即1
cd /Users/chenyin/zookeeper/data
echo '1' > myid
1
2
Ip对应机器ip
端口号1 用来连接Leader
端口号2 用来Leader选举
配置完zoo.cfg及新建myid文件后,剩下的就是启动zk服务了,常见命令如下,执行命令所需zk相关sh脚本文件在zk安装目录下的bin文件中
启动服务
./zkServer.sh start
停止服务
./zkServer.sh stop
重启服务
./zkServer.sh restart
查看服务状态
./zkServer.sh status
执行结果如下,其中Mode:standalone标识当前集群只有一台server,如果是集群部署,Mode有可能是Leader或者Follower
连接zk服务
./zkCli.sh
或者直接指定ip+客户端连接端口号(zoo.cfg文件中指定的clientPort)
./zkCli.sh -server 127.0.0.1:2181
执行结果如下
在该命令行界面可以输入 help 来查询zk相关命令
伪集群部署
在单机环境中配置zk伪集群,需要设置不同的配置文件,来启动不同的zk服务节点,需注意以下几点
clientPort端口:如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183
dataDir和dataLogDir:dataDir和dataLogDir也需要区分下,将数据文件和日志文件分开存放,同时每个server的这两变量所对应的路径都是不同的
server.X和myid: server.X 这个数字X就是对应,dataDir/myid中的数字。在3个server的myid文件中分别写入了1,2,3,那么每个server中的zoo.cfg都配 server.1 server.2,server.3就行了。因为在同一台机器上,后面连着的2个端口,3个server都不要一样,否则端口冲突
下载及解压缩过程不再赘述,从配置zoo.cfg及myid文件开始 ,流程如下
-
我在自己的zookeeper文件夹下分别新建3个文件夹,zk1,zk2,zk3来模拟3台机器对应的数据及日志存储目录,数据目录下新建myid文件,分别写入1,2,3来标识3台服务节点
-
在 /zk安装目录/conf下新建zoo1.cfg,zoo2.cfg,zoo3.cfg配置文件来模拟3台zk服务节点不同的配置,具体配置如下
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/chenyin/zookeeper/zk1/data
dataLogDir=/Users/chenyin/zookeeper/zk1/logs
clientPort=2182
server.1=192.168.202.58:2887:3887
server.2=192.168.202.58:2888:3888
server.3=192.168.202.58:2889:3889
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/chenyin/zookeeper/zk2/data
dataLogDir=/Users/chenyin/zookeeper/zk2/logs
clientPort=2183
server.1=192.168.202.58:2887:3887
server.2=192.168.202.58:2888:3888
server.3=192.168.202.58:2889:3889
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/chenyin/zookeeper/zk3/data
dataLogDir=/Users/chenyin/zookeeper/zk3/logs
clientPort=2184
server.1=192.168.202.58:2887:3887
server.2=192.168.202.58:2888:3888
server.3=192.168.202.58:2889:3889
- 根据配置文件启动不同zkServer,在上述介绍的命令中,后面都可以接上指定配置文件来启动、停止、查看不同的服务,如
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh stop ../conf/zoo1.cfg
./zkServer.sh status ../conf/zoo1.cfg
先在/zk安装目录/bin下,执行启动命令启动3个服务节点
查看下节点状态,看是否启动成功,看到有2个节点的mode是follower,一个节点是leader,标识zk集群搭建成功
- 启动客户端
输入ip+客户端连接端口号clientPort来连接zk服务器
./zkCli.sh -server 127.0.0.1:2184
集群部署
集群部署本质上与伪集群部署一致,不再赘述
原文链接:https://blog.csdn.net/hosaos/java/article/details/87160617
网友评论