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能夠分別作集羣部署,提升可靠性和可用性。

相關文章
相關標籤/搜索