docker微服务部署之:七、Rancher进行微服务扩容和缩容
Rancher有两个特色用起来很方便,那就是扩容和缩容。
一、扩容前的准备工作
为了能直观的查看效果,需要修改下demo_article项目的代码。
修改demo_article项目中ArticleController中的三处代码:
1.注入HttpServletRequest;2在findAll()方法的message参数后面加上request.getLocalAddr(),用于显示从调用的是哪个ip的容器的服务;3.注释掉pom中的instance-id
@Autowired
private ArticleService articleService; @Autowired
private HttpServletRequest request; @RequestMapping(method = RequestMethod.GET)
public Result findAll(){
return new Result(true, "查询成功"+request.getLocalAddr(), articleService.findAll());
}
instance:
prefer-ip-address: true
# instance-id: article.com #如果需要在eureka注册多个服务,不能写死instance-id
修改完成之后,在Idea中,通过DockerMaven插件,重新打包并部署article镜像。
点击Idea界面左小角的Terminal,输入cd demo_article,进入demo_article项目下,再输入mvn clean package docker:build,重新将demo_article打成java包,并构建article镜像,并上传到docker本地仓库(192.168.31.181)中
在docker中,查看article镜像,可以看到article镜像在10秒前发生了变化,表示article镜像更新成功。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
article latest c92e406bc72a seconds ago 651MB
...
二、扩容前的注意事项
在浏览器输入http://192.168.31.181:8080,进入rancher管理界面,然后在顶部导航栏中选择test环境,再点击顶部导航栏中的应用—全部,在点击进入microservice应用内:
以需要扩容article为例。
扩容article服务,简单理解就是同一个article服务,要复制并运行多个article服务。那么问题来了,运行的article服务,都是9001端口,而一个容器内,甚至一个系统内只有一个9001端口,这明显是有问题的。所以,需要把该article服务删除点,修改为不指定端口。
删除article服务,点击article服务那行最右边竖着的三点,选择删除即可。
删除之后,article服务就没了,此时我们需要再创建一个没有指定端口的article服务。除不指定端口外,其他都一样。
点击右上角的添加服务,配置图中红色框中的四处外,然后滚动到页面底部,点击创建
注意下图中红色框中的部分,端口号9001已经没了。
在浏览器中访问article服务,看看我们前面demo_article打包并构建后的镜像是否已经更新。由于没了端口,所以我们不能再通过http://192.168.31.181:9001/article访问,而是只能通过zuul网关去访问,也就是http://192.168.31.181:8888/myarticle/article。可能会500错误,由于发布article之后,rancher容器需要一个解析的过程。耐心等待大概一到两分钟,再刷新,即可看到访问成功。(如果还是访问不成功,可查看zuul、article等服务的运行日志,查看是否有错误)。
可以看到界面返回的结果中有查询成功,然后跟了一个ip地址:10.42.113.8,该ip地址是哪里来的呢?可在microservice应用列表管理界面中,点击article,打开article服务的详情界面,可以看到10.42.113.8,即为刚刚创建的没有带端口的article服务的ip地址。如下图所示。
三、扩容
还是以article服务为例。扩容前,先看看microservice应用列表管理界面中的所有服务。可以看到只有4个服务,其中article服务只有一个,而且没有指定端口号。
再来看看eureka注册中心欢迎页中,注册了哪几个服务。可以看到只注册了两个服务,一个DEMO-ARTICLE和DEMO-ZUUL
下面进行扩容操作。扩容操作,其实很简单。
点击顶部导航栏中的API,点击Webhooks
打开Webhooks的列表页面
点击添加接收器,新增一个接收器
配置详解:
名称:自己根据相关随便取,此处为文章扩容。
类型:选择扩缩容服务
操作:选择扩容
目标服务:选择microservice/article
步长:每次扩容多少个服务,可一次或1个或2个或3个,可自由选择扩容个数,此处设置为2个。
最小数量:article服务最小不能小于多少个,此处设置为默认的1个。
最大数量:article服务扩容到多少个就不再扩容了,此处设置为默认的100个。
点击创建,完成扩容接受器的添加操作。
添加完扩容触发器后,此时microservice应用中,还是只有一个article服务。因为还需要一个触发操作才能生效。
怎么触发呢?点击上图中的触发地址的复制图标,复制出触发地址。触发地址,其实就一个URL,需要利用POST请求,去调用一次该URL。
利用POSTMAN,新建一个REQUEST,粘贴触发地址,选择请求类型为POST,然后点击SEND
请求完成之后,点击顶部导航栏的应用,点全部,在打开的应用列表中,点microservice微服务,进入microservice应用列表管理界面
可以看到article服务,已经由以前的单容器,变成了3个容器。
如果需要再扩容两个容器怎么办呢?此时有个快捷操作,不需要再在webhooks中添加接收器,只需要复制刚刚的扩容触发地址,在postman中多send几次即可。
因为扩容的步长的2,所以每send一次请求,容器数量会增加2个。
点击article进入该服务看一下article服务详情。可以看到有了三个不同ip地址的容器(记住这三个IP地址)。
等待三个容器都启动完成(因为是在虚拟机中,机器性能有限,可能需要好几分钟,甚至十多分钟到半个小时,因为虚拟机的性能毕竟有限)。访问eureka,看看eureka注册中心中,注册了几个article服务。可以看到已经注册了三个article服务。
利用POSTMAN,通过zuul网关来访问article服务,多访问几次,看看是否达到负载均衡的效果
运行结果,会依次出现如下结果,这复合预期结果(zuul网关,默认采用的负载均衡机制就是轮询机制):
四、缩容
缩容操作,和扩容操作很相似。
点击顶部导航栏中的API,点击Webhooks
打开Webhooks的列表页面
点击添加接收器,新增一个接收器
配置详解:
名称:自己根据相关随便取,此处为文章缩容。
类型:选择扩缩容服务
操作:选择缩容
目标服务:选择microservice/article
步长:每次缩容多少个服务,可一次或1个或2个或3个,可自由选择缩容个数,此处设置为1个。最大缩容步长不能大于先有容器数。
最小数量:article服务最小不能小于多少个,此处设置为默认的1个。
最大数量:article服务缩容到多少个就不再缩容了,此处设置为默认的100个。
点击创建,完成缩容接受器的添加操作。
添加完缩容触发器后,还需要一个触发操作才能生效。点击上图中文章缩容后面的触发地址下的的复制图标,复制出触发地址。触发地址,其实就一个URL,需要利用POST请求,去调用一次该URL。
在POSTMAN,新建一个REQUEST,粘贴触发地址,选择请求类型为POST,然后点击SEND
请求完成之后,点击顶部导航栏的应用,点用户,在打开的应用列表中,点microservice微服务,进入microservice应用列表管理界面,可以看到article服务的容器数已经由3个变成了2个。
如果需要再缩容一个容器怎么办呢?此时有个快捷操作,不需要再在webhooks中添加接收器,只需要复制刚刚的缩容触发地址,在postman中多send几次即可。
因为缩容的步长的1,所以每send一次请求,容器数量会减少1个。
访问eureka注册中心,查看注册了几个article服务。可以看到,也只是注册了两个article服务。
docker微服务部署之:七、Rancher进行微服务扩容和缩容的更多相关文章
- Docker Kubernetes 容器扩容与缩容
Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- Kubernetes 服务部署最佳实践(二) ——如何提高服务可用性
引言 上一篇文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并提 ...
- Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)
技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...
- docker微服务部署之:六、Rancher管理部署微服务
docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...
- 微服务实战(六):选择微服务部署策略 - DockOne.io
原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...
- Docker Swarm 集群环境搭建及弹性服务部署
上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...
- Docker Swarm(七)Scale 扩(缩)容服务
扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker serv ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
- 微服务理论之二:面向微服务架构与传统架构、SOA对比,以及云化对比
一.Monolith 网上对Microservice进行介绍的文章常常以Monolith作为开头,我也不会例外.原因是,知道了Monolith的不便之后才能更容易地理解Microservice架构模式 ...
随机推荐
- 【Unity】1.0 第1章 Unity—3D游戏开发和虚拟现实应用开发的首选
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity是跨平台2D.3D游戏和虚拟现实高级应用程序的专业开发引擎,是由Unity Technologies公司研制的 ...
- linxu ssh 双端认证 不成功之authorized_keys
linxu ssh 双端认证 不成功之authorized_keys liunx双端认证可以让我们更简便的在两台服务器之间传输文件,配置暂且不说,网上有大部分的文章可以搜索到,今天我要说的是在不成功的 ...
- PS各个工具的字母快捷键和英文全名
选框-Marquee(M) 移动-move(V) 套索-Lasso(L) 魔棒-Wand(W) 喷枪-injection lance (J) 画笔-Brush (B) 铅笔-pencil(N) 橡皮图 ...
- Codeforces801B Valued Keys 2017-04-19 00:21 136人阅读 评论(0) 收藏
B. Valued Keys time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- node csv
想实现下载csv文件的功能,内容放在mysql的blob中,在网上找的都是关于csv模块的. 由于csv的更新,网上的很多方法都用不了,比如csv(),现在已经变了:http://csv.adalta ...
- kafka不停止服务的情况下修改日志保留时间
kafka配置文件如下: broker.id=1 port=9092 host.name=ssy-kafka1 num.network.threads=4 num.io.threads=8 socke ...
- 自适应XAML布局经验总结 (三) 局部布局设计模式2
本系列对实际项目中的XAML布局场景进行总结,给出了较优化的自适应布局解决方案,希望对大家有所帮助. 下面继续介绍局部布局设计模式. 5. 工具箱模式 绘图,三维模型操作等需要工具的情况,可以使用带分 ...
- .NET 调试入门(一) 调试工具的使用
至于WinDbg的下载和基本配置网上到处都是,可以参考 http://www.cnblogs.com/happyhippy/archive/2007/04/08/710933.html 因为现在W ...
- 探索TFS Git 库文件换行(CRLF)的处理方式
(2018.12.29 更新,增加Git处理方式) 在计算机的技术中,所有文本信息都会涉及换行的问题.例如,你在键盘上敲击一次Enter(回车)键,系统将在文本重增加一行,实际上系统已经在文件中插入了 ...
- spring mvc配置ObjectMapper忽略无法识别的字段,以及一些博客推荐
通过Spring的MethodInvokingFactoryBean类实现的调用configure方法,此方法返回调用该方法的本身实例. 配置完毕后,可以在spring mvc的消息处理器中使用,为了 ...