一、ZooKeeper的概述
Zookeeper 是为分布式应用程序提供高性能协调服务的工具集合,也是Google的Chubby一个开源的实现,是Hadoop 的分布式协调服务。它包含一个简单的原语集,分布式应用程序可以基于它实现配置维护、命名服务、分布式同步、组服务等。Zookeeper可以用来保证数据在ZK集群之间的数据的事务性一致。其中ZooKeeper提供通用的分布式锁服务,用以协调分布式应用。
zk是Apache Hadoop的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题。
列举了一些可能会遇到的场景:
- 命名服务:订单编号,防止出现订单号相同。
- Master选举:监听主节点是否挂了,从节点顶上来。
- 集群管理:注册中心
- 配置管理:
- 分布式队列:
- 分布式锁:
二、目录结构介绍
三、配置文件
序号 | 参数名 | 说明 |
1 | clientPort | 客户端连接server的端口,即对外服务端口,一般设置为2181吧。 |
2 | dataDir | 存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。 |
3 | tickTime | ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。 |
4 | dataLogDir | 事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。(No Java system property) |
5 | globalOutstandingLimit | 最大请求堆积数。默认是1000。ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下。(Java system property: zookeeper.globalOutstandingLimit.) |
6 | preAllocSize | 预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。(Java system property: zookeeper.preAllocSize) |
四、ZK安装
我的在centos7系统上操作的
1、首先下载安装包
官网下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/
2、解压安装包
tar -xzvf apache-zookeeper-3.5.5-bin.tar.gz
3、创建zookeeper目录
mkdir zookper
然后进入zookper目录下创建zk1 zk2 zk3 目录,用于存放三个zk
cd zookpermkdir zookper
mkdir zk1
mkdir zk2
mkdir zk3
4、解压文件放置到 zk1 zk2 zk3 下
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk1
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk2
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk3
5、创建 zoo.cnf
cd /usr/local/zookeeper/zk1
cp zoo_sample.cfg zoo.cfg
6、修改配置文件,如下
# 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.
dataDir=/usr/local/zookeeper/zk1/data
# the port at which the clients will connect
clientPort=20181 # 客户端端口号
# 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
#
quorumListenOnAllIpds=true
# 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
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
7、设置myid
dataDir=/usr/local/zookeeper/zk1/data
在配置文件设置的dataDir目录下设置myid
echo 1 > myid
echo 2 > myid
echo 3 > myid
然后分别启动
/usr/local/zookeeper/zk1/bin/zkServer.sh start
/usr/local/zookeeper/zk2/bin/zkServer.sh start
/usr/local/zookeeper/zk3/bin/zkServer.sh start
8、启动出现问题
a、检查配置文件,各个目录是否正确,是否在对应目录设置了myid
b、检查防火墙是否开启
五、ZK基本命令
# 启动
/usr/local/zookeeper/zk1/bin/zkServer.sh start
# 查看状态 leader 主 follower 从
/usr/local/zookeeper/zk1/bin/zkServer.sh status
# 关闭
/usr/local/zookeeper/zk1/bin/zkServer.sh stop
# 进入客户端
/usr/local/zookeeper/zk1/bin/zkCli.sh -server {host}:2181