rancher 容器负载均衡_干货 | 京东云应用负载均衡(ALB)多功能实操

本文详细介绍了如何在京东云上配置应用负载均衡ALB,包括自动伸缩、会话保持功能以及三种调度策略的实践。通过创建和配置弹性伸缩、原生容器,演示了ALB如何配合弹性伸缩实现动态扩容,并展示了会话保持在云主机与原生容器间的效果,以及加权最小连接数、加权轮询和源IP三种调度策略的实施与效果。
摘要由CSDN通过智能技术生成

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

一、实操说明


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

5519f93cbb182d0e313a7b3018df5221.png

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

c993fc69a962b0ceab5b796ee2737233.png

二、环境搭建

1. 新建应用负载均衡(ALB)
打开京东云控制台:https://console.jdcloud.com/ 在左侧导航中找到网络-负载均衡,如图在华北-北京新建应用型负载均衡实例

1cc4304f8dfedcdbd4f893562d11a229.png

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

5710beac5caebbcc49d84182711b4b8b.png

配置如下:

  • 计费类型:按配置
  • 地域和可用区:华北-北京、可用区选择全部
  • 网络:选择自己创建的私有网络,安全组开放全部端口(主要用于测试,生产环境请按照实际情况开放特定端口)
  • 带宽:1Mbps
  • 名称:alb_test

c5893150e40a9943d76c59a64dba0680.png

799f7fdd3d796744b100c2ac23c5dfd1.png

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

72b14d66628ca4e8c2ae7df3ac99851a.png


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

345282f487eb0c89e0fe69107af01cff.png


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

a56af2d56ac38772dab53ea4a7691170.png

2. 制作自定义镜像
为方便后续操作,本步骤我们需要有一个安装有Nginx服务的Centos 7.4的自定义镜像首先创建云主机(制作完就可以删除了);
制作自定义镜像环境建议配置如下:

  • 计费类型:按配置
  • 地域:华北-北京,可用区随意
  • 镜像:官方-Centos 7.4 64位
  • 规格:通用 标准型 1核4GB
  • 存储:默认
  • 网络:选择自己创建的私有网络,为方便测试,安全组选择默认安全组开放全部端口
  • 带宽:1Mbps
  • 名称:buildimg(自定义)

ab0316ed0d4754a3aa7d1721e889ad1d.png

d5d606801e040bfef5f9c48df421f5f2.png


创建完云主机后,SSH远程连接,执行如下脚本
安装Nginx+PHP服务脚本:

1 wget  -O - https://pocenv-hcc.s3.cn-north-1.jdcloud-oss.com/JDCloud_LNP_test_Marin.Han.sh | bash

aa64a2fb2b634361f96d2387630ee077.png


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

2300a3203c00fda66f604dd10d6f2566.png

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

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

f0dd9ba2189c1bcf86f089d4d98b941e.png


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

e5791bb99e6d0cc3b104c1f88df8af40.png


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

2e3e1bebfcbf925312776fefddccc7ee.png

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

  • 配置名称:JAS_test
  • 地域:华北-北京
  • 镜像类型:私有
  • 私有镜像:选择我们上面创建的私有镜像LNP_Centos7
  • 规格类型:1核4GB
  • 存储:默认
  • 带宽:点击暂不购买

c15a88b8642f4059db1360c9b465c4b3.png

4d3e47b729acc3430699c4229cada14a.png


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

  • 名称:JAS_group
  • 初始实例数:1,在1-2个实例之间进行扩展
  • 启动配置:选择上面创建好的启动配置
  • 选择网络:选择你创建的VPC网络(选择你上面创建负载均衡所在的VPC)
  • 安全组:为方便测试,选择默认安全组开放全部端口
  • 支持可用区:选择全部可用区
  • 移出策略:为效果明显,我们选择移出最早创建的云主机(默认移出策略:移出指定数量云主机并让组内剩余云主机在物理位置上尽可能均衡分布。)
  • 负载均衡:从负载均衡接收流量,选择你上面创建的负载均衡alb_test和虚拟服务器组server_group,端口80

378106353c4bcd264f0c7b5a50db579b.png

25a310a96da7e750fdd2426481905624.png


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

25abe54d26dcc099f494b4c688e7633e.png


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

5a48affdad3ee79bc89dfe20b9ae44ef.png


初始伸缩完成会进行冷却

ddf904a8bf68caad6dcef4bb551f9876.png


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

b2e935eead6b346f35bf828e433b106f.png

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

  • 名称:DockerHub
  • 类型:docker-registry
  • 仓库域名:https://index.docker.io
  • 用户名/密码:不填写(因为是公共仓库,所以可不填写,写了也没用)
  • 邮箱:不填写

ec7c708a44ecbf227b73a2c53e30486b.png

ccd2964859d68ee1dff88bd001ddf655.png


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

d897bff29e50653f9fb372268754e639.png

容器①配置:

  • 计费类型:按配置
  • 地域:华北-北京
  • 可用区:默认
  • 镜像:第三方镜像
    镜像仓库:DockerHub
    镜像名称:marin0224/alb_test:web01
    镜像信息:https://index.docker.io/marin0224/alb_test:web01(自动生成)
  • 规格:1核4GB(默认)
  • 存储:默认
  • 网络:选择自己创建的私有网络(VPC)
  • 带宽:暂不购买
  • 高级设置:运行的命令 /run.sh
  • 名称:alb_test_web01

3155df9f904ce7c7d59e1535c917b19a.png

7b2707d59d7693634e17fe807d96d914.png

19ff0709814d40d933685306b36c0cc5.png


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

  • 计费类型:按配置
  • 地域:华北-北京
  • 可用区:默认
  • 镜像:第三方镜像
    镜像仓库:DockerHub
    镜像名称:marin0224/alb_test:web02
    镜像信息:https://index.docker.io/marin0224/alb_test:web02(自动生成)
  • 规格:1核4GB(默认)
  • 存储:默认
  • 网络:选择自己创建的私有网络(VPC)
  • 带宽:暂不购买
  • 高级设置:运行的命令 /run.sh
  • 名称:alb_test_web02

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

6775f40b838ba9bcd6f2a832df51ad45.png

三、产品测试

1.自动扩缩容
我们在伸缩组中的报警策略页面添加策略,配置如下:

  • 策略名称:policy1
  • 监听该规则:内存使用率-2分钟内-平均值-<-1%-连续2次(此规格镜像默认启动内存使用率大概4%左右,所以监听规则设置低于1%是一定会触发报警的。仅供测试)
  • 伸缩规则:增加1台云主机,冷却1秒

0e731984319c84c7c6eb110f734304d2.png


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

17f78801cbae9d71f67b8df269d637c3.png


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

1753be46e4814dc26671b5fdd4126bd3.png


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

5da504c8d04ac3f59b2c7c7a9ecaadaa.png


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

f28929a00fb25b471d82cc5213738039.png


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

0111daac0def8adb6c82549e5cac24b8.png


伸缩活动中查看状态

7d7079125aed3adb34f3c4fad5511210.png


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

83cd3226e853bed74af1528c4e1fad14.png


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

96a0ce345c07dd54cb3d9e2caabc5716.png


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

f11783c3e528f22b9b4ae562f26cd425.png

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

7c80c2ddb41436d61bdc3bcda7bb5ee1.png

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

5cfd53a27be35c6d34058b17bffd2f2c.png

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

27efe4824bbefd2143d6a3ee654541ae.png

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

bd6c056d318ea0a86a2a16b36ef6670c.png


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

ea420f889b4c78beb203bb44e3915125.png

2.ALB的会话保持功能
京东云应用负载均衡(ALB)是支持云主机与原生容器的会话保持功能的,这里我们实操对京东云原生容器的支持。
在负载均衡实例控制台找到我们上面新建的负载均衡实例alb_test点进去,在虚拟服务器组里我们编辑上面我们新建的服务组server_group

fd741c8a7c9475f419acd5ef085ff2af.png


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

06ce83e8001e7cc9ee4e056a36c93539.png


我们复制负载均衡实例的公网IP到浏览器查看结果(刚开始负载均衡配置生效中,可能会报502,多刷新几遍)
由于我们设置的是加权轮询规则,所以每次刷新浏览器就会在容器①与容器②之间切换

d048cd9a808e283f5658467e83766bda.png


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

00f9b680affa1e9a42fd65cc8235c869.png


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

0ef8bd7f4a9da148453a6c2f8a923831.png


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

76b0b138c8aa906dcbc33d827b52c8b0.png


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

eb41e969509e78eba28d79eed1d8089d.png

3.三种调度策略效果调度策略一:加权最小连接数
在一个浏览器中(例如谷歌浏览器)打开多个窗口来对负载均衡发起请求,请求指向某一台后端服务器(我这里是原生容器①);
接下来我们到负载均衡的后端服务编辑backend_test,将如图中的会话保持功能关闭,并将调度算法更改为加权最小连接数;

80273c0a916a3f1422396e86782b27e2.png


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

ed4523abf33b3ca94e655b1f7d13ac78.png

调度策略二:加权轮询
我们将调度算法改为加权轮询

dab32979e6387425fc8282696f1924ad.png


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

781942c183e93552ab5fb1178e71f4bc.png

调度策略三:源IP
我们将调度策略改为源IP

feb218c124ce6185833087a34a9a57bc.png


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

6f303d8a6c73264f1de2fabf470e95f0.png

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

f730cbe58eb97752bd2750b8b362018f.png


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

bd8b15aec7004a614111b003ef6e5f66.png


现在我访问负载均衡,刷新浏览器,发现即便调度策略为加权轮询,请求也只会分发到原生容器②,因为原生容器①已经被检测异常
打开负载均衡的后端服务详情,我们能看到原生容器①的健康状态为异常

00aa2b0d78dfc1d75de3f38a3724f4bd.png


点击→"京东云"了解更多信息

2cc2eaee31612c7306da77c349ed4180.png

29f458c350c8842e3bc68974d73667b2.gif

ea0b9ffec51eb2b624a72d3c6141c24f.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值