Zookeeper介绍
Zookeeper 是一个基于 Google Chubby 论文实现的一款解决分布式数据一致性问题的开源实现,方便了依赖 Zookeeper 的应用实现 数据发布 / 订阅、负载均衡、服务注册与发现、分布式协调、事件通知、集群管理、Leader 选举、 分布式锁和队列 等功能
Zookeeper下载
1 | [root@localhost cloud]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz |
配置说明:
Zookeeper配置目录
zookeeper的安装配置目录在zookeeper-x.x.x/conf/目录下.zookeeper脚本目录
zookeeper的启停脚本目录在zookeeper-x.x.x/bin/目录下.(.sh和.cmd分布适用于unix系统和windows系统)
脚本 | 说明 |
---|---|
zkCleanup | 清理Zookeeper历史数据, 包括事务日志文件和快照数据文件 |
zkEnv | 设置Zookeeper的环境变量 |
zkServer | Zookeeper服务器的启动、停止、重启脚本 |
zkCli | Zookeeper的命令行客户端 |
单机环境搭建
zookeeper安装配置大致分为两个步骤: 配置服务器标识文件 和 修改配置zoo.cfg文件.
创建服务器标识文件
1 | [root@localhost cloud]# pwd |
示例中我们创建了一个目录/export/cloud/zookeeper-3.3.6/data
, 该目录为Zookeeper的数据存储目录, 并在该目录下创建了一个myid文件, 文件写入内容1
,用来标识当前实例的标识值为1.
修改zoo.cfg文件并启动
zookeeper的配置文件在zookeeper-x.x.x/conf
目录下,默认的示例文件名为zoo_sample.cfg
1 | [root@localhost cloud]# cd zookeeper-3.3.6/conf/ |
示例中只是修改了dataDir路径为我们上一步创建的数据存储目录/opt/zookeeper-3.4.9/data
, 并增加了一个服务通讯标识server.1=127.0.0.1:2888:3888
.
参数说明:
- tickTime: 用来指示服务器之间或客户端与服务器之间维护心跳机制的最小时间单元,Session最小过期时间默认为两倍的tickTime.
- initLimit: 集群中的Leader节点和Follower节点之间初始连接时能容忍的最多心跳数.
- syncLimit: 集群中的Leader节点和Follower节点之间请求和应答时能容忍的最多心跳数.
- dataDir: Zookeeper保存服务器存储快照文件的目录(默认目录:/tmp/zookeeper)
- dataLogDir: 用来存储服务器事务日志
- clientPort: 客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求(默认:2181)
启动Zookeeper
1 | [root@localhost cloud]# pwd |
访问Zookeeper
1 | [root@localhost cloud]# zookeeper-3.3.6/bin/zkCli.sh |
伪集群环境搭建
伪集群采用一台机器多个示例的方式搭建
数据存储目录和服务ID配置
机器 | 数据存储目录 | 服务ID标识文件 | 服务ID标识值 | 客户端通讯端口 | 集群内主从通讯端口 | 集群内Lead选举端口 |
---|---|---|---|---|---|---|
127.0.0.1 | zookeeper-3.3.6-node1/data | zookeeper-3.3.6-node1/data/myid | 1 | 2181 | 2887 | 2888 |
127.0.0.1 | zookeeper-3.3.6-node2/data | zookeeper-3.3.6-node2/data/myid | 2 | 2182 | 2888 | 3888 |
127.0.0.1 | zookeeper-3.3.6-node3/data | zookeeper-3.3.6-node3/data/myid | 3 | 2183 | 2889 | 3889 |
Zookeeper节点文件配置
节点1 “/export/cloud/zookeeper-3.3.6-node1/conf/zoo.cfg”的配置
1 | tickTime=2000 |
节点2 “/export/cloud/zookeeper-3.3.6-node2/conf/zoo.cfg”的配置
1 | tickTime=2000 |
节点3 “/export/cloud/zookeeper-3.3.6-node3/conf/zoo.cfg”的配置
1 | tickTime=2000 |
集群访问
分别启动三个节点,示例展示在节点2上进行集群状态监测和访问
1 | [[root@localhost cloud]# zookeeper-3.3.6-node2/bin/zkServer.sh status |
集群环境搭建
zookeeper的集群环境基本和单机搭建思路一致.各台机器上部署一份zookeeper示例, 配置各自的服务标识ID, 在zoo.cfg中配置统一的服务标识集合.
假设集群中有3台机器: 172.30.12.197
,172.30.12.198
,172.30.12.199
数据存储目录和服务ID配置
机器 | 数据存储目录 | 服务ID标识文件 | 服务ID标识值 | 客户端通讯端口 | 集群内主从通讯端口 | 集群内Lead选举端口 |
---|---|---|---|---|---|---|
172.30.12.197 | zookeeper-3.3.6/data | zookeeper-3.3.6/data/myid | 1 | 2181 | 2888 | 3888 |
172.30.12.198 | zookeeper-3.3.6/data | zookeeper-3.3.6/data/myid | 2 | 2181 | 2888 | 3888 |
172.30.12.199 | zookeeper-3.3.6/data | zookeeper-3.3.6/data/myid | 3 | 2181 | 2888 | 3888 |
Zookeeper节点文件配置
三台机器实例采用同样的配置
1 | tickTime=2000 |
连接到集群
1 | [root@localhost cloud]# zookeeper-3.3.6/bin/zkCli.sh -server 172.30.12.197:2181,172.30.12.198:2181,172.30.12.199:2181 |
Zookeeper四字短语
ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。
命令 | 功能描述 | 使用示例 |
---|---|---|
conf | 输出相关服务配置详情信息 | [root@localhost cloud]# echo conf | nc localhost 2181 |
cons | 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。 | [root@localhost cloud]# echo cons | nc localhost 2181 |
dump | 列出未经处理的会话和临时节点(只在leader上有效) | [root@localhost cloud]# echo dump | nc localhost 2181 |
envi | 输出关于服务环境的详细信息 | [root@localhost cloud]# echo envi | nc localhost 2181 |
reqs | 列出未经处理的请求 | [root@localhost cloud]# echo reqs | nc localhost 2181 |
ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。 | [root@localhost cloud]# echo ruok | nc localhost 2181 |
stat | 输出关于性能和连接的客户端的列表 | [root@localhost cloud]# echo stat | nc localhost 2181 |
wchs | 列出服务器 watch 的详细信息。 | [root@localhost cloud]# echo wchs | nc localhost 2181 |
wchc | 通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。 | [root@localhost cloud]# echo wchc | nc localhost 2181 |
wchp | 通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。 | [root@localhost cloud]# echo wchp | nc localhost 2181 |
srvr | 输出服务器的详细信息。zk版本、接收/发送包数量、连接数、模式(leader/follower)、节点总数 | [root@localhost cloud]# echo srvr | nc localhost 2181 |
srst | 重置服务器统计信息 | [root@localhost cloud]# echo srst | nc localhost 2181 |