写点什么

京东云应用负载均衡(ALB)多功能实操

  • 2019-10-22
  • 本文字数:3736 字

    阅读完需:约 12 分钟

京东云应用负载均衡(ALB)多功能实操

应用负载均衡(Application Load Balancer,简称 ALB)是京东云自主研发的一款七层负载均衡产品,主要面向 HTTP 和 HTTPS 流量的 WEB 应用程序,提供灵活的功能配置。应用负载均衡在请求级别运行,可以为应用层业务提供更加出色的服务。

一、实操说明

自动伸缩功能将搭配京东云弹性伸缩产品与云主机进行实操,然后通过京东云应用型负载均衡(ALB)进行请求的分发;



会话保持/3 种调度策略/健康检查功能将会利用京东云应用型负载均衡支持原生容器的特性进行实操;


二、环境搭建

1. 新建应用负载均衡(ALB)

打开京东云控制台在左侧导航中找到网络-负载均衡,如图在华北-北京新建应用型负载均衡实例



如图,选择应用负载均衡后,点击确定



配置如下:


  • 计费类型:按配置

  • 地域和可用区:华北-北京、可用区选择全部

  • 网络:选择自己创建的私有网络,安全组开放全部端口(主要用于测试,生产环境请按照实际情况开放特定端口)

  • 带宽:1Mbps

  • 名称:alb_test



在负载均衡产品控制台点击上述我们创建的应用型负载均衡实例 alb_test



点击虚拟服务器组-新建虚拟服务器组



分组名称 server_group(暂不添加后端服务器实例)


2. 制作自定义镜像

为方便后续操作,本步骤我们需要有一个安装有 Nginx 服务的 Centos 7.4 的自定义镜像


首先创建云主机(制作完就可以删除了);


制作自定义镜像环境建议配置如下:


  • 计费类型:按配置

  • 地域:华北-北京,可用区随意

  • 镜像:官方-Centos 7.4 64 位

  • 规格:通用 标准型 1 核 4GB

  • 存储:默认

  • 网络:选择自己创建的私有网络,为方便测试,安全组选择默认安全组开放全部端口

  • 带宽:1Mbps

  • 名称:buildimg(自定义)



创建完云主机后,SSH 远程连接,执行如下脚本


安装 Nginx+PHP 服务脚本:


1\wget  -O - https://pocenv-hcc.s3.cn-north-1.jdcloud-oss.com/JDCloud_LNP_test_Marin.Han.sh 
复制代码



脚本执行完成后,我们开始制作镜像,在云主机实例控制台找到我们创建的云主机将其停止



停止成功后,我们点击右侧更多选项,点击制作镜像


信息如下:


  • 名称:LNP_Centos7

  • 描述:包含 Nginx+PHP 的 Centos7.4 64 位镜像


定义镜像创建完成后,我们上面创建的云主机就可以删除了



云主机删除成功后,其绑定的公网 IP 不会被自动删除,我们需要手动删除,在左侧导航网络-私有网络-弹性公网 IP,找到对应的公网 IP 删除


3. 新建弹性伸缩

在京东云控制台找到弹性伸缩产品页面,找到启动配置选项,在华北-北京地域创建启动配置,配置信息如下:


  • 配置名称:JAS_test

  • 地域:华北-北京

  • 镜像类型:私有

  • 私有镜像:选择我们上面创建的私有镜像 LNP_Centos7

  • 规格类型:1 核 4GB

  • 存储:默认

  • 带宽:点击暂不购买



完成启动配置的创建后,左侧点击伸缩组,同样在华北-北京区域创建伸缩组,配置信息如下:


  • 名称:JAS_group

  • 初始实例数:1,在 1-2 个实例之间进行扩展

  • 启动配置:选择上面创建好的启动配置

  • 选择网络:选择你创建的 VPC 网络(选择你上面创建负载均衡所在的 VPC)

  • 安全组:为方便测试,选择默认安全组开放全部端口

  • 支持可用区:选择全部可用区

  • 移出策略:为效果明显,我们选择移出最早创建的云主机(默认移出策略:移出指定数量云主机并让组内剩余云主机在物理位置上尽可能均衡分布。)

  • 负载均衡:从负载均衡接收流量,选择你上面创建的负载均衡 alb_test 和虚拟服务器组 server_group,端口 80



由于我们设置的弹性伸缩初始实例数为 1,所以在保存伸缩配置后会根据启动配置自动生成 1 台云主机(为方便观察效果,这里记录下内网 IP:10.0.0.59)



在伸缩组-伸缩活动中也可以查看到伸缩记录



初始伸缩完成会进行冷却



我们打开上面创建的负载均衡 alb_test,找到虚拟服务器组 server_group,能够看到弹性伸缩自动新建的云主机 10.0.0.34 已与负载均衡自动关联


4. 新建原生容器

这里运用自定义的 DockerHub 公共仓库镜像,我们需要点击控制台左侧弹性计算-原生容器-镜像仓库认证信息-华北-北京-添加镜像仓库认证信息,配置如下:


  • 名称:DockerHub

  • 类型:docker-registry

  • 仓库域名

  • 用户名/密码:不填写(因为是公共仓库,所以可不填写,写了也没用)

  • 邮箱:不填写




点击左侧容器实例,如图在华北-北京新建容器实例



容器①配置:


  • 计费类型:按配置

  • 地域:华北-北京

  • 可用区:默认

  • 镜像:第三方镜像

  • 镜像仓库:DockerHub

  • 镜像名称:marin0224/alb_test:web01

  • 镜像信息(自动生成)

  • 规格:1 核 4GB(默认)

  • 存储:默认

  • 网络:选择自己创建的私有网络(VPC)

  • 带宽:暂不购买

  • 高级设置:运行的命令 /run.sh

  • 名称:alb_test_web01



如上,同样方式创建第二个原生容器


容器②配置:


  • 计费类型:按配置

  • 地域:华北-北京

  • 可用区:默认

  • 镜像:第三方镜像

  • 镜像仓库:DockerHub

  • 镜像名称:marin0224/alb_test:web02

  • 镜像信息(自动生成)

  • 规格:1 核 4GB(默认)

  • 存储:默认

  • 网络:选择自己创建的私有网络(VPC)

  • 带宽:暂不购买

  • 高级设置:运行的命令 /run.sh

  • 名称:alb_test_web02


两个容器创建完成后,如下图:


三、产品测试

1.自动扩缩容

我们在伸缩组中的报警策略页面添加策略,配置如下:


  • 策略名称:policy1

  • 监听该规则:内存使用率-2 分钟内-平均值-<-1%-连续 2 次(此规格镜像默认启动内存使用率大概 4%左右,所以监听规则设置低于 1%是一定会触发报警的。仅供测试)

  • 伸缩规则:增加 1 台云主机,冷却 1 秒


等待伸缩组冷却完成(状态变为正常)后,我们将创建伸缩组触发的云主机(10.0.0.59)停止来模拟故障



等待几分钟,能够再次自动成功弹出 1 台新的云主机(10.0.0.62),且最早创建的云主机(10.0.0.59)也被移除



我们在找到伸缩组 JAS_group,在伸缩活动页面查看伸缩动态,发现由于我们停止云主机导致检测不健康而被移除,并成功创建了新的云主机



成功弹出的云主机(10.0.0.62)会自动与绑定的负载均衡 alb_test 实例关联,并移除原来不健康的云主机(10.0.0.59)实例



当伸缩组冷却结束后,我们在伸缩组的定时任务中定时增加 1 台云主机,定时任务名称为 add_vm(执行时间设置间隔是 5 分钟,由于是测试,选择当前时间之后最近的时间点就行),用来模拟业务量突增


如果在设置的定时任务时间伸缩组在冷却,则定时任务不会触发。



在伸缩活动中查看状态



在云主机控制台能够看到根据定时任务新弹出的云主机(内网 IP10.0.0.4)



并且,在负载均衡的虚拟服务器组中我们可以看到,新弹出的云主机自动与负载均衡关联



在新建的负载均衡实例 alb_test 上添加一个 HTTP 协议的监听器,如下图点击监听器-新建监听器:



前端监听配置:按照默认下一步即可



后端转发配置:新建一个后端服务 backend_test,其他保持默认配置(加权轮询/不开启会话保持),然后点击下一步



健康检查:按照默认,下一步



添加服务器组:服务器组选择我们上面新建的虚拟服务器组 server_group,也就是说弹性伸缩会配合 ALB 实现伸缩功能,点击确定



复制应用负载均衡的公网 IP 到浏览器查看效果,如下图(刚开始 ALB 配置生效中,可能会出现 502 属于正常现象):


2.ALB 的会话保持功能

京东云应用负载均衡(ALB)是支持云主机与原生容器的会话保持功能的,这里我们实操对京东云原生容器的支持。


在负载均衡实例控制台找到我们上面新建的负载均衡实例 alb_test 点进去,在虚拟服务器组里我们编辑上面我们新建的服务组 server_group



我们将原来的 2 台弹性伸缩生成的云主机删除,然后将上面创建的 2 台原生容器加进来,然后点击确定



我们复制负载均衡实例的公网 IP 到浏览器查看结果(刚开始负载均衡配置生效中,可能会报 502,多刷新几遍)


由于我们设置的是加权轮询规则,所以每次刷新浏览器就会在容器①与容器②之间切换



接下来我们到负载均衡的后端服务编辑 backend_test



将如图中的会话保持功能打开



复制负载均衡公网 IP 到浏览器后,不停刷新,发现请求会一直保持分发到某一台后端服务器(我这里是原生容器②)



由于我们上面设置的会话保持超时时间是 30 秒,且转发规则为加权轮询,所以 30 秒过后,重新刷新浏览器后,请求会被分发到原生容器①


3.三种调度策略效果

调度策略一:加权最小连接数


在一个浏览器中(例如谷歌浏览器)打开多个窗口来对负载均衡发起请求,请求指向某一台后端服务器(我这里是原生容器①);


接下来我们到负载均衡的后端服务编辑 backend_test,将如图中的会话保持功能关闭,并将调度算法更改为加权最小连接数;



为效果明显,在另一个浏览器中(例如火狐浏览器)打开一个窗口对负载均衡发起请求,请求会被分发到另一台处理请求数较少的后端服务器(我这里是原生容器②);



调度策略二:加权轮询


我们将调度算法改为加权轮询



在浏览器中输入负载均衡的公网 IP,每刷新一次浏览器,请求就会轮询分发到后端原生容器(处理请求的后端会不停的换)



调度策略三:源 IP


我们将调度策略改为源 IP



我们打开 3 种不同的浏览器(谷歌、火狐、Microsoft Edge)分别访问负载均衡,当第一个浏览器请求被分配到某一台后端机器的时候(我这里是原生容器①),其他的浏览器请求也都会被分配到这台机器


4.健康检查

确保负载均衡的状态检查功能为开启状态(默认情况下为开启),调度算法为加权轮询



我们将负载均衡虚拟服务器组中对应的任意一台原生容器停止,用以模拟服务器故障



现在我访问负载均衡,刷新浏览器,发现即便调度策略为加权轮询,请求也只会分发到原生容器②,因为原生容器①已经被检测异常


打开负载均衡的后端服务详情,我们能看到原生容器①的健康状态为异常



2019-10-22 19:121549

评论

发布
暂无评论
发现更多内容

“读万卷书,行万里路”,让你收获一个不平凡的人生

小天同学

读书 成长 旅行 5月日更

进程内缓存助你提高并发能力!

万俊峰Kevin

缓存 微服务 本地缓存 Go 语言

论Http、Socket、WebSocket、WebService(SOAP)之间的区别

Damon

5月日更

飞桨前沿升级、顶级开源项目、产教融合育人,WAVE SUMMIT论坛内容先睹为快!

百度大脑

深度学习 飞桨

Flutter开发:Failed to retrieve the Dart SDK…的解决方法

三掌柜

5月日更

NumPy之:ndarray多维数组操作

程序那些事

Python Numpy 程序那些事

kafka基本概念

杨四正

大数据 kafka 架构设计 消息队列 消息队列架构

前端实操案例丨如何实现JS向Vue传值

华为云开发者联盟

Vue 大前端 js Promise Vuex state

DEMO WORLD分论坛聊些啥?高端制造、未来出行、皮肤科技、未来产业……

创业邦

创新

成功产品三要素

lenka

5月日更

分布式事务与分布式系统

邱学喆

分布式事务 raft CAP PAXOS 副本一致性

人人都在谈的图数据库到底是个啥?

华为云开发者联盟

大数据 数据结构 数据 图数据库 华为云图引擎图数据库GES

智能视频云3.0全景图来了!深度融合视频应用共创行业新生态

百度大脑

云智一体 智能视频 云智技术

集成学习案例一 (幸福感预测)

容光

数据处理

丰田汽车选用Mobileye和采埃孚的安全技术

E科讯

🚄【Redis 干货领域】从底层彻底吃透 AOF 重写 (源码篇)

码界西柚

redis aof Redis 协议 Redis 核心技术与实战 5月日更

从酷睿双核到Tiger Lake-H,英特尔如何帮游戏笔记本完成蜕变

E科讯

看MindSpore加持下,如何「炼出」首个千亿参数中文预训练语言模型?

华为云开发者联盟

框架 mindspore 盘古 NLP 大模型 中文预训练模型

docker(centos系统)安装vim工具

liuzhen007

Docker 5月日更

Golang List, Ring and Map

escray

学习 极客时间 Go 语言 5月日更

android端音频采集与播放

floer rivor

android 音视频

千万级学生管理系统的<考试试卷>存储方案

唐江

架构实战营

让人工智能成为保险行业科技基因的一部分!

百度大脑

人工智能 保险

详解JQuery框架的五大选择器

华为云开发者联盟

jquery 选择器 层级选择器 属性选择器 过滤选择器

Rust从0到1-错误处理-panic!

rust 错误处理 Error 不可恢复错误

【LeetCode】找出第 K 大的异或坐标值Java题解

Albert

算法 LeetCode 5月日更

如何成为云原生技术高阶玩家?华为云最近做了这件事

华为云开发者联盟

容器 DevOps 微服务 云原生 华为云

深入浅出分布式存储性能优化方案

焱融科技

云计算 分布式 高性能 云存储 超融合

冈萨雷斯《数字图像处理》学习总结及感悟:第一章 绪论 百闻不如一见

老猿Python

图形图像处理 数字图像处理 冈萨雷斯

HTTP/3 初体验

运维研习社

nginx 运维 HTTP3.0 5月日更

私有云解决方案

anyRTC开发者

音视频 WebRTC RTC sdk

京东云应用负载均衡(ALB)多功能实操_软件工程_韩超超_InfoQ精选文章