1 ZooKeeper简介
ZooKeeper是一个开源分布式应用程序协调服务,最初是作为Hadoop的一个副产品,但现在已经成为分布式应用的一个重要组件,像Hadoop、Dubbo、Kafka都是基于ZooKeeper构建的。
官方文档
ZooKeeper 3.4 Documentation
2 ZooKeeper安装
Mac安装
brew install zookeeper
启动和关闭
ZooKeeper提供了zkServer
来管理ZooKeeper,默认使用/usr/local/etc/zookeeper/zoo.cfg
配置文件中的配置来启动,主要命令如下:
- 启动:
zkServer start [配置文件]
- 关闭:
zkServer stop [配置文件]
- 重启:
zkServer restart [配置文件]
- 查看状态:
zkServer status [配置文件]
# 其他命令如下
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
配置文件详解
# 心跳时间
# Leader与Follower之间发送消息时,请求和应答时间长度。
tickTime=2000
# Follower与Leader初始连接时能容忍的最多心跳数
initLimit=10
# Follower与Leader请求和答应最多能容忍的心跳数
syncLimit=5
# 存放myid、版本、日志等信息
dataDir=/usr/local/var/run/zookeeper/data
# 客户端连接的端口
clientPort=2181
# 最大连接数
# maxClientCnxns=60
# 指定了需要保留的文件数目。默认是保留3个。
# autopurge.snapRetainCount=3
# 3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能
# 这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。
# autopurge.purgeInterval=1
3 ZooKeeper集群搭建
修改配置文件
- 在zoo.cfg的目录下增加3个配置文件,分别命名为cluster_zoo1.cfg、cluster_zoo2.cfg、cluster_zoo3.cfg(随便起名字也可以)。
- 编辑配置文件,分别修改其端口和dataDir,保证三个文件使用不同的端口和dataDir目录。
- 增加集群配置。
# cluster_zoo1.cfg配置文件内容
dataDir=/usr/local/var/run/zookeeper/cluster_data_1
clientPort=2182
# server.A=B:C:D
# A:其中 A 是一个数字,表示这个是服务器的编号;
# B:是这个服务器的 ip 地址;
# C:Leader选举的端口;
# D:Zookeeper服务器之间的通信端口。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
# cluster_zoo1.cfg配置文件内容
dataDir=/usr/local/var/run/zookeeper/cluster_data_2
clientPort=2183
# server.A=B:C:D
# A:其中 A 是一个数字,表示这个是服务器的编号;
# B:是这个服务器的 ip 地址;
# C:Leader选举的端口;
# D:Zookeeper服务器之间的通信端口。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
# cluster_zoo3.cfg配置文件内容
dataDir=/usr/local/var/run/zookeeper/cluster_data_3
clientPort=2184
# server.A=B:C:D
# A:其中 A 是一个数字,表示这个是服务器的编号;
# B:是这个服务器的 ip 地址;
# C:Leader选举的端口;
# D:Zookeeper服务器之间的通信端口。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
配置myid的文件
myid文件配置在dataDir的目录下,该文件里面只有一个数据就是server.A=B:C:D
中A的值,ZooKeeper启动时会读取这个文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是那个server。
/usr/local/var/run/zookeeper > echo 1 > cluster_data_1/myid
/usr/local/var/run/zookeeper > echo 2 > cluster_data_2/myid
/usr/local/var/run/zookeeper > echo 3 > cluster_data_3/myid
使用三个配置文件分别启动
/usr/local/etc/zookeeper > zkServer start cluster_zoo1.cfg
/usr/local/etc/zookeeper > zkServer start cluster_zoo2.cfg
/usr/local/etc/zookeeper > zkServer start cluster_zoo3.cfg
查看集群状态
# 节点1
/usr/local/etc/zookeeper master > zkServer status cluster_zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo1.cfg
Mode: follower
# 节点2
/usr/local/etc/zookeeper master > zkServer status cluster_zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo2.cfg
Mode: leader
# 节点3
/usr/local/etc/zookeeper master > zkServer status cluster_zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo3.cfg
Mode: follower
连接集群
/usr/local/etc/zookeeper > zkCli -server localhost:2182,localhost:2183,localhost:214
Connecting to localhost:2182,localhost:2183,localhost:214
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2182,localhost:2183,localhost:214(CONNECTING) 0]
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
网友评论