SLB优雅的滚动发布
又是新的一年了,距离上一次写文章已经过了2个多月了,作为新年的第一篇文章,对最近使用SLB的心得进行总结,作为以后备注,也可以让各位读者少走一点坑。
SLB使用的是阿里云的服务,服务A有多个实例部署在不同服务器上的docker容器中。对外通过SLB进行负载,调用方只需要通过访问SLB就可以将请求均匀的分布到不同服务器的A服务中。
阿里云同时还提供接口的方式操作SLB,可以动态的上下线服务,官方文档:https://help.aliyun.com/document_detail/27566.html?spm=5176.10609282.905295.38.6b0d3801v5OcOg 这里主要使用到了AddBackendServers和RemoveBackendServers对SLB进行操作,在应用发布前,调用RemoveBackendServers将此服务器从SLB中摘除,等待发布完成后,调用AddBackendServers将服务挂载到SLB,这样就可以实现滚动发布了。(接口调用都已经集成到Jenkins上了,只需要在Jenkins上点击发布就好)。
这种方式使用了几天后,在我们的ELK监控上就发现了问题,在每次下线服务后,调用方就会报出好几个超时错误SocketTimeoutException,而且通过监控可以看出在每次下线服务器后都会报出同样的错误。
经过一番调查后发现,直接摘除后端服务的话,会导致当前已经连上的请求直接被中断,所以客户端就会接连报出超时错误。
问题找到了,就非常好解决了。在AddBackendServers接口中发现可以设置权值,于是将发布流程优化成:
- 将需要发布的服务器的权值设置为0(防止新的流量进入)
- 等待一段时间(SLB设置的超时时间)+2s,(确保之前的请求都完成了)
- 将此服务器从SLB上摘除
- 进行服务发布
- 将服务器挂载到SLB上
- 设置权值
通过以上步骤优化后,就再也没有出现过之前的错误了,完美的实现了滚动发布。
在调查的过程中,还看到了官方的最佳实践:https://helpcdn.aliyun.com/document_detail/57399.html 官方使用的是通过心跳监测机制,将SLB自动剔除。但是这种通过文件的方式在目前容器化的服务中是行不通的,而且也复杂了,可以优化成:
- 提供自定义的health接口
- 下线前将通过接口调用的方式,通知health接口返回500的错误
- 等待SLB心跳多次检测后发现服务不可用,将此服务器标记为异常,且不在转发流量
- 发布服务
- 等待SLB自动完成心跳检测
总结
以上两种方式都能实现SLB的滚动发布,可以根据实际情况进行选择,各有优缺点,总结如下:
接口方式 | health方式 | |
---|---|---|
优点 | 方便控制,可以动态设置权重 | 除了设置health接口不可用外,无需其他操作 |
缺点 | 需要实时注意SLB的超时时间,需要调用SLB的接口 | 依赖SLB的自动监测机制,跟SLB配置相关大,时间不可控 |
SLB优雅的滚动发布相关推荐
- 灰度(金丝雀)发布、蓝绿部署、滚动发布
概念 一.灰度(金丝雀)发布 定义 灰度发布又叫金丝雀发布,只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上 ...
- k8s 不宕机滚动发布实战笔记
背景 对于业务和产品来讲,随时都有紧急小版本功能上线,对于研发人员来讲,线上如果有一些紧急的bug,都需要随时发版修正:而对于产品使用用户来讲,任何的功能和版本发布,要尽可能对用户无感知. 方案 灰度 ...
- 蓝绿部署、滚动发布和灰度发布
转自地址:什么是蓝绿部署.滚动发布和灰度发布? - 知乎 1.springcloud 微服务灰度发布策略 现有Spring Cloud微服务痛点 如果你是运维负责人,是否会经常发现,你掌管的测试环境中 ...
- SpringCloud 优雅下线+灰度发布
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 前言 在生产环境中,如何保证在服务升级的时候,不影响用户 ...
- Spring Cloud 优雅下线+灰度发布
前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题.如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的.那什么是优雅的呢?主要就是指在服务升 ...
- 【305期】Spring Cloud 优雅下线+灰度发布
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 文章目录 ...
- 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了
欢迎关注方志朋的博客,回复"666"获面试宝典 在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险.目前有 ...
- 常用于生产部署方式详解 灰度发布 滚动发布 蓝绿发布
传统型 这种方式基本上很多中小型企业都在用,尤其是政府或是对企业内部的系统.通常都是直接停服务,将正在运行的程序包备份到指定目录,将新的程序包上传到服务器,停服务,替换老的包,启动服务. 优点: 1. ...
- 蓝绿发布、滚动发布、灰度发布,有什么区别?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 在项目迭代的过程 ...
最新文章
- BCH专属“谷歌地图”凸显BCH魅力
- mysql执行出错:Table 'k_user' is read only
- Linux之文件查找
- 使用script命令自动录屏用户操作
- dedecms首页怎么调用公司简介的内容
- kafkaspot在ack机制下如何保证内存不溢
- lol模型导入ue4_Houdini amp; UE4 程序化建模——石头(一)基础工作流
- java用while循环语句输出1-100内的奇数和
- 城市中计算机控制系统的应用,计算机联锁控制系统在北京城铁中的应用
- 这个东西可以温暖你想打BUG的心......
- C中的extern-static-const关键词
- openssl、gmssl的简单介绍
- 阿里云服务器如何使用
- 利用FFmpegFrameGrabber截取视频中的某一帧图片压缩并旋转
- wps如何设置分段页眉
- IE浏览器兼容性问题!(按alt+x+b不弹出兼容性窗口)
- 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
- 《计算机网络(谢希仁6版)》学习笔记(word导入)[待补全]
- 微软Win10这些黑科技小功能你都用过吗
- Kindle进入日本