什么是ZooKeeper
Zookeeper是一个维护配置信息、命名、提供分布式同步和提供群组服务的集中式服务。这些各种类型的服务以某种形式被分布式应用程序使用。每当应用程序实现这些服务都不可避免的引入大量的修复BUG和竞争条件的工作。因为实现这些服务的难度在于应用最初通常跳过它们,使应用程序在发生变化时不易维护并难以管理。即使做对了,当应用程序已经部署后,不同服务的实现也将会导致管理的复杂性。
Zookeeper是一个高性能的分布式系统的协调服务。它暴露公共的服务:像命名、配置管理、同步、和群组服务在一个简单的接口里,所以你没有必要从头开始实现它们。你可以使用现成的Zookeeper去实现共识、群组管理、领导人选举和业务协议。并且你可以在它的基础之上建立自己的特定的需求。
前置要求
需要安装JDK
下载ZooKeeper
wget http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.9.3.tar.gz
解压
解压到 /opt/ 目录下
tar -zxvf zookeeper-3.4.5-cdh5.9.3.tar.gz -C /opt/
配置ZooKeeper环境变量
vim ~/.bash_profile
将以下内容粘贴进去
export ZK_HOME=/opt/zookeeper-3.4.5-cdh5.9.3
export PATH=$ZK_HOME/bin:$PATH
使环境变量生效
source ~/.bash_profile
配置文件
进入配置文件目录
cd $ZK_HOME/conf
复制一份zoo_sample.cfg,并命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
打开zoo.cfg修改数据存储目录
dataDir=/opt/zookeeper-3.4.5-cdh5.9.3/dataLog
在 /opt/zookeeper-3.4.5-cdh5.9.3 目录下分别创建 dataLog 文件夹
zoo.cfg配置解释
- tickTime: 用于计算的的时间单元。比如session超时: N*tickTime
- initLimit: 用于集群,允许从单节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
- syncLimit: 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)
- dataDir: 必须配置
- dataLogDir: 日志目录,如果不配置会与dataLog公用
- clientPort: 连接服务器的端口,默认2181
启动ZooKeeper
$ZK_HOME/bin/zkServer.sh start
zkServer.sh用法
./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
客户端连接ZooKeeper
$ZK_HOME/bin/zkCli.sh -server 127.0.0.1:2181