zookeeper安装与伪集群配置

在自己学习分布式相关的技术时往往需要使用zookeeper伪集群配置,故记录于此。

安装ZK

本文操作系统是Mac OS,为了便于各种软件的管理,使用homebrew安装。

安装

使用homebrew进行安装zookeeper,命令:brew install zookeeper
安装完成之后zookeeper配置文件位置:/usr/local/etc/zookeeper
安装目录位置:/usr/local/Cellar/zookeeper

常用命令(读取默认的配置文件zoo.cfg)

启动服务:zkServer start
停止服务:zkServer stop
查看服务状态:zkServer status
连接: zkCli

伪集群配置

根据/usr/local/etc/zookeeper下的zoo.cfg中的内容,创建zoo1.cfg、zoo2.cfg、zoo3.cfg,(懒人笔记,复制创建:cp zoo.cfg zoo1.cfg)
如果没有zoo.cfg,可以从zoo_sample.cfg取得内容

配置内容如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 自定义的zk数据目录,zk+对应的服务序号
dataDir=/usr/local/var/run/zookeeper/data/zk1
dataLogDir=/usr/local/var/run/zookeeper/data/zk1/logs
# 用于客户端连接的端口(由于是同一台机器,所以每个zk服务对外的端口应该不一样)
clientPort=2182
# 伪集群配置 由于是同一台机器,为避免冲突将端口错开
# 这里的2888-2890是zk服务之间相互通信的端口,3888-3890是选举leader的端口
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

配置完成后,前往dataDir(配置文件zoo+序号.cfg中的dataDir)创建zk1、zk2、zk3目录(懒人笔记 批量创建:mkdir zk1 zk2 zk3),分别在对应目录下创建myid文件,并输入对应的序号,例如在zk1目录下vim myid,然后输入1退出即可

启动集群

命令同上文第2步,在后面加上对应的配置文件即可(我这里是在zoo1.cfg所在目录中执行的)

zkServer start zoo1.cfg
zkServer start zoo2.cfg
zkServer start zoo3.cfg

这里有一个点就是,因为我配置的是三个zk服务,所以只要当三台中正在运行的服务数少于(3+1)/2时,用zkServer status zoox.cfg命令查看相应的zk服务的状态都会显示“Error contacting service. It is probably not running.”,但是此时不代表zoox.cfg对应的服务没有启动,而是zk整个集群不可用。

比如我首先启动zoo1.cfg对应的服务,然后我输入zkServer status zoo1.cfg查看状态,会显示:

ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Error contacting service. It is probably not running.

但是使用zkCli命令zkCli -server 127.0.0.1:2182其实可以连接到zoo1.cfg对应的zk服务的。
接下来启动zoo2.cfg之后,再查看zoo1.cfg和zoo2.cfg的状态:

192:zookeeper shakeli$ zkServer status zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Mode: follower
192:zookeeper shakeli$ zkServer status zoo2.cfg 
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Mode: leader

可以看出两个ZK服务的状态是正常的,zoo1.cfg是follower,zoo2.cfg是leader
这个跟正常的集群模式中在单个启动时会报错是同样的原因。

点赞