基于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(); }
相关推荐
整个系统通过Docker容器化部署,可以轻松地在不同环境中迁移和扩展。同时,通过持续集成和持续部署(CI/CD)工具,如Jenkins,实现自动化构建和发布,进一步提高开发效率。 总结来说,“基于guns、dubbo的影院中心...
5. 容器化部署:利用Docker等容器技术,实现服务的快速部署和弹性扩展。 《Dubbo开发手册》是Java开发者学习和使用Dubbo的重要指南,涵盖了从基础概念到高级特性的全面内容。通过深入理解并熟练应用手册中的知识,...
- **容器化部署**: 与Docker、Kubernetes等容器技术结合,便于在云环境中快速部署和扩展服务。 - **弹性伸缩**: 结合云平台的自动扩缩能力,可以根据服务负载动态调整服务实例数量。 5. **示例代码解析**: - **...
云原生(Cloud Native)是一种基于云计算的软件开发和部署方式,它强调应用程序的设计和构建应充分利用云平台的弹性、可扩展性和服务化特性。云原生的理念是将微服务、容器、持续集成/持续部署(CI/CD)、声明式API...
- **容器服务**:基于Docker技术,实现应用的容器化,提高部署效率。 - **弹性伸缩AS**:通过策略设置,自动调整服务实例数量,应对业务波动。 - **服务治理**:包括服务注册与发现、调用控制、熔断机制、降级...
2. **容器服务**:基于Docker容器技术,实现应用的快速部署和弹性扩展,同时支持Kubernetes和Mesos等容器编排系统,提供统一的容器生命周期管理。 3. **弹性伸缩**:自动根据业务负载变化进行扩缩容,确保资源利用...
云原生是一种新型的软件开发和部署模式,结合了Docker容器、Kubernetes容器服务、微服务架构、DevOps持续交付以及弹性资源利用等关键技术,旨在提高业务的敏捷性和健壮性。 1. **云原生核心概念**: - **Docker**...
而Kubernetes(K8s)作为容器编排平台,负责管理和调度这些容器,保证服务的高可用性和弹性扩展。 【Kubernetes】是Google开源的容器编排系统,它不仅管理容器的生命周期,还处理服务发现、负载均衡、自动恢复、...
企业级分布式应用服务EDAS是基于云计算平台的PaaS服务,它旨在简化微服务架构的管理和运维,支持多种应用框架,如Spring Cloud、Dubbo等,同时具备容器化部署能力,兼容Docker容器。通过EDAS,企业可以快速构建高...
EDAS提供了一套完整的解决方案,支持微服务、容器服务以及传统应用的运行,旨在提高应用的弹性和可扩展性,降低运维复杂度。 1. **什么是企业级分布式应用服务EDAS** EDAS是基于阿里巴巴内部大规模分布式系统经验...
3. **容器服务**:基于Kubernetes,提供容器化应用的生命周期管理,支持Docker容器,实现应用的快速部署和弹性伸缩。 4. **流量调度与管理**:通过负载均衡、灰度发布、蓝绿部署等方式,实现流量的智能调度和管理,...
Docker提供了轻量级的容器化技术,使应用可以在任何环境中一致地运行,而Kubernetes(K8s)作为容器编排工具,能够自动管理容器的生命周期,实现弹性伸缩和故障恢复。 总的来说,这个系统通过结合Vue3、Vite、...
K8s作为容器编排平台,负责管理和调度容器,确保服务的高可用性和弹性扩展。 5. 微服务落地涉及的部门墙 实施微服务可能遇到部门间的协作问题。需打破传统的组织边界,建立跨部门的团队合作,确保微服务设计和实现...
EDAS基于Kubernetes和Docker技术,提供了容器服务,能够自动化处理应用的弹性伸缩、负载均衡、健康检查等任务,确保应用的高可用性和稳定性。 3. **服务治理**: 提供服务注册、服务发现、调用链跟踪、熔断与降级...
Kubernetes和相关容器编排工具,如Docker,为实现快速部署和弹性扩展提供了强大的支持。 4. **平台管理相关难点** - 传统车企的数字化转型中,需要应对各种架构(如巨石架构、模块化、微服务)的应用接入需求。...
5. **负载均衡与弹性扩展**:使用云服务器ECS和负载均衡技术,实现流量自动分发,提供高可用性和扩展性。支持动态扩展,无须更换设备,对调用和访问者影响极小。同时,提供了DDoS防护和应用防火墙。 6. **消息系统*...
5. **弹性扩展**:面对业务量的快速增长,阿里大数据运维平台应具备灵活的资源调度和弹性扩展能力,以确保服务性能。 【阿里巴巴百万级容器技术PouchContainer+揭秘】 孙宏亮在《阿里巴巴百万级容器技术...
OpenStack是一个开源的IaaS云平台,能够提供必要的基础设施支持,与Kubernetes融合使用,能够为微服务架构提供底层计算资源的弹性扩展和管理,确保微服务架构的高可用性和容错性。 微服务架构面对的挑战与解决方案...