springcloud部署方式(springcloud部署架构)

http://www.itjxue.com  2023-01-26 20:29  来源:未知  点击次数: 

Spring Cloud 微服务(五) 部署到AWS ECS

AWS是亚马逊托管的云服务,其中ECS是亚马逊的EC2实例在容器方面的优化,自带docker,而且每个机器都有个亚马逊实现的容器"ECS agent"来负责容器的治理,另外Spring Cloud本身也有对AWS的支持,封装了AWS的服务,叫做spring-cloud-aws。我们在 上一篇 文章实现了微服务的docker化,下一步可以把我们的服务发布到ECS上对外提供服务。

集群是ECS最大的一个层级,集群的选择通常考虑地理因素,比如国内访问多的话就考虑在东京建立集群,目前AWS中国还没和其他AWS互连,而且只能使用部分功能,韩国区没有ECS服务。创建过程中特别注意Key pair一定要预先定义好,然后在这里选择一个Key pair,笔者就试过没有设置Key pari导致无法ssh到创建的实例上。Number of Instances代表我们想要开的实例数。

这里的VPS是设置一个虚拟的内网,有了这个才能更好地构建一个内网微服务。

Security Group其实定义的是防火墙相关的端口开关,这个在后面会用到。

一个集群可以运行很多服务,Number of tasks定义了预期要运行多少个task,如果目前运行的task低于这个值,ECS会自动发起task满足这个值。

Task Placement 定义了当给定数量task要启动时,ECS会优先把task按照一定的算法启动到某个实例上,比如spread代表平均地放置task,random代表随机。下面的ELB和Auto scaling分别是负载均衡和自动扩展功能。

Service创建出来的时候的面板:

创建任务时候可以选择docker的联网方式,分别是bridge和host,默认的docker都是bridge方式。

Task可以添加docker container,并且为每个container配置不同属性。这里定义使用的镜像,待会我们会创建一个镜像。为了防止突然升高的内存导致的高昂费用,可以设置内存最大值。这里说一个笔者遇到的坑,128兆内存其实是不够运行Spring Boot应用的,我在创建过程中使用了默认的128兆内存,导致微服务刚起来没多久就因为超出内存导致Task被干掉,同时Service里定义了最小存活Task为1,所以每次被干掉之后又会重新启动一个Task,导致了服务一只在不断循环重启,所以对于网络应用这里的推荐内存值是300-500兆内存。

Port mappings实现的是docker端口的映射。

Essential代表它是这个任务的主要容器,如果这个容器失去联系了,Task将被Kill掉,这个也是导致上诉死循环的一个重要原因。

创建镜像很简单,只要把上面显示的命令行在本地镜像上执行一下就可以了,具体操作类似GIT把本地仓库push到远程仓库。

把Eureka Server和我们的微服务推到远程的docker仓库之后,如图所示可以看到这两个Image。

按照上面的任务创建方式创建一个任务,任务里面运行两个docker,分别是我们的Eureka Server和一个简单的服务

这时候update我们的Service

等一段时间后就能看到我们的服务正运行在ECS集群上了

这时候还有最后一步,因为我们设置了防火墙,所以要去防火墙开启8081端口和8870端口,因为我们的服务运行在这两个端口上。

到这里,我们就可以用ECS实例的公网地址访问我们在AWS上创立的第一个微服务了。

最后附上官网文档上ECS的一个结构图

上一篇:Spring Cloud 微服务(四) Docker化

下一篇:Spring Cloud 微服务(六) 服务消费Feign

(1)

如何部署springcloud

将Spring应用部署到CloudFoundry.com很简单,就像SpringSource网站说的那样在注册申请到Cloud Foundry beta账号后,第一件事请就是在STS for Eclipse中安装CloudFoundry的支持。这里有一份博客详细的说明了如何安装,这里就不在赘述。

为了部署运行一个使用数据库的应用,要比部署一个单独的应用多一点步骤,但也只是一点。

springcloud多module如何打包部署

一个springcloud项目有多个module:结构如下

这里打包,首先在每个module的pom中写好包类型,我们打包为war包:

每个pom中应该都要安装maven打包插件

然后我们需要在root的maven中进行安装,可以先clear,之后再install

然后就可以在moudle的tagret中找到war包了,哈哈哈

Docker 部署 Spring Cloud 项目详细步骤

作者 | boonya

链接 | blog.csdn.net/u011508407

准备工作

JDK1.8、Docker1.12.1、CentOS7.0

(1)到Oracle官网下载好 jdk-8u181-linux-x64.tar.gz 备用 (2)卸载系统自带的java

(3)安装jdk

(4)配置环境变量

找到:export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 这一行,并在其下面一行添加如下内容:

使环境变量生效

测试安装

(1) 查看内核版本(Docker需要64位版本,同时内核版本在3.10以上,如果版本低于3.10,需要升级内核)

(2) 更新yum包:

(3) 添加yum仓库:

(4) 安装Docker

(5) 启动Docker

(6)配置docker远程访问

执行命令编辑文件

找到这一行

改为

修改完成后保存并重启Docker

测试访问 如果有返回数据则配置成功。

(7)使用Docker国内镜像(为Docker镜像下载提速,非必须)

3.Docker Compose的安装(1)下载docker-compose ,并放到/usr/local/bin/

(2)为Docker Compose脚本添加执行权限

(3)安装完成,测试

结果显示:

说明Docker Compose已经安装完成了。

4.Docker使用Maven插件构建并上传镜像(1)新建Dockerfile文件 在项目的/src/main下新增文件夹docker,并在文件夹下创建Dockerfile文件,文件内容如下

(2)修改pom.xml文件增加如下plugin imageName:镜像名称 dockerDirectory:Dockerfile文件所在目录 dockerHost:docker所在宿主机ip 2375为docker开启的远程访问端口 其他配置采取默认即可

每一个微服务项目都要进行配置。

(3)构建镜像并上传至docker 使用maven运行如下命令

上传成功后,在服务器输入

可以看到所有的docker镜像啦。

5.使用Docker Compose进行服务编排(1)在服务器任意目录,新建文件docker-compose.yml

文件编写完毕保存,切换到当前文件所在目录,输入命令启动Docker Compose

停止Docker Compose命令

推 荐 阅 读

1. 我建议你尽早进入大厂的 6 个理由

2. Spring Boot 并发登录人数控制

3. 45 个值得收藏的 CSS 形状

4. 淘宝技术架构演进之路

SpringCloud+Docker项目部署经验

1. Linux 服务器安装宝塔面板

2.使用ssh root@ip 的方式远程连接

3.安装Docker ,参考: 中的Docker安装

1.项目中 eureka 配置需加上: prefer-ip-address: true 具体配置列如:

2.其余微服务的yml文件中也需配置:prefer-ip-address: true 具体配置列如:

3.微服务的pom.xml文件,配置打包插件,具体配置列如:

4.编译项目并打包 ,使用idea自带的打包方式 : 右侧Maven按钮 - 项目[root]-双击package -打包成功,获取jar包;

1.在服务器非系统盘符中(如果有)创建对应文件夹,以项目为例如下:

1)? mhxs-eureka-server (eureka注册与发现)

2)? mhxs-web-comment-api (客户端)

3)? mhxs-web-novel-api (客户端)

4)? mhxs-web-user-api (客户端)

5)? mhxs-gateway (网关zuul,集成了swagger2)

2.上传对应的jar文件到对应对应的文件夹中.

3.在对应文件夹中的分别创建Dockerfile文件,并编辑内容例如:

注1:其中微服务jar包修改了版本(如:xx-1.jar,xxx-2.jar,xxx-3.jar,....),对应文件夹下的同理修改,目的是为了方便后期版本回退.

注2:注意修改对应的jar名称和端口

4.编写创建镜像的脚本文件 : build_images.sh 和 相应jar文件夹一级,具体内容列如:

注:其中modules中的为对应的 jar文件夹名称

5.使用ssh连接到linux服务器,进入到build_image.sh 文件夹下,创建Docker镜像,操作如下:

6.查看镜像

7.在jar包文件夹同一层中创建启动镜像脚本:start_services.sh具体内容例如:

注1: 其中CODE用于检测对应服务是否已经启动成功,需根据具体项目修改.

注2: 启动方式分为全顺序启动和非全顺序启动

8: 查看镜像容器:

9:更新jar:

10.查看日志,有两种方法

1)直接通过宝塔面板可以找到对应日志位置:

2) 使用命令查看

springCloud多机房部署路由配置

直接用官方文档的例子好了。。假设网关的地址是localhost:8080

若直接访问localhost:8080/test 则网关会匹配失败

结合一些filter更好用哦

假如应用访问地址是localhost:8001/app, 接口地址是/test,这里设置了prefixPath为/app, 那么当你访问localhost:8080/test, 网关在帮你转发请求之前,会在/test 前加上/app,转发时的请求就变成了localhost:8001/app/test。

这个filter比较灵活的就是可以进行正则匹配替换,如下的例子就是当请求localhost:8080/test时,匹配所有以/开头的路径,然后在前面加上/app,所以现在请求变成了localhost:8080/app/test。然后转发时的url变成了localhost:8001/app/test 。在测试的时候,这个filter是没办法使用模板进行匹配的。可能是因为它是用的正则进行匹配替换,所以没办法使用模板吧

值得注意的是在yml文档中 \ 。替换路径是使用的是String.replaceAll()方法,这个方法和replace()不同,是根据正则进行替换的。具体的替换规则感兴趣的话可以去了解一下Pattern。

这个filter的使用方式比较简单。就是匹配到满足/a开头的路径后重新设置路径为以/app开头。

看到这里,大家应该大概了解了模板{...}的具体用法了吧。模板里面的变量可通过ServerWebExchange.getAttributes()获得。具体的请参看官方文档。

最后的最后,因为好奇三种关于path的filter能不能一起用,所以做了个测试。

但是!!我们来看看SetPathGatewayFilterFactory的apply方法。一进入这个方法,{path}(/test)就被记录下来了。当另外两个filter的return方法执行完了之后,才会执行这个方法的return 方法。最后路径就会被替换为/a/test。所以SetPathFilter和另外两个Filter是没办法同时生效滴!

最后的最后的最后。。来打脸了。这个filter的执行顺序和配置定义的顺序是有关系的。。

按照这个顺序的话,先执行的就是将 /test替换为 /a/test,然后替换为/api/a/test,最后替换为/app/api/test。。

由此得出的结论是只要SetPath这个filter在其他两个filter之前执行的话还是不冲突的。。

(责任编辑:IT教学网)

更多

推荐CGI/Perl教程文章