01 ZooKeeper是什么

ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

02 ZooKeeper集群搭建

需要先安装配置好java环境

安装包下载地址:

https://archive.apache.org/dist/zookeeper/

选择stable稳定版本,目前是3.5.8的稳定版本

1、下载安装包

wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.8-bin.tar.gz

2、搭建三个集群节点,即三个ZooKeeper服务,新建三个文件夹

mkdir zookeeper1mkdir zookeeper2mkdir zookeeper3

3、将安装包复制到上述三个文件夹,分别解压

tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz

解压后的目录:

  • bin 执行脚本
  • conf 配置文件
  • docs 文档
  • lib jar包

4、进入conf目录,ZooKeeper提供了一个配置文件示例zoo_sample.cfg,复制该文件

cpzoo_sample.cfg zoo1.cfg

其余两个zookeeper文件夹中进行同样的操作,文件名改为zoo2.cfg,zoo3.cfg

该配置文件中共5个参数:

tickTime:通信心跳时间

服务器之间或客户端与服务器之间维持心跳的时间间隔,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。

initLimit:初始通信时限

集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数

syncLimit:同步通信时限

集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数

dataDir:数据文件目录

内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个 路径下,建议两个地址分开存放到不同的设备上

clientPort:客户端连接端口

zookeeper会监听这个端口,接收客户端的访问请求

需要修改的参数:

dataDir 数据文件目录,分别使用/tmp/zookeeper1,/tmp/zookeeper2,/tmp/zookeeper3

clientPort 客户端连接端口,每个zookeeper服务要启动在不同的端口,避免冲突,分别使用2181,2182,2183

需要增加的配置参数:server.x

server.1=127.0.0.1:3001:4001server.2=127.0.0.1:3002:4002server.3=127.0.0.1:3003:4003

这个三行配置在三个zookeeper配置中都是一样的,粘贴过去即可

该项配置的规则如下:

格式server.n=A:B:C

统一前缀,“server.”;

“server.”后面的数字n表示机器的id(序号),不重复,需要在dataDir目录下新建myid文件,写入这个值

A表示集群中zk机器的ip;

B表示Zk集群中,follower与leader通信的端口;

C表示当leader宕机时,各follower选举新leader的通信端口;

配置信息如下:

按上述表格所示在tmp文件夹下新建zookeeper1,zookeeper2,zookeeper3文件夹,创建myid文件并写入配置文件中server.n中的n的值到该文件

mkdir zookeeper1touch myidecho 1 > myid

其余两个做相同操作,myid值分别为2和3

配置完成,三个配置文件的内容如下:

zoo1.cfg

tickTime = 2000initLimit = 10syncLimit = 5dataDir = /tmp/zookeeper1clientPort = 2181 server.1 = 127.0.0.1:3001:4001server.2 = 127.0.0.1:3002:4002server.3 = 127.0.0.1:3003:4003

zoo2.cfg

tickTime = 2000initLimit = 10syncLimit = 5dataDir = /tmp/zookeeper2clientPort = 2182 server.1 = 127.0.0.1:3001:4001server.2 = 127.0.0.1:3002:4002server.3 = 127.0.0.1:3003:4003

zoo3.cfg

tickTime = 2000initLimit = 10syncLimit = 5dataDir = /tmp/zookeeper3clientPort = 2183 server.1 = 127.0.0.1:3001:4001server.2 = 127.0.0.1:3002:4002server.3 = 127.0.0.1:3003:4003

启动zookeeper服务

 ./zkServer.sh start /usr/zookeeper1/apache-zookeeper-3.5.8-bin/conf/zoo1.cfg./zkServer.sh start /usr/zookeeper2/apache-zookeeper-3.5.8-bin/conf/zoo2.cfg ./zkServer.sh start /usr/zookeeper3/apache-zookeeper-3.5.8-bin/conf/zoo3.cfg

注意:start后面要指定当前使用的配置文件

运行zookeeper命令行客户端

./zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

查看节点状态

./zkServer.sh status /usr/zookeeper2/apache-zookeeper-3.5.8-bin/conf/zoo2.cfg

2号节点为Leader节点,1,3号节点为follower节点

集群搭建完成

03 集群节点个数最好是奇数个

zookeeper有这样一个特性:

集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。

假设:一个集群有n个节点,宕机x个节点,那么要保证整个集群仍然可用就要满足不等式:n -x > n/2,即n > 2x
所以n可以取2x + m (m可以取1,2,3,4,5 …)
n的最小值是2x + 1

所以最节约服务器资源的配置是奇数个节点

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以加入我们的QQ群:746506216,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】