4

本文包含两个部分,首先是对zookeeper的一个简单介绍,之后会描述zookeeper集群搭建的详细过程,为以后的实验做准备。

zookeeper功能介绍

随着业务规模发展得越来越大,将所有的业务单元全部放到一个计算实体上已经不能满足业务发展的要求。按照不同的业务领域或功能职责将整个系统拆分成多个子系统,各个子系统通过网络进行协作共同完成一项任务,这就是分布式系统。
在分布式系统中,通常将一个计算任务分解成多个计算单元并分派到多个计算机中,然后对各个计算结果进行汇总得到最终结果。分布式系统需要解决的核心任务是如何把众多的计算机协同起来完成计算任务。如果多个计算机之间不能很好的协作,那么即使增加再多的计算设备,也不会提高计算性能,还可能会产生错误的结果。zookeeper可以帮助我们解决分布式系统中的协作问题。
zookeeper是源代码开放的分布式协调服务,是一个高性能的分布式数据一致性解决方案。它将那些复杂的、容易出错的分布式一致性服务封装起来。构成一个可靠的原语集,并提供一系列简单易用的接口给用户使用。
zookeeper可以解决下面这些分布式数据一致性问题:

  1. 顺序一致性。zk可以保证从一个客户端发起的一系列事务请求,会严格按照事务发起的顺序被应用到zk服务器中。
  2. 原子性。所有事务请求的处理结果,在整个集群中所有机器的应用情况是一致的。
  3. 单一视图。无论客户端连接的是集群中的哪个zk服务器,看到的数据都是一样的。
  4. 可靠性。一个事务所引起的服务端状态变更会一直保留下来,直到另外一个事务再对其进行修改。
  5. 实时性。zk保证在一段时间内客户端一定能从服务端读取到最新的数据状态。
  6. 高性能。zk具有很高的吞吐量,一个包含3节点的集群可以达到12W~13W的QPS。

我们可以通过调用zookeeper提供的接口解决分布式中遇到的实际问题。如:

  1. Naming service:按名称区分集群中的节点
  2. Configuration management
  3. Cluster management:实时感知集群中节点的增减
  4. Leader election
  5. Locking and synchronization
  6. Highly reliable data registry

zookeeper集群环境搭建

下面我将借助virtualbox虚拟机,在fedora linux平台上搭建一个3节点的zk集群,为接下来的zookeeper学习做准备。点击这里下载zookeeper。
如下图所示,我用virtualbox构建了三个fedora虚拟机,这三个虚拟机的ip分别是192.168.1.107、192.168.1.108和192.168.1.109。
图片描述

通过scp命令将下载好的zookeeper上传到3个虚拟机服务器中:
图片描述

使用命令tar -zxvf zookeeper-3.3.6.tar.gz解压软件,并用命令mv zookeeper-3.3.6 zookeeper对解压后的目录重新命名。
图片描述

cd进入到zookeeper目录下的conf目录中,里面包含了一个zookeeper的样例配置文件——zoo_sample.cfg。不要直接修改zoo_sample.cfg的内容,在其基础上拷贝一份新的文件zoo.cfg作为zookeeper的配置文件。
图片描述

下面是zookeeper默认配置文件的内容:
图片描述

其中dataDir是zookeeper服务器存储快照文件的目录,clientPort是zookeeper服务器对外提供的端口号。其它配置项我们后续再做解释。
除了基本的配置项外,要配置zookeeper的集群,还需要在配置文件中增加所有zk服务器节点的信息。zk服务器节点的配置项格式:server.id=host:aport:bport。其中id是一个整数,代表一个zk服务器的id。host是zk服务器的ip地址。aport是follower服务器和leader服务器的通信端口。bport是在选举leader服务器投票过程中的通信端口。
我这里配置的zk集群共有3个节点,配置信息如下图所示。其中三台zk服务器的id分别是1、2、3,follower服务器和leader服务器的通信端口是2888,选取leader服务器投票时使用的端口是3888。除了增加zk集群的配置信息外,我还修改了dataDir配置项的目录地址。
图片描述

完成上述配置之后还要到dataDir配置项指定的目录中新建一个myid文件,myid文件的内容就是zk集群配置中指定的服务器id。例如对于192.168.1.109这台机器,它的id是1,那么它的myid文件中的内容就是1。另外两台机器的myid文件内容分别是2和3。
图片描述

现在就已经完成了一个zk集群的所有配置,可以启动zk服务器了。使用zookeeper下bin目录中的zkServer.sh脚本执行启动命令。./zkServer.sh start为启动zk服务器,./zkServer.sh stop为停止zk服务器。
图片描述

为了验证zk集群是否启动成功,我们可以通过telnet这个工具进行验证,使用它的stat命令可以查看zk服务器的状态。
图片描述

从stat命令的输出结果中可以看出,这个zookeeper实例没有对外提供服务。这是因为我们的zk集群中一共有3个节点,但是目前才只启动了一个节点。现在我们再启动另外一个zk节点看看执行结果。
图片描述

我又启动了另外一个zk服务器,现在zk集群中已经有2个存活的zk服务器节点了。可以看到stat的输出结果发生了变化,192.168.1.109这个zk节点已经可以对外提供服务了。在一个zk集群中,只要有超过一半的zk节点可以正常工作,那么整个集群就可以正常对外提供服务。因为我们这个集群一共有3台机器,目前已经有2台机器正常工作,已经超过了半数,所以整个集群可以正常对外提供服务。
到此为止,我们就配置好了一个简单的zk集群。


poype
428 声望79 粉丝