在学习zookeeper的过程中,常常受制于环境限制,没有足够多的硬件资源以供自己玩耍,通常情况下只有自己的16G内存的笔记本,因此,在这种情况下,我们需要通过搭建伪集群环境来体验zookeeper的集群模式。
1.环境准备
操作系统: fedora25
硬件配置: thinkpad X230 i5 16G 500G
依赖软件: jdk 1.8.0_121 (官方版本,非openjdk)
下载: zookeeper-3.4.10.tar.gz
cd /opt
wget http://www-us.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
安装目录:/opt/zookeeper
mkdir /opt/zookeeper
cd /opt/zookeeper
tar -zxvf /opt/zookeeper-3.4.10.tar.gz
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node1
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node2
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node3
rm -rf /opt/zookeeper/zookeeper-3.4.10
这样,zookeeper的三个节点运行目录分别为:
/opt/zookeeper/zoo-node1
/opt/zookeeper/zoo-node2
/opt/zookeeper/zoo-node3
2.配置
2.1 zoo.cfg配置文件
zookeeper的运行,需要在conf目录配置zoo.cfg文件。我们可以参考zoo_sample.cfg进行配置。
节点1配置如下:
#zookeeper时间单元,单位为毫秒
tickTime=2000
#集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
initLimit=10
# 集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=5
# data数据目录
dataDir=/opt/zookeeper/zoo-node1/data
# 客户端连接端口
clientPort=2181
# 客户端最大连接数
#maxClientCnxns=60
# 需要保留的快照数目
#autopurge.snapRetainCount=3
# 是否开启自动清理事务日志和快照功能 0 不开启,1表示开启
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
节点2配置
#zookeeper时间单元,单位为毫秒
tickTime=2000
#集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
initLimit=10
# 集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=5
# data数据目录
dataDir=/opt/zookeeper/zoo-node2/data
# 客户端连接端口
clientPort=2182
# 客户端最大连接数
#maxClientCnxns=60
# 需要保留的快照数目
#autopurge.snapRetainCount=3
# 是否开启自动清理事务日志和快照功能 0 不开启,1表示开启
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
节点3配置
#zookeeper时间单元,单位为毫秒
tickTime=2000
#集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
initLimit=10
# 集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=5
# data数据目录
dataDir=/opt/zookeeper/zoo-node3/data
# 客户端连接端口
clientPort=2183
# 客户端最大连接数
#maxClientCnxns=60
# 需要保留的快照数目
#autopurge.snapRetainCount=3
# 是否开启自动清理事务日志和快照功能 0 不开启,1表示开启
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
分别将上述配置文件放置在三个节点对应的conf目录下。
另外,需要新建data目录
mkdir /opt/zookeeper/zoo-node1/data
mkdir /opt/zookeeper/zoo-node2/data
mkdir /opt/zookeeper/zoo-node3/data
2.2 myid配置文件
zookeeper还需要在data目录中配置myid文件。myid文件中存放对应节点的序号。
echo '1' > /opt/zookeeper/zoo-node1/data/myid
echo '2' > /opt/zookeeper/zoo-node2/data/myid
echo '3' > /opt/zookeeper/zoo-node3/data/myid
2.3 日志路径配置
修改 bin 目录下的zkEnv.sh
将ZOO_LOG_DIR 修改为:
ZOO_LOG_DIR="../logs/"
按上述方法分别修改三个节点中的zkEnv.sh文件
3.启动
/opt/zookeeper/zoo-node1/bin/zkServer.sh start
/opt/zookeeper/zoo-node2/bin/zkServer.sh start
/opt/zookeeper/zoo-node2/bin/zkServer.sh start
如此分别启动三个节点即可。
启动效果如下:
[root@localhost bin]# /opt/zookeeper/zoo-node1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zoo-node1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看日志:
日志
4.客户端连接
运行 zkCli.sh 连接到默认的端口
4.1 create
使用create 可以创建一个zookeeper节点。
命令格式
create [-s] [-e] path data acl
create /zk-book 123
create
4.2 ls
列出zookeeper指定节点下的所有子节点。
命令格式
ls path [watch]
ls /
ls
4.3 get
get 可以获取zookeeper指定节点的数据内容和属性信息。
get path [watch]
get /zk-book
get
4.4 set
更新指定节点的数据内容
set path data [vresion]
set /zk-book 456
set
4.5 delete
delete 删除zookeeper上指定节点内容
delete path [version]
delete /zk-book
delete
不过需要注意的是,删除的节点必须为空,否则无法删除。
create /zk-book 123
create /zk-book/child 12345
delete /zk-book
delete 非空