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