构建高可用ZooKeeper集群
	  ZooKeeper是Apache的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于ZooKeeper便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如Hadoop、HBase、Kafka和Dubbo等大型分布式系统中。
	  本文的目标读者是对ZooKeeper有一定了解的技术人员,将从ZooKeeper运行模式、集群组成、容灾和水平扩容四方面逐步深入,最终构建出高可用的ZooKeeper集群。
	  一、运行模式
	  Zookeeper有三种运行模式:单机模式、伪集群模式和集群模式。
	  单机模式
	  这种模式一般适用于开发测试环境,一方面我们没有那么多机器资源,另外就是平时的开发调试并不需要极好的稳定性。
	  在Linux环境下运行单机模式需要执行以下步骤:
	  1、准备Java运行环境
	  安装Java1.6或更高版本的JDK,并配置好Java相关的环境变量$JAVA_HOME。
	  2、下载ZooKeeper安装包
	  下载地址:http://zookeeper.apache.org/releases.html。选择最新的stable版本并解压到指定目录,我们用$ZK_HOME表示该目录。
	  3、配置zoo.cfg
	  首次使用ZooKeeper,需要将$ZK_HOME下的zoo_sample.cfg文件重命名为zoo.cfg,并进行以下配置:
	  tickTime=2000##Zookeeper最小时间单元,单位毫秒(ms),默认值为3000
	  dataDir=/var/lib/zookeeper##Zookeeper服务器存储快照文件的目录,必须配置
	  dataLogDir=/var/lib/log##Zookeeper服务器存储事务日志的目录,默认为dataDir
	  clientPort=2181##服务器对外服务端口,一般设置为2181
	  initLimit=5##Leader服务器等待Follower启动并完成数据同步的时间,默认值10,表示tickTime的10倍
	  syncLimit=2##Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,表示tickTime的5倍
	  4、启动服务
	  使用$ZK_HOME/bin目录下的zkServer.sh脚本进行服务的启动。
	  集群模式
	  一个ZooKeeper集群通常由一组机器组成,一般3台以上就可以组成一个可用的ZooKeeper集群了。
	  组成ZooKeeper集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。
	  重要的一点是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
	  ZooKeeper的客户端程序会选择和集群中的任意一台服务器创建一个TCP连接,而且一旦客户端和服务器断开连接,客户端就会自动连接到集群中的其他服务器。
	  那么如何运行ZooKeeper集群模式呢?首先假如我们有三台服务器,IP分别为IP1、IP2和IP3,则需要执行以下步骤:
	  1、准备Java运行环境(同上)
	  2、下载ZooKeeper安装包(同上)
	  3、配置zoo.cfg
	  tickTime=2000
	  dataDir=/var/lib/zookeeper
	  dataLogDir=/var/lib/log
	  clientPort=2181
	  initLimit=5
	  syncLimit=2
	  server.1=IP1:2888:3888
	  server.2=IP2:2888:3888
	  server.3=IP3:2888:3888
	  可以看到,相比于单机模式,集群模式多了server.id=host:port1:port2的配置。
	  其中,ID被称为ServerID,用来标识该机器在集群中的机器序号(在每台机器的dataDir目录下创建myid文件,文件内容即为该机器对应的ServerID数字)。host为机器IP,port1用于指定Follower服务器与Leader服务器进行通信和数据同步的端口,port2用于进行Leader选举过程中的投票通信。
	  4、创建myid文件,在dataDir目录下创建名为myid的文件,在文件第一行写上对应的ServerID。
	  5、按照相同步骤,为其他机器配置zoo.cfg和myid文件。
	  6、启动服务
	  伪集群模式
	  这是一种特殊的集群模式,即集群的所有服务器都部署在一台机器上。当你手头上有一台比较好的机器,如果作为单机模式进行部署,就会浪费资源,这种情况下,ZooKeeper允许你在一台机器上通过启动不同的端口来启动多个ZooKeeper服务实例,以此来以集群的特性来对外服务。
	  这种模式下,只需要把zoo.cfg做如下修改:
	  tickTime=2000
	  dataDir=/var/lib/zookeeper
	  dataLogDir=/var/lib/log
	  clientPort=2181
	  initLimit=5
	  syncLimit=2
	  server.1=IP1:2888:3888
	  server.2=IP1:2889:3889
	  server.3=IP1:2890:3890
                    	
                    	
                    	  
                    	    
                    	    
                    	    
                    	 
    如果您觉得本文的内容对您的学习有所帮助:
     
                    	
                    	   
                    	   关键字:
html