文档章节

zookeeper+dubbo分布式环境搭建部署记录

xiejunbo
 xiejunbo
发布于 2016/09/23 23:55
字数 1319
阅读 1008
收藏 12

     

最近在公司用到阿里的dubbo做RPC分布式服务化,记录一下项目服务环境搭建的一些过程,方便后来的同行可以少走些弯路,欢迎大家一起交流分享。

一、环境准备

6台机器如下:

用到的软件如下:

jdk-7u79-linux-x64.rpm、zookeeper-3.3.6-2181、apache-tomcat-7.0.57.tar.gz、dubbo-admin.war。

说明:zookeeperA、zookeeperB、zookeeperC上都安装jdk-7u79-linux-x64.rpm和zookeeper-3.3.6-2181。

tomcat(dubbo-provider)、tomcat(dubbo-consumer)、tomcat(dubbo-admin) 上都安装jdk-7u79-linux-x64.rpm、apache-tomcat-7.0.57.tar.gz。

在tomcat(dubbo-provider)这台机器上部署web-provider服务化的接口。

在tomcat(dubbo-consumer)上部署web-consumer服务消费的项目。

dubbo-provider和dubbo-consumer都可以分别集群化部署,增强服务的安全性和健壮性等。

tomcat(dubbo-admin)  部署dubbo的管理后台dubbo-admin.war

========================================================================

二、zookeeper分布式集群安装配置

(zookeeper服务器最好是奇数个,因为选举时以过半数即通过)

在zookeeperA上操作:

# cd zookeeper-3.3.6-2181/conf

# mv zoo_sample.cfg  zoo.cfg

# vi zoo.cfg

修改配置为如下:

其中server.A=B:C:D的A是集群节点ID,B是机器IP或域名,C是节点数据交互端口,D是重新选举时用的选举端口。还有dataDir不能用相对地址,不然会导致zookeeper启动失败,而且dataDir对应的目录必须存在。

在zookeeper根目录下创建数据目录data

#mkdir ../data

在数据目录data下新建服务器id文件myid

# vi myid

写入服务器集群标识符号:103  并保存。

在zookeeperB、zookeeperC上做zookeeperA同样的操作,唯一不同的是设置myid文件值分别为104、105.

在zookeeperA、zookeeperB、zookeeperC上安装配置完后,分别启动zookeeper:

zookeeper常用命令:

./zkServer.sh start   启动zookeeper服务

./zkServer.sh stop   停止zookeeper服务

./zkServer.sh restart  重启zookeeper服务

./zkServer.sh status  查看zookeeper服务启动状态

./zkCli.sh -server ${leader_address}:2888   连接进入zookeeper客户端命令行,${leader_address}必须是leader

如下:

========================================================================

三、dubbo-provider服务提供者

这里的provider是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构如下:

注:一定要把服务提供方的需要暴露的接口CountService.java单独打成jar包,导入到服务消费方。

dubbo关键依赖包:

spring依赖包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar

关键配置spring-provider.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd


        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true">

	<bean id="countService" class="com.web.service.impl.CountServiceImpl"/>
    <!--提供方应用名,用于计算依赖关系,不是匹配条件,不要与消费方一样 -->
    <dubbo:application name="${dubbo.name}"/> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/>      
 	<dubbo:protocol name="dubbo" port="2888" /> 
    <!-- ============================对外暴露提供调用的服务 ==============================-->
    <dubbo:service interface="com.web.service.CountService" ref="countService" />  


</beans>

========================================================================

四、dubbo-consumer服务消费者

这里的consumer也是用springmvc+spring+mybatis+mysql搭建的项目,spring中整合了dubbo,项目结构如下:

dubbo关键依赖包:

spring依赖包,netty-3.2.10.Final.jar,dubbo-2.5.3.jar,javassist-3.9.0.GA.jar,zkclient-0.1.jar,zookeeper-3.4.6.jar

关键配置spring-consumer.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd


        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-lazy-init="true">


    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="${dubbo.name}"/>       <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/>        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->

    <!-- ============================begin User Module ==============================-->
    <dubbo:reference id="countService" interface="com.web.service.CountService" timeout="5000" check="false"/>

消费形式可以直接在控制层或服务层直接调用provider提供的远程方法,RPC远程过程调用。

========================================================================

五、dubbo-admin服务管理后台

下载dubbo-admin,  http://download.csdn.net/detail/x1j2b3/9645686

直接解压并修改WEB-INF下的dubbo.properties为:

dubbo.registry.address=zookeeper://192.168.1.104:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

重命名项目名为:ROOT,删除tomcat中webapp下默认的项目,把ROOT部署到tomcat,(注:tomcat8不兼容,只能是tomcat7或tomcat6).

然后在浏览器访问项目:http://192.168.1.107

在弹出框输入dubbo管理后台的账号密码即可登录如下:

可以看到刚刚部署上去的provider和consumer两个项目,这个控制台可以做好些监控和管理。

========================================================================

六、项目测试

可以看到consumer直接调用provider的远程方法,可以成功返回数据。后面要扩展暴露多个服务可以直接在dubbo.xml配置文件里面配置,同时要调用多个服务也一样在consumer的dubbo.xml里面配置即可像本地方法一样调用远程方法。另外,provider和consumer可以分别做集群部署,提高可靠性和可用性。

 

 

© 著作权归作者所有

xiejunbo
粉丝 46
博文 149
码字总数 133634
作品 0
广州
后端工程师
私信 提问
加载中

评论(2)

xiejunbo
xiejunbo 博主

引用来自“qchycjj”的评论

<dubbo:registry protocol="zookeeper" address="${dubbo.address}"/>
想问一下 dubbo.address 的值是不是leader zookeeper 的值?
如果leader zookeeper 挂掉了,就是文章中的zookeeper://192.168.1.104:2181,
会发生什么?
是leader zookeeper值,如果leader挂掉不影响服务,consumer端保存了一份provider 的数据, 当provider有变动时, zookeeper会通知各个consumer请求zookeeper更新本地保存的数据
qchycjj
qchycjj
<dubbo:registry protocol="zookeeper" address="${dubbo.address}"/>
想问一下 dubbo.address 的值是不是leader zookeeper 的值?
如果leader zookeeper 挂掉了,就是文章中的zookeeper://192.168.1.104:2181,
会发生什么?
2017-01-07日总结

今天zookeeper大收货 1、zookeeper+dubbo的实现已经已基本掌握,可以实现分布式服务的部署。 2、zookeeper的环境下周用docker搭建起来

Master__C
2017/01/07
1
0
ZooKeeper分布式专题与Dubbo微服务入门

ZooKeeper分布式专题与Dubbo微服务入门 网盘地址:https://pan.baidu.com/s/1TN6BlftB2uvvyVR7IDmODQ 密码: e6zt 备用地址(腾讯微云):https://share.weiyun.com/5539X2S 密码:65b36i Zo...

人气王子333
2018/04/17
0
0
使用zookeeper+dubbo搭建的服务,在使用过程中出现“消费者调用生产者”的过程几乎每个小时的固定时间点都会出现几秒连接超过一千多毫秒的现象。

使用zookeeper+dubbo搭建的服务,在使用过程中出现“消费者调用生产者”的过程几乎每个小时的固定时间点都会出现几秒连接超过一千多毫秒的现象。这个跟用户量多少没关系,很少的用户也会出现...

lgf_
01/28
252
1
架构师必备词汇和知识点

01 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机...

t4i2b10X4c22nF6A
2017/11/24
0
0
有经验JAVA程序员如何提升自己?

具有一到五年开发经验 需要学习内容很多 JVM/分布式/高并发/性能优化/Spring MVC/Spring Boot/Spring Cloud/MyBatis/Netty源码分析等等等 01、透彻理解Tomcat原理手写动静态资源的实现 02、分...

阿阳啊啊
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA CAS单点登录之三:CAS代理模式演练

前言 JAVA CAS单点登录之一:搭建CAS服务器 JAVA CAS单点登录之二:CAS普通模式1演练 代理模式相相对上一节的普通模式,更加复杂了。但配置起来也会稍微有些差别。所谓难者不会,会者不难。如...

彬彬公子
21分钟前
2
0
Webfont 的兼容性问题[持续更新]

本文转载于:专业的前端网站➺Webfont 的兼容性问题[持续更新] 低版安卓手机的 webview 显示不了,另外黑莓手机显示出来是这样: 生成工具: 离线字体生成工具:webfont 在线字体生成平台:ico...

前端老手
25分钟前
3
0
调用链与日志关联的探索式查询

摘要:本文将就Observability中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。 一、Observability Observability是一个最近几年开始在监控社区流行的术语。本文将Observability...

宜信技术学院
25分钟前
2
0
Java常见异常处理

异常是Java程序中经常遇到的问题,一个异常就是一个Bug,就要花很多时间来定位异常。 Java异常 (1)Throwable是Java异常的顶级类,所有的异常都继承于这个类。 (2)Error,Exception是异常...

daxiongdi
43分钟前
4
0
Validator 常用注解

说明 Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。那么在spring boot怎么使用这么强大的校验框架呢。 常用 [@null](https:...

五彩的颜色
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部