Dubbo项目实战 (二) 注册中心zookeeper-3.4.6集群以及高可用
zookeeper是什么
百度定义:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。通俗一点理解可以认为他可以服务管理集群、管理集群服务器中配置信息,这两点是我们在项目中最常用的两个特点,其中对每个服务实例中的配置文件维护非常繁琐,因此会引入配置服务器来维护配置除此之外还有日志服务器等,免去了我们为了解决一个小bug而去查找好几G的日志文件。
主要作用
在分布式SOA开发中我们要有种这样的认识:对于某一个服务是集群提供给消费者的,而不是一个特定的机器。
因此必须有一种机制来发现判断哪些节点可以提供服务,换句话说就是当消费者访问时一个服务时,判断出哪些服务可以使用,如果两个或者两个以上服务可以使用,还必须根据调用算法,合理的调用服务接口。
既然每个服务都不是简单的部署在一台电脑上面,可能部署了多个节点多个机器,为的就是避免某一个服务压力过大或其他原因宕机时,仍然保证7*24小时不间断服务;
如果公司业务扩展非常快访问数量在急剧增长,可以支持动态增加后台服务节点来适用压力的增长,也就是可伸缩性要好,zookeeper可以完美的解决这些问题,这也是很多公司倾向于使用它来作为服务注册发现调度框架。
它的名字服务就比如JNDI为我们提供的命名目录服务,为我们访问某一个特定的资源指定了一个别人,在以后适用起来通过这个别人就可以拿到我们所需资源。
开发项目的我们都知道每个项目里都会有很多的配置文件,例如大家最熟悉的连接数据库信息、日志打印格式方式、属性文件等等,在非分布式环境中常常一个项目部署一台机器即可,修改配置文件只需要在一台机器上面改一下;如果到了分布式项目一个服务就需要配置好几台机器多的话可能十几台、数百台、上千台、如果到了上万台服务,这项工作量可想而知,光改一个小小的配置文件就需要改好几天而且非常容易改错,这种事情zookeeper可以帮我们管理配置文件,并且可以做到改了zookeeper配置其它服务节点自动更新的热部署能力,在分布式中它发挥的作用还是很大的。
我们公司在管理配置文件时并没有使用zookeeper的配置管理,不知道为啥?可能单独引入一个框架会好用一些,使用的百度的disconf来统一管理配置信息,从资料和使用的效果来看还是比较简单的容易上手。
安装实例
由于机器有限这里我安装了一下伪分布式集群,公司在开发以及测试环境搭建的也是伪分布式模式,感觉和真正分布式集群其实是一样的没有多少区别,安装方式步骤几乎也一模一样,下面是安装的基本步骤。
1.安装jdk 1.6以上,我们公司安装的1.7,如
2. 下载zookeeper-3.4.6.tar.gz , 输入命令 tar -zxvf 解压,创建如下目录结构:
3. 进入conf目录,将example.zoo.cfg复制并改名为zoo.cfg,zoo.cfg内容如下图
说明:上图红框框起来的表示需要修改的地方,第一处为数据、日志目录;
第二处为客户端连接此zookeeper服务的端口,由于三个实例在一个机器所以需要修改;
第三处为zookeeper服务之间需要相互访问的IP、Port、选举Port,如果只有一个实例不需要互相通信就不需要配置这个信息。关于各个参数含义网上很多。
4. 在zookeeper-01/下面创建data、logs两个目录,并在data文件夹中建一个文件名为myid,内容为数字的文件,(数字与server.*)中*一致,可以使用命令:echo 1 > myid。意思是先将1输出到屏幕,然后读入到myid文件,不存在文件则创建。
5. 将zookeeper-01复制三份,分别改名为02 、03,对应端口改为2181、2183,然后,分别进入bin目录启动,即可完成安装。
注意在部署的时候一般部署奇数台,因为部署2n与2n-1台宕机之后他们的集群稳定性是一样的,就没有必要多部署一台了。
部署架构
安装完之后的部署架构如下图:
zookeeper是作为一个小的集群对外面提供服务,主要用来协调右下角的消费者与左下角的服务之间的调用关系,通过dubboe-admin控制台可以实时监测server-01/02是否工作正常,
总结
注册中心组成分布式框架的一部分,起着承上起来的连接协调作用,虽然不是服务的真正实现者但也不容忽视,感觉在分布式框架中已经不再仅仅关心服务的实现层面,除了服务实现还有服务管理、性能、事务等都是我们需要考虑的问题,分布式服务开发可以说对一个开发人员的素质要求也是高的,然后,大部分人习惯了实现代码忽略了整体架构,关心的东西多了慢慢就会了解架构就是架构师,有时一个人关心的决定了他将要成为什么样的角色、什么样的人。