一、简介

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地 松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提 供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容。

主要核心部件:

    * Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

    * RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

    * Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo工作原理
    * Provider
        * 暴露服务方称之为“服务提供者”。
    * Consumer
        * 调用远程服务方称之为“服务消费者”。
    * Registry(使用zookeeper)
        * 服务注册与发现的中心目录服务称之为“服务注册中心”。
    * Monitor
        * 统计服务的调用次调和调用时间的日志服务称之为“服务监控中心”。


二、PROVIDER安装部署
1.JDK安装
  1.1 检查和卸载自带jdk
    [root@zck ~]# java -version
    java version "1.6.0_24"
    [root@zck ~]# rpm -qa | grep java
    [root@zck ~]# rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
    [root@zck ~]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
    [root@zck ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

    1.2 安装jdk1.7
    上传jdk
     tar -zxvf jdk-7u55-linux-x64.tar.gz
    cp -R jdk1.7.0_55 /usr/java
    # vim /etc/profile
    修改/etc/profile 最后面加入
        export JAVA_HOME=/usr/java
        export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        export PATH=$PATH:$JAVA_HOME/bin
     保存退出。运行 #source /etc/profile
    # update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_55/bin/java 60
    # update-alternatives --config java
    # java -version

2.TOMCAT安装
    2.1 下载&安装
        wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.tar.gz
        tar -xzvf apache-tomcat-7.0.57.tar.gz
        #将解压缩后的文件夹拷贝到 /opt/tomcat7:
        cp -R apache-tomcat-7.0.57  /opt/tomcat7
        #添加专用OS用户
        useradd -s /sbin/nologin tomcat
        chown -R tomcat:tomcat /opt/tomcat7
        #进入tomcat目录设置tomcat 的内存使用情况及其他配置:
        cd  /opt/tomcat7/bin
        vi daemon.sh
        #在正文开始的地方加入以下内容(内存等要结合硬件调优)【此脚本可以直接上传 】
        # chkconfig: 2345 20 80
        # description: simple example to start tomcat
        JAVA_HOME=/usr/java
        CATALINA_HOME=/opt/tomcat7
        CATALINA_OPTS="-Xms1024m -Xmx4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat"

    2.2 设置成自启动服务
        wget http://mirror.bit.edu.cn/apache//commons/daemon/source/commons-daemon-1.0.15-src.tar.gz
        tar -zxvf commons-daemon-1.0.15-src.tar.gz
        cd commons-daemon-1.0.15-src/src/native/unix
        ./configure
        make
      #复制jsvc到/opt/tomcat7/bin目录下面
        cp jsvc /opt/tomcat7/bin
        cp jsvc /etc/bin
        cd /opt/tomcat7/bin
        cp daemon.sh  /etc/init.d/tomcat
        chmod 755  /etc/init.d/tomcat
        chkconfig --add tomcat
        chkconfig tomcat on
        chkconfig --list tomcat
        显示:
        tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off  ← 确认2~5为on的状态就OK

    2.3 启动tomcat
        service tomcat start
        #增加防火墙配置,允许8080端口【暂时不开启防火墙】:
        vi /etc/sysconfig/iptables
        #在允许ssh的下面增加一条(只面向Web服务器开放权限!!!):
            iptables -A INPUT -p tcp -s 192.168.1.1 --dport 8080 -j ACCEPT
            /etc/rc.d/init.d/iptables save
            service iptables restart
            iptables -L -n
    2.4 查看tomcat进程
        ps aux | grep tomcat
        
三、ZK+DUBBO安装
TOMCAT参见上方

3.ZOOKEEPER安装【伪集群】
    3.1 下载安装
    wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
    tar xzvf zookeeper-3.4.6.tar.gz
    cp -R zookeeper-3.4.6 /zookeeper/server1
    cp -R zookeeper-3.4.6 /zookeeper/server2
    cp -R zookeeper-3.4.6 /zookeeper/server3
    #建立data和log目录
    mkdir -p /zookeeper/server1/data
    mkdir -p /zookeeper/server1/logs
    mkdir -p /zookeeper/server2/data
    mkdir -p /zookeeper/server2/logs
    mkdir -p /zookeeper/server3/data
    mkdir -p /zookeeper/server3/logs
    
    3.2 配置
    #那么首先进入【data】目录,创建一个myid的文件,里面写入一个数字,比如我这个是server1,那么就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3
    echo 1 >myid
    
    cd /zookeeper/server1/conf
    
        cp zoo_sample.cfg zoo.cfg
        mv zoo_sample.cfg zoo_sample.cfg.bak
        
        vi zoo.cfg
        # The number of milliseconds of each tick
        tickTime=2000
        # The number of ticks that the initial
        # synchronization phase can take
        initLimit=10
        # The number of ticks that can pass between
        # sending a request and getting an acknowledgement
        syncLimit=5
        # the directory where the snapshot is stored.
        # do not use /tmp for storage, /tmp here is just
        # example sakes.
        
        #注意修改
        dataDir=/zookeeper/server1/data
        dataLogDir=/zookeeper/server1/logs
        # the port at which the clients will connect
        clientPort=2181
        #
        # Be sure to read the maintenance section of the
        # administrator guide before turning on autopurge.
        #
        # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
        #
        # The number of snapshots to retain in dataDir
        #autopurge.snapRetainCount=3
        # Purge task interval in hours
        # Set to "0" to disable auto purge feature
        #autopurge.purgeInterval=1
                
        #在文件末尾添加如下内容:
        
        server.1=127.0.0.1:2888:3888
        server.2=127.0.0.1:2889:3889
        server.3=127.0.0.1:2890:3890
        
        #需要注意的是clientPort这个端口如果你是在1台机器上部署多个server,那么每台机器都要不同的clientPort,
        比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也需要区分下。

        #最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid中的数字。你在3个server的myid文件中分别写入了1,2,3,
        那么每个server中的zoo.cfg都配server.1,server.2,server.3就OK了。因为在同一台机器上,后面连着的2个端口3个server都不要一样,
        否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在leader挂掉时专门用来进行选举leader所用。
        
        server2和server3配置参见server1
        
        3.3 启动
            #分别进入三个服务器的zookeeper-3.4.3/bin目录下,启动服务
          ./zkServer.sh start
          /zookeeper/server1/bin/zkServer.sh start
          /zookeeper/server2/bin/zkServer.sh start
          /zookeeper/server3/bin/zkServer.sh start

            #启动完成后,查看服务器状态
            ./zkServer.sh status

        3.4接入客户端
        #进入任意一个服务器的zookeeper/bin目录下,启动一个客户端,接入服务。
        ./zkCli.sh –server localhost:3181

4.DUBBOADMIN配置
    cp dubbo-admin-2.8.4-SNAPSHOT.war /opt/tomcat7/webapps
    service tomcat stop
    service tomcat start
    cd /opt/tomcat7/webapps
    mv dubbo-admin-2.8.4-SNAPSHOT dubbo
    service tomcat stop
    service tomcat start
    
    访问dubbo后台: http://localhost:8080/dubbo 默认用户名/密码:root/root