概述:为什么要用zookeeper?Centos安装配置zookeeper。zookeeper实际应用场景主要有4种。java+dubbo+zookeeper实现分布式服务。原文地址:http://www.maoyupeng。com/how-to-install-zookeeper-on-centos6.htmlzookeeper的实际应用场景摘自夏林的博文 场景一:有一组服务器,为客户端提供某些服务(例如:我之前做的分布类型网站的服务器端是由四台服务器组成的集群,为前端集群提供服务),我们希望客户端每次请求服务器时都能在服务器集群中找到一台服务器,这样服务器端就可以为客户端提供客户端所需要的服务。对于这种场景,我们的程序必须有一个这组服务器的列表,每次客户端请求时,都会从这个列表中读取这个服务器列表。那么这个子列表显然不能存放在单节点服务器上,否则节点挂掉,整个集群就挂掉了。我们希望这个列表是高度可用的。高可用的方案是:这个列表是分布式存储的,由存储这个列表的服务器共同管理。如果存储列表中的某台服务器发生故障,其他服务器可以立即替换坏掉的服务器,并将坏掉的服务器从列表中删除,使发生故障的服务器退出整个集群的运行,所有这些操作都不会发生由故障服务器执行,但由集群中的正常服务器执行。这是一种主动的分布式数据结构,是一种在外部条件发生变化时能够主动修改数据项状态的数据组织。Zookeeper框架提供了这个服务。这个服务的名字是:UnifiedNamingService,很像javaEE中的JNDI服务。 场景二:分布式锁服务。当分布式系统对数据进行操作时,例如:读取数据,分析数据,最后修改数据。在分布式系统中,这些操作可能会分布到集群中的不同节点,所以此时数据操作过程存在一致性问题。如果它们不一致,我们将得到错误的计算结果。在单进程程序中在分布式系统中,一致性问题很容易解决,但是在分布式系统中比较难,因为分布式系统中不同服务器的计算都是在独立的进程中,中间结果而且计算的过程要通过网络传输,数据操作的一致性就更难实现了。Zookeeper提供了锁服务来解决这个问题,让我们在做分布式数据操作的时候可以保证数据操作的一致性。 场景三:配置管理。在分布式系统中,我们会分别部署一个服务应用到n台服务器上,这些服务器的配置文件都是相同的(例如:我设计的分布式网站框架中,服务器端有4台服务器,4个程序服务器上的都是一样的,配置文件也是一样的),如果配置文件的配置选项改变了,那我们就得一个一个的改这些配置文件,如果需要改的服务器少,这些操作就不用了太麻烦了,如果我们有很多分布式服务器,比如一些大型互联网公司在Hadoop集群中有几千台服务器,那么更改配置选项是一件麻烦且危险的事情。这时候zookeeper就可以派上用场了。我们可以把zookeeper看成一个高可用的配置存储,把这样的东西交给zookeeper管理。我们将集群的配置文件复制到zookeeper的文件系统中的一个节点。然后使用zookeeper监控所有分布式系统中配置文件的状态。一旦发现某个配置文件发生变化,每个服务器都会收到zookeeper的通知,让每个服务器同步zookeeper中的配置文件,zookeeper服务也会保证同步操作的原子性,保证每个服务器的配置文件可以被正确更新。 场景四:为分布式系统提供故障恢复功能。集群管理非常困难。在分布式系统中加入zookeeper服务,可以让我们轻松管理集群。集群管理中最头疼的就是节点故障管理。Zookeeper可以让集群选择一个健康的节点作为master。主节点会知道当前集群中每台服务器的运行状态。一旦某个节点出现故障,Master会上报情况,通知集群中的其他服务器重新分配计算任务到不同的节点上。Zookeeper不仅可以发现故障,还可以对故障服务器进行筛选,看故障服务器是什么故障。如果故障可以修复,zookeeper可以自动修复或者告诉系统管理员错误原因,便于管理员快速定位问题。修复节点故障。大家可能还有一个疑问,师傅有毛病,怎么办?Zookeeper也考虑到了这一点。zookeeper内部有一个“选举领导者的算法”。master可以动态选择。当master出现故障时,zookeeper可以立即选择一个新的master来管理集群。我用的zookeeper和场景一比较相关。这里就不介绍zookeeper了。有兴趣的朋友可以自行了解。下面我们就来看看下面的内容,学习如何安装zookeeper.....安装准备修改操作系统的hosts查看本地ip,记住ip给hosts增加一条记录,如下图,我的ip是10.211.55.27#edithostsvim/etc/hosts#修改前127.0.0.1localhost::1localhost#修改后127.0.0.1localhost#添加一行,[ipname],给它起个名字:mao-10110.211.55.27mao-101::1localhost下载zookeeperzookeeper-3.4.6版本百度云盘下载:http://pan.baidu.com/s/1miwdKRA安装配置解压zookeeper文件上传下载的zookeeper-3.4.6。tar.gz安装文件到服务器/home目录,解压后进入根目录创建data文件夹和logs文件夹cd/hometar-zxvfzookeeper-3.4.6.tar.gzcdzookeeper-3.4.6mkdirdatamkdirlogs配置zoo.cfg文件到conf目录下,重命名或复制一份zoo_sample.cfg,命名为zoo.cfg#renamecd/home/zookeeper-3.4.6/conf/&&mvzoo_sample.cfgzoo.cfg#copycd/home/zookeeper-3.4.6/conf/&&cpzoo_sample.cfgzoo.cfgmodifyzoo.cfgconfigurationtickTime=2000initLimit=10syncLimit=5#指向zookeeper目录下的data目录dataDir=/home/zookeeper-3.4.6/data#添加日志目录dataLogDir=/home/zookeeper-3.4.6/logsclientPort=2181#添加服务通信端口和程序通信端口#mao-101我们在hosts中配置了server.1=mao-101:2888:3888创建myid文件在配置文件中,在dataDir配置的目录下,创建myid文件,内容为1cd/home/zookeeper-3.4.6/datavimmyid#添加内容:1保存退出vim1增加zookeeper环境变量编辑文件/etc/profile,添加如下内容:exportZOOKEEPER_HOME=/home/zookeeper-3.4.6exportPATH=$ZOOKEEPER_HOME/bin:$PATH立即生效source/etc/profile打开防火墙端口sudosuchkconfigiptablesonserviceiptablesstart#Editiptablesvim/etc/sysconfig/iptables#添加以下内容-AINPUT-mstate--stateNEW-mtcp-ptcp--dport2181-jACCEPT-AINPUT-mstate--stateNEW-mtcp-ptcp--dport2888-jACCEPT-AINPUT-mstate--stateNEW-mtcp-ptcp--dport3888-jACCEPT#重启防火墙查看端口状态serviceiptablesrestart#状态如下图serviceiptablesstatustestzkServer.shstart#输出QuorumPeerMain证明启动成功jpsaddzookeeperboot//切换到init.d目录cd/etc/rc.d/init.d//创建zookeeper文件并更新权限touchzookeeper&&chmod+xzookeeper//编辑zookeeper文件,添加以下内容vimzookeeper====下面是文件内容=====#!/bin/bash#chkconfig:23452090#description:zookeeper#processname:zookeeperexportJAVA_HOME=/usr/local/jdk7exportPATH=$JAVA_HOME/bin:$PATHcase$1instart)suroot/home/zookeeper-3.4.6/bin/zkServer.shstart;;停止)suroot/home/zookeeper-3.4.6/bin/zkServer.sh停止;;状态)suroot/home/zookeeper-3.4.6/bin/zkServer.sh状态;;重启)suroot/home/zookeeper-3.4.6/bin/zkServer.shrestart;;*)echo"requirestart|stop|status|restart";;esac//添加启动chkconfigzookeeperonchkconfig--addzookeeper//启动或停止服务zookeeperstart|停止|重新开始
