`
crabdave
  • 浏览: 1294749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Docker的dubbo容器,实现简单弹性云扩展

 
阅读更多

基于Docker的dubbo容器,实现简单弹性云扩展

 

本文章基于该样例进行修改:

git clone https://github.com/binblee/dubbo-docker.git

 

cd dubbo-docker

 

ls -l 

 

drwxr-xr-x 4 root root   43 3月  16 16:16 service-api

drwxr-xr-x 4 root root   60 3月  16 16:16 service-consumer

drwxr-xr-x 4 root root   60 3月  16 16:16 service-producer

 

我们使用zookeeper集群,使用三个节点

 

修改

service-consumer/src/main/resources/services.xml

service-producer/src/main/resources/services.xml

 

修改zookeeper配置,一共配置三个节点,使用系统环境变量([12 factor](https://12factor.net/)应用的一个推荐实践之一)

 <dubbo:registry protocol="zookeeper" address="${ZOOKEEPER_NODE_01}:2181,${ZOOKEEPER_NODE_02}:2181,${ZOOKEEPER_NODE_03}:2181" />

 

在maven的顶级目录中编译打包,并安装到本地maven仓库(主要安装api包)

 mvn clean compile package install -Dmaven.test.skip=true

 

 

 

第一个Docker镜像

build producer 镜像(使用openjdk基础镜像)

cd service-producer

vi Dockerfile

 

FROM openjdk:8-jre

VOLUME /tmp

COPY target/*.jar /app.jar

RUN sh -c 'touch /app.jar'

CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

docker build -t dubbo-producer .

 

第二个Docker镜像

build consumer 镜像(使用openjdk基础镜像)

cd service-consumer

vi Dockerfile

 

FROM openjdk:8-jre

VOLUME /tmp

COPY target/*.jar /app.jar

RUN sh -c 'touch /app.jar'

CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

 

docker build -t dubbo-consumer .

 

 

第三个Docker镜像

build dubbo-admin 镜像(使用openjdk基础镜像)

 

本文使用dubbo源码自己打dubbo-admin的war包

git clone https://github.com/alibaba/dubbo.git

 

配置dubbo-admin管理控制台的zookeeper集群地址

cd dubbo/dubbo-admin/src/main/webapp/WEB-INF

vi dubbo.properties

dubbo.registry.address=zookeeper://${ZOOKEEPER_NODE_01}:2181?backup=${ZOOKEEPER_NODE_02}:2181,${ZOOKEEPER_NODE_03}:2181

 

打包,跳过测试

mvn clean compile package install -Dmaven.test.skip=true

 

cd dubbo/dubbo-admin

vi Dockerfile

 

FROM openjdk:8-jre

 

ADD apache-tomcat-8.0.33.tar.gz /opt

RUN rm -rf /opt/apache-tomcat-8.0.33/webapps/ROOT

COPY target/dubbo-admin-2.5.4-SNAPSHOT.war /opt/apache-tomcat-8.0.33/webapps/ROOT.war

CMD ["/opt/apache-tomcat-8.0.33/bin/catalina.sh", "run"]

 

本例使用了apache-tomcat-8.0.33请自行下载

 

docker build -t dubbo-admin .

 

 

编辑docker-compose准备自动编排

vi docker-compose.yml

 

version: '2'

services:

  zookeeper-node-01:

     image: zookeeper

     restart: always

     container_name: dubbo-zookeeper-node-01

     ports:

       - "2181:2181"

     environment:

         ZOO_MY_ID: 1

         ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888

 

  zookeeper-node-02:

     image: zookeeper

     restart: always

     container_name: dubbo-zookeeper-node-02

     ports:

        - "2182:2181"

     environment:

         ZOO_MY_ID: 2

         ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888

 

  zookeeper-node-03:

     image: zookeeper

     restart: always

     container_name: dubbo-zookeeper-node-03

     ports:

        - "2183:2181"

     environment:

         ZOO_MY_ID: 3

         ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888

 

  producer:

    image: 'producer:latest'

    container_name: dubbo-producer

    environment:

      - ZOOKEEPER_NODE_01=zookeeper-node-01

      - ZOOKEEPER_NODE_02=zookeeper-node-02

      - ZOOKEEPER_NODE_03=zookeeper-node-03

  consumer:

    image: 'consumer:latest'

    container_name: dubbo-consumer

    environment:

      - ZOOKEEPER_NODE_01=zookeeper-node-01

      - ZOOKEEPER_NODE_02=zookeeper-node-02

      - ZOOKEEPER_NODE_03=zookeeper-node-03

      - SERVER_PORT=8899

    ports:

      - 8899

 

  dubbo-admin:

    image: 'dubbo-admin:latest'

    container_name: dubbo-admin

    environment:

      - ZOOKEEPER_NODE_01=zookeeper-node-01

      - ZOOKEEPER_NODE_02=zookeeper-node-02

      - ZOOKEEPER_NODE_03=zookeeper-node-03

    ports:

      - 8003:8080

      

      后台启动

      docker-compose up -d

      停止

      docker-compose stop

      强制删除(动态扩展的容器也可以一并删除)

      docker-compose rm -f 

  

  

  先配置zookeeper集群,一共三个节点

  导出consumer的8899端口,在宿主机上会随机映射端口,可以通过docker ps查看

  dubbo-admin控制台使用8003端口

  

  http://yourip:对应用随机端口

  你可以看到Greetings from Dubbo Docker

  

  http://yourip:8003

  进入dubbo-admin管理控制台

  账号密码可以在dubbo.properties中修改,我们使用root/root

  

  如果已安装shipyard等管理工具(可参考:http://crabdave.iteye.com/blog/2362149),可以对其中的producer 和 consumer进行动态scale 横向扩展指定个数的容器,实现简单的弹性扩展

      

      在扩展后可以观察当前 consumer 调用的是哪个producer

  

  可以修改consumer和producer中的java文件记录ip地址,然后再调用时进行观察

  

  consumer 调用的是哪个producer

  修改consumer中的Application.java

  修改producer中的GreetingsImpl.java

  修改文件见附件

 

 页面调用显示:

Greetings from (Producer IP: ip:172.21.0.2 ip:127.0.0.1 )Dubbo Docker (Consumer IP: ip:172.21.0.5 ip:127.0.0.1 )

 其中调用的Producer地址一直在变化(scale两个Producer和两个consumer)

  

/**
     * 获取本地IP地址
     * @return
     * @throws SocketException
     */
    private static String getLocalIP() throws SocketException {
        Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
        InetAddress ip = null;
        StringBuffer str=new StringBuffer();
        while (allNetInterfaces.hasMoreElements())
        {
            NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
            System.out.println(netInterface.getName());
            Enumeration addresses = netInterface.getInetAddresses();
            while (addresses.hasMoreElements())
            {
                ip = (InetAddress) addresses.nextElement();
                if (ip != null && ip instanceof Inet4Address)
                {
                    System.out.println("本机的IP = " + ip.getHostAddress());
                    str.append("  ip:").append(ip.getHostAddress()).append("  ");
                }
            }
        }
        return str.toString();
    }

 

 

 

 

 

 

分享到:
评论

相关推荐

    基于guns、dubbo的影院中心系统.zip

    整个系统通过Docker容器化部署,可以轻松地在不同环境中迁移和扩展。同时,通过持续集成和持续部署(CI/CD)工具,如Jenkins,实现自动化构建和发布,进一步提高开发效率。 总结来说,“基于guns、dubbo的影院中心...

    dubbo开发手册

    5. 容器化部署:利用Docker等容器技术,实现服务的快速部署和弹性扩展。 《Dubbo开发手册》是Java开发者学习和使用Dubbo的重要指南,涵盖了从基础概念到高级特性的全面内容。通过深入理解并熟练应用手册中的知识,...

    dubbo学习例题代码资源

    - **容器化部署**: 与Docker、Kubernetes等容器技术结合,便于在云环境中快速部署和扩展服务。 - **弹性伸缩**: 结合云平台的自动扩缩能力,可以根据服务负载动态调整服务实例数量。 5. **示例代码解析**: - **...

    云原生资料学习..pdf

    云原生(Cloud Native)是一种基于云计算的软件开发和部署方式,它强调应用程序的设计和构建应充分利用云平台的弹性、可扩展性和服务化特性。云原生的理念是将微服务、容器、持续集成/持续部署(CI/CD)、声明式API...

    阿里云 专有云企业版 V3.7.1 企业级分布式应用服务 EDAS 产品简介 20190124.pdf

    - **容器服务**:基于Docker技术,实现应用的容器化,提高部署效率。 - **弹性伸缩AS**:通过策略设置,自动调整服务实例数量,应对业务波动。 - **服务治理**:包括服务注册与发现、调用控制、熔断机制、降级...

    阿里云 专有云Enterprise版 V3.5.0 企业级分布式应用服务EDAS 用户指南 - 20180710.pdf

    2. **容器服务**:基于Docker容器技术,实现应用的快速部署和弹性扩展,同时支持Kubernetes和Mesos等容器编排系统,提供统一的容器生命周期管理。 3. **弹性伸缩**:自动根据业务负载变化进行扩缩容,确保资源利用...

    阿里云EDAS技术架构概述.pdf

    云原生是一种新型的软件开发和部署模式,结合了Docker容器、Kubernetes容器服务、微服务架构、DevOps持续交付以及弹性资源利用等关键技术,旨在提高业务的敏捷性和健壮性。 1. **云原生核心概念**: - **Docker**...

    微服务架构与容器技术探析1

    而Kubernetes(K8s)作为容器编排平台,负责管理和调度这些容器,保证服务的高可用性和弹性扩展。 【Kubernetes】是Google开源的容器编排系统,它不仅管理容器的生命周期,还处理服务发现、负载均衡、自动恢复、...

    阿里云 专有云企业版 V3.6.2 企业级分布式应用服务EDAS 产品简介 - 20181228.pdf

    企业级分布式应用服务EDAS是基于云计算平台的PaaS服务,它旨在简化微服务架构的管理和运维,支持多种应用框架,如Spring Cloud、Dubbo等,同时具备容器化部署能力,兼容Docker容器。通过EDAS,企业可以快速构建高...

    阿里云 专有云企业版 V3.12.0 企业级分布式应用服务 EDAS EDAS产品简介 20200622.pdf

    EDAS提供了一套完整的解决方案,支持微服务、容器服务以及传统应用的运行,旨在提高应用的弹性和可扩展性,降低运维复杂度。 1. **什么是企业级分布式应用服务EDAS** EDAS是基于阿里巴巴内部大规模分布式系统经验...

    阿里云 专有云企业版 V3.6.2 企业级分布式应用服务EDAS 技术白皮书 - 20181228.pdf

    3. **容器服务**:基于Kubernetes,提供容器化应用的生命周期管理,支持Docker容器,实现应用的快速部署和弹性伸缩。 4. **流量调度与管理**:通过负载均衡、灰度发布、蓝绿部署等方式,实现流量的智能调度和管理,...

    基于 Cloud AlibabaVue3 ViteElement Plus的分布式前后端分离微服务架构权限管理系统

    Docker提供了轻量级的容器化技术,使应用可以在任何环境中一致地运行,而Kubernetes(K8s)作为容器编排工具,能够自动管理容器的生命周期,实现弹性伸缩和故障恢复。 总的来说,这个系统通过结合Vue3、Vite、...

    金融行业微服务架构落地实践.docx

    K8s作为容器编排平台,负责管理和调度容器,确保服务的高可用性和弹性扩展。 5. 微服务落地涉及的部门墙 实施微服务可能遇到部门间的协作问题。需打破传统的组织边界,建立跨部门的团队合作,确保微服务设计和实现...

    阿里云 专有云企业版 V3.6.1 企业级分布式应用服务EDAS 用户指南 - 20181105.pdf

    EDAS基于Kubernetes和Docker技术,提供了容器服务,能够自动化处理应用的弹性伸缩、负载均衡、健康检查等任务,确保应用的高可用性和稳定性。 3. **服务治理**: 提供服务注册、服务发现、调用链跟踪、熔断与降级...

    基于Devops的PaaS平台架构设计.docx

    Kubernetes和相关容器编排工具,如Docker,为实现快速部署和弹性扩展提供了强大的支持。 4. **平台管理相关难点** - 传统车企的数字化转型中,需要应对各种架构(如巨石架构、模块化、微服务)的应用接入需求。...

    系统架构设计4800.doc

    5. **负载均衡与弹性扩展**:使用云服务器ECS和负载均衡技术,实现流量自动分发,提供高可用性和扩展性。支持动态扩展,无须更换设备,对调用和访问者影响极小。同时,提供了DDoS防护和应用防火墙。 6. **消息系统*...

    qcon-2018-阿里分享pdf

    5. **弹性扩展**:面对业务量的快速增长,阿里大数据运维平台应具备灵活的资源调度和弹性扩展能力,以确保服务性能。 【阿里巴巴百万级容器技术PouchContainer+揭秘】 孙宏亮在《阿里巴巴百万级容器技术...

    Kubernetes与OpenStack融合支撑企业级微服务架构.pdf

    OpenStack是一个开源的IaaS云平台,能够提供必要的基础设施支持,与Kubernetes融合使用,能够为微服务架构提供底层计算资源的弹性扩展和管理,确保微服务架构的高可用性和容错性。 微服务架构面对的挑战与解决方案...

Global site tag (gtag.js) - Google Analytics