简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
准备
在三台服务器均做如下操作。
-
下载Zookeeper,http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
-
解压
tar -zvxf zookeeper-3.4.12.tar.gz
-
配置hosts
/etc/hosts文件添加如下信息
192.168.1.201 master
192.168.1.202 slave1
192.168.1.203 slave2
配置Zookeeper环境变量
/etc/profile添加如下信息
#Set ZOOKEEPER_HOME ENVIRONMENT
export ZOOKEEPER_HOME=/home/zookeeper-3.4.12
export PATH=$PATH:$ZOOKEEPER_HOME/bin
创建配置文件
复制 /zookeeper-3.4.12/conf/zoo_sample.cfg 到 zoo.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.
#创建一个data目录并设置dataDir
dataDir=/home/zookeeper-3.4.12/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
常见参数说明:
dataLogdDir=/path1 # 指定事务日志的存储路径,可以和dataDir在不同设备,这意味着可以使用一个日志的专用磁盘,避免日志IO和快照竞争。
dataDir=/path2 # 运行数据的存放路径
tickTime=2000 # 这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime
maxClientCnxns=0 # 最大的并发连接数限制,设置为0或者不设置该参数,表示不进行连接数的限制。
minSessionTimeout # 最小的会话超时时间,默认值 minSession=2*tickTime
maxSessionTimeout # 最大的会话超时时间,默认值 maxSession=20*tickTime
initLimit=10 # 此配置表示,允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
syncLimit=5 # 此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
# 集群模式最关键的配置参数
server.11=192.168.1.21:2888:3888
# server.myid=ip:leader_port:inner_port
# myid 为服务器编号,用于标识服务器,这个值必须和dataDir目录下myid文件中的值保证一致
# ip 为当前服务器IP,
# leader_port Leader的端口
# inner_port zk服务器之间内部通信端口
# 同一个集群内的服务器,需要把该集群内的服务器列表信息都写在配置文件中。
创建创建myid
mkdir -p /home/zookeeper-3.4.12/data
cd /tmp/zookeeper/data
touch myid
echo "1" > myid
注:server.x
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
myid里面的值对应x的值。
启动
在每台服务器的Zookeeper目录下,运行 (这里的启动顺序为 master > slave1 > slave2 )
bin/zkServer.sh start
可以使用命令查看启动状态
bin/zkServer.sh status
问题
如果启动完成,查看状态,遇到该问题,可以关闭防火墙,再查看状态
/etc/init.d/iptables stop
Zookeeper的四字命令
客户端可以通过nc或telnet连接ZooKeeper Server提交指令
使用nc方式进行测试
# 检查服务器状态是否正常
echo ruok | nc localhost 2181
imok
# 输出服务器配置信息
echo conf | nc localhost 2181
clientPort=2181
dataDir=/home/zookeeper-3.4.12/data/version-2
dataLogDir=/home/zookeeper-3.4.12/data/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
# 输出服务器状态信息
echo stat | nc localhost 2181
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:
/0:0:0:0:0:0:0:1:45688[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 6
Sent: 5
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
Zookeeper Client 简单操作
9个基本操作指令:
连接 ZooKeeper 服务器
bin/zkCli.sh -server localhost:2181
查看根下有哪些节点
ls /
创建节点
在根下创建一个 "test" 节点,并设置数据为 "hello zookeeper"
create /test "hell zookeeper"
查看节点
通过 get /test
命令查看数据
修改节点
发现"hello zookeeper"打错成了"hell zookeeper",通过set /test "hello zookeeper"
进行修改;
删除节点
delete /test
网友评论