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

     

最近在公司用到阿里的dubbo作RPC分布式服务化,记录一下项目服务环境搭建的一些过程,方便后来的同行能够少走些弯路,欢迎你们一块儿交流分享。java

1、环境准备mysql

6台机器以下:linux

用到的软件以下:web

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

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

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

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

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

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

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

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

2、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文件值分别为10四、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

以下:

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

3、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>

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

4、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远程过程调用。

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

5、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两个项目,这个控制台能够作好些监控和管理。

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

6、项目测试

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

相关文章
相关标签/搜索