zookeeper介绍及环境搭建

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

zookeeper功能介绍

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

  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.10七、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分别是一、二、3,follower服务器和leader服务器的通讯端口是2888,选取leader服务器投票时使用的端口是3888。除了增长zk集群的配置信息外,我还修改了dataDir配置项的目录地址。
图片描述spa

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

如今就已经完成了一个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集群。

相关文章
相关标签/搜索