运维部署-Zookeeper

Zookeeper介绍

Zookeeper 是一个基于 Google Chubby 论文实现的一款解决分布式数据一致性问题的开源实现,方便了依赖 Zookeeper 的应用实现 数据发布 / 订阅、负载均衡、服务注册与发现、分布式协调、事件通知、集群管理、Leader 选举、 分布式锁和队列 等功能

Zookeeper下载

[root@localhost cloud]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
[root@localhost cloud]# tar -zxvd zookeeper-3.3.6.tar.gz
[root@localhost cloud]# tree zookeeper-3.3.6/conf/
zookeeper-3.3.6/conf/
├── configuration.xsl
├── log4j.properties
└── zoo_sample.cfg

0 directories, 3 files
[root@localhost cloud]# tree zookeeper-3.3.6/bin/
zookeeper-3.3.6/bin/
├── README.txt
├── zkCleanup.sh
├── zkCli.cmd
├── zkCli.sh
├── zkEnv.cmd
├── zkEnv.sh
├── zkServer.cmd
└── zkServer.sh

0 directories, 8 files
复制代码

配置说明:

  • 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文件.

创建服务器标识文件

[root@localhost cloud]# pwd
/export/cloud
[root@localhost cloud]# cd zookeeper-3.3.6
[root@localhost zookeeper-3.3.6]# mkdir data
[root@localhost zookeeper-3.3.6]# echo 1 > data/myid
[root@localhost zookeeper-3.3.6]# cat data/myid
1
复制代码

示例中我们创建了一个目录/export/cloud/zookeeper-3.3.6/data, 该目录为Zookeeper的数据存储目录, 并在该目录下创建了一个myid文件, 文件写入内容1,用来标识当前实例的标识值为1.

修改zoo.cfg文件并启动

zookeeper的配置文件在zookeeper-x.x.x/conf目录下,默认的示例文件名为zoo_sample.cfg

[root@localhost cloud]# cd zookeeper-3.3.6/conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vim zoo.cfg
[root@localhost conf]# cat zoo.cfg
# 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.
dataDir=/export/cloud/zookeeper-3.3.6/data
# the port at which the clients will connect
clientPort=2181
# 配置sever1节点
server.1=127.0.0.1:2888:3888
复制代码

示例中只是修改了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

[root@localhost cloud]# pwd
/export/cloud
[root@localhost cloud]# zookeeper-3.3.6/bin/zkServer.sh start &
[root@localhost cloud]# zookeeper-3.3.6/bin/zkServer.sh status
JMX enabled by default
Using config: /export/cloud/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: standalone
复制代码

访问Zookeeper

[root@localhost cloud]# zookeeper-3.3.6/bin/zkCli.sh
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] create /zkEdu 123
Created /zkEdu
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, zkEdu]
[zk: localhost:2181(CONNECTED) 4] get /zkEdu
123
cZxid = 0x2
ctime = Wed Jan 10 18:02:05 CST 2018
mZxid = 0x2
mtime = Wed Jan 10 18:02:05 CST 2018
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
复制代码

伪集群环境搭建

伪集群采用一台机器多个示例的方式搭建

数据存储目录和服务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"的配置

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/cloud/zookeeper-3.3.6-node1/data
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
复制代码

节点2 "/export/cloud/zookeeper-3.3.6-node2/conf/zoo.cfg"的配置

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/cloud/zookeeper-3.3.6-node2/data
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
复制代码

节点3 "/export/cloud/zookeeper-3.3.6-node3/conf/zoo.cfg"的配置

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/cloud/zookeeper-3.3.6-node2/data
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
复制代码

集群访问

分别启动三个节点,示例展示在节点2上进行集群状态监测和访问

[[root@localhost cloud]# zookeeper-3.3.6-node2/bin/zkServer.sh status
JMX enabled by default
Using config: /export/cloud/zookeeper-3.3.6-node2/bin/../conf/zoo.cfg
Mode: follower
[root@localhost cloud]# zookeeper-3.3.6-node2/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
复制代码

集群环境搭建

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节点文件配置

三台机器实例采用同样的配置

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/cloud/zookeeper-3.3.6/data
clientPort=2181
server.1=172.30.12.197:2888:3888
server.2=172.30.12.198:2888:3888
server.3=172.30.12.199:2888:3888
复制代码

连接到集群

[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

参考文档

猜你喜欢

转载自juejin.im/post/5dfb287df265da33dd2f5e7e