官网:Apache ZooKeeper
什么是Zookeeper?
ZooKeeper是一个集中服务,用于维护配置信息、命名、提供分布式同步和组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实施它们时,都要进行大量的工作来修复不可避免的bug和竞争条件。由于实现这类服务的困难,应用程序最初通常会对它们进行精简,这使得它们在发生变化时变得脆弱,并且难以管理。即使操作正确,在部署应用程序时,这些服务的不同实现也会导致管理复杂性。
ZooKeeper的目标是将这些不同服务的精髓提炼为一个非常简单的接口,从而实现集中式协调服务。服务本身是分布式的,并且高度可靠。共识、组管理和存在协议将由服务实现,因此应用程序不需要自己实现它们。特定于应用程序的这些使用将由Zoo Keeper的特定组件和特定于应用程序的约定的混合组成。
zookeeper的特性
- 顺序性:数据按照顺序分批入库
- 原子性:事务中数据的操作要么全部成功,要么全部失败,不会局部化(部分成功部分失败)
- 一致性:客户端连接集群中的任一zk节点,数据都是一致性。
- 可靠性:每次对zk的操作状态都会保存在服务端
- 实时性:客户端可以读取到zk服务端的最新数据
zookeeper的安装
下载地址:https://zookeeper.apache.org/releases.html
注意:需要JDK1.8+
将下载的 zookeeper 安装包上传到 linux 环境的 /usr/local 目录,进行tar -zxvf 解压缩
配置 zookeeper 环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.8.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin
source /etc/profile
zookeeper的目录结构介绍
bin:zookeeper的操作命令目录
conf:存放配置文件,其中我们需要修改zoo_sample.cfg文件
docs:帮助文档目录
lib:依赖jar包目录
zookeeper配置文件zoo_sample.cfg
配置时请 copy 重命名为 zoo.cfg 文件
# 每一次滴答的毫秒数,滴答:zookeeper基本时间单元
tickTime=2000# 初始同步阶段可以执行的滴答数,用于集群,配置主节点等待从节点启动并完成数据同步的时间,以 tickTime 的倍数来表示,默认是10 那么就是 10*tickTime
initLimit=10# 在发送请求和获得确认之间可以经过的滴答数,用于集群,配置 主节点 与 从节点 之间心跳检测的最大时间长度,默认值是 5,也就是 5*tickTime
syncLimit=5# zookeeper服务存储快照目录,必须配置,不能配置在/tmp目录下,该目录下的文件会被自动删除
dataDir=/usr/local/zookeeper-3.8.0/dataDir
# 日志目录,如果不配置会共用dataDir目录
dataLogDir=/usr/local/zookeeper-3.8.0/dataLogDir
# 客户端连接的端口,服务器对外暴露的端口,默认 2181
clientPort=2181
zookeeper启动
进入 zk 的 bin 目录下,使用 ./zkServer.sh start 启动
# 启动 zk,其他参数有 {start|start-foreground|stop|version|restart|status|print-cmd}
./zkServer.sh start