阿里云系列(五)SLB
阿里云项目实战工程师
Mr.su执教笔记(QQ:491537692)
--私人课件,不出版,不公开,禁止传播想做好运维工作,人先要学会勤快;
居安思危,勤记而补拙,方可不断提高;
别人的资料用的再爽也是别人的;
自己总结的东西是你自身特有的一种思想与理念的展现;
精髓不是看出来的,精髓是记出来的;
请同学们在学习的过程中养成好的学习习惯;
勤于实践,抛弃教案,勤于动手,整理文档
SLB负载均衡
简介
负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(ECS实例)的流量分发控制服务。负载均衡扩展了应用的服务能力,增强了应用的可用性。
概述
负载均衡通过设置虚拟服务地址,将添加的同一地域的多台ECS实例虚拟成一个高性能、高可用的后端服务池,并根据转发规则,将来自客户端的请求分发给后端服务器池中的ECS实例。
负载均衡默认检查云服务器池中的ECS实例的健康状态,自动隔离异常状态的ECS实例,消除了单台ECS实例的单点故障,提高了应用的整体服务能力。此外,负载均衡还具备抗DDoS攻击的能力,增强了应用服务的防护能力。
名词概念
- 负载均衡服务
- 阿里云计算提供的一种网络负载均衡服务,结合阿里云提供的ECS服务,提供四层和七层负载均衡服务
- 负载均衡实例
- 负载均衡实例是一个运行的负载均衡服务。要使用负载均衡服务,必须先创建一个负载均衡实例
- 服务地址
- 系统为创建的负载均衡实例分配的服务IP地址。根据创建的负载均衡实例的类型,服务地址可能是公网IP也可能是私网IP。可以将域名解析到公网IP地址提供对外服务。
- 监听
- 负载均衡服务监听规定了如何将请求转发给后端服务器。一个负载均衡实例至少添加一个监听。
- 后端服务器
- 处理负载均衡分发的前端请求的ECS实例。
- 默认服务器组
- 一组处理负载均衡分发的前端请求的ECS实例。如果监听未配置指定的虚拟服务器组或主备服务器组,则将流量转发给默认服务器组中的后端服务器。
- 虚拟服务器组
- 一组处理负载均衡分发的前端请求的ECS实例。不同的监听可以关联不同的虚拟服务器组,实现监听维度的请求转发。
- 主备服务器组
- 一个主备服务器组只包含两台ECS实例,一台作为主服务器,一台作为备服务器。当主服务器健康检查失败,系统会直接将流量切到备服务器。
组成部分
- 负载均衡实例 (Server Load Balancer instances)
-
一个负载均衡实例是一个运行的负载均衡服务,用来接收流量并将其分配给后端服务器。要使用负载均衡服务,必须创建一个负载均衡实例,并至少添加一个监听和两台ECS实例
-
监听 (Listeners)
-
监听用来检查客户端请求并将请求转发给后端服务器。监听也会对后端服务器进行健康检查。
-
后端服务器(Backend Servers)
- 一组接收前端请求的ECS实例。可以单独添加ECS实例到后端服务器池,也可以通过虚拟服务器组或主备服务器组来批量添加和管理。
5大优势
-
高可用
采用全冗余设计,无单点,支持同城容灾。搭配DNS可实现跨地域容灾,可用性高达99.95%。根据应用负载进行弹性扩容,在流量波动情况下不中断对外服务。 -
可扩展
-
可以根据业务的需要,随时增加或减少后端服务器的数量,扩展应用的服务能力。
低成本,与传统硬件负载均衡系统高投入相比,成本可下降60%。 -
安全
结合云盾,可提供5Gbps的防DDoS攻击能力。 -
高并发
集群支持亿级并发连接,单实例提供千万级并发能力
简单的使用架构图
SLB的高可用结构
负载均衡实例采用集群部署,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。其中四层负载均衡通过LVS(Linux Virtual Server)+ keepalived的方式实现,七层负载均衡通过Tengine(淘宝网发起的Web服务器项目,在Nginx的基础上,针对有大访问量的网站需求进行了优化)实现。
来自公网的请求通过等价多路径路由(ECMP)到达LVS集群,LVS集群内的每台LVS通过组播报文将会话同步到该集群内的其它LVS机器上,从而实现LVS集群内各台机器间的会话同步。同时,LVS集群会对Tengine集群进行健康检查,将异常机器从Tengine集群移除,保证七层负载均衡的可用性。
实践:
会话同步可以保证长连接不受集群内服务器故障的影响,但是对于短连接或连接未触发会话同步规则时(未完成三次握手),集群内的服务器故障仍可能会影响用户请求。为了防止集群中某台机器故障导致的会话中断,可以在业务逻辑中加入重试机制,降低对用户访问造成的影响
单SLB实例高可用架构
- 阿里云负载均衡已在大部分地域部署了多可用区以实现同地域下的跨机房容灾。当主可用区出现故障或不可用时,负载均衡有能力在非常短的时间内(约30秒)切换到备可用区并恢复服务;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。
多可用区的高可用架构
负载均衡的主备可用区是可用区级别的容灾。只有当主可用区整体不可用时,如机房整体断电、机房出口光缆中断等,负载均衡才会切换到备可用区。而并非某个实例出现故障,就切换到备可用区
多SLB实例的高可用
-
对可用性的要求特别高,负载均衡实例自身的可用性保障机制可能无法满足需求。例如当网络攻击或配置错误等情况导致负载均衡实例不可用时,由于未出现可用区级故障,不会触发负载均衡实例的可用区切换。此时,可以创建多个SLB实例,通过云解析DNS对访问进行调度,或通过全球负载均衡解决方案实现跨地域容灾备份
-
可以在一个地域内的多个可用区或多个地域内部署负载均衡实例和后端ECS实例,然后使用云解析DNS对访问进行调度。
后端ECS高可用
- 负载均衡通过健康检查来判断后端ECS实例的可用性。健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。
开启健康检查功能后,当后端某个ECS实例健康检查出现异常时,负载均衡会自动将新的请求分发到其他健康检查正常的ECS实例上;而当该ECS实例恢复正常运行时,负载均衡会将其自动恢复到负载均衡服务中
功能特性
功能 | 4层负载均衡 | 7层负载均衡 |
---|---|---|
调度算法 --> 负载均衡支持轮询、加权轮询(WRR)、加权最小连接数(WLC)和一致性哈希(CH)调度算法。 | y | y(七层不支持一致性哈希(ch)调度算法) |
健康检查 负载均衡会检查后端服务器的运行状况。当探测到后端服务器运行状况不佳时,会停止向其发送流量,然后将流量转发给其他正常运行的后端服务器。 | y | y |
会话保持负--> 载均衡提供会话保持功能。在会话的生命周期内,可以将同一客户端的请求转发到同一台后端服务器上。 | y | y |
访问控制 --> 负载均衡支持添加黑名单和白名单,灵活控制客户端访问。 | y | y |
高可用 -->负载均衡可以将流量转发给多个可用区的后端服务器。并且,负载均衡已经在大部分地域支持了多可用区部署,当主可用区出现故障时,负载均衡可自动切换到备可用区上提供服务。 | y | y |
安全防护 -->结合云盾,可提供5Gbps的防DDoS攻击能力 | y | y |
网络类型支持 --> 负载均衡提供公网和私网类型的负载均衡服务。可以创建一个私网类型的负载均衡实例来均衡专有网络内的流量,或创建一个公网负载均衡实例来均衡来自公网的流量。 | y | y |
监控 -->结合阿里云云监控服务,可以查看负载均衡的连接数、流量等信息。 | y | y |
IPv6地址支持--> 负载均衡支持转发来自IPv6客户端的请求。 | y | y |
记录健康检查日志 --> 负载均衡默认存储三天内的健康检查日志。可以通过开通OSS服务,将所有的健康检查日志存储到OSS中,分析后端服务器异常原因。 | y | y |
域名URL转发 -->负载均衡7层监听支持配置域名和URL转发规则,可以将来自不同域名和URL的请求转发到不同的后端服务器上。 | n | y |
证书管理 -->针对HTTPS协议,提供统一的证书管理服务。证书无需上传到后端服务器,解密处理在负载均衡上进行,降低后端服务器的CPU开销。 | n | y |
SNI支持 -->负载均衡HTTPS监听支持挂载多个证书,将来自不同访问域名的请求转发至不同的后端服务器组。 | n | y |
重定向 -->负载均衡支持HTTP访问重定向至HTTPS。 | n | y |
WS/WSS支持 --> WebSocket是HTML5一种新的协议,在客户端与服务器间提供双向通信渠道,能更好地节省服务器资源和带宽并达到实时通讯。 | n | y |
HTTP/2支持 -->HTTP/2(Hypertext Transfer Protocol Version 2)是超文本传输协议的第二版,向下兼容HTTP1.X协议版本,同时带来性能的大幅提升。 | n | y |
付费方式
包年包月
- 包年包月实例的特点:
- 在合同期内, 可以对包年包月实例的规格、带宽进行变更。
- 在合同期内,包年包月实例无法释放。到期后,实例会自动释放。
- 包年包月模式,只支持按带宽计费。
计费项目
按量付费
负载均衡(SLB)支持按量计费模式,按量计费实例可以随时释放。可以选择按固定带宽计费或按流量计费。
计费项
欠费说明
当实例欠费后,不会立即停止服务
计费方式 | 欠费说明 | 续费说明 |
---|---|---|
包年包月 | Active(启用状态):当创建好负载均衡实例后,在到期之前,负载均衡实例都是启用状态。此种状态下,可以正常使用负载均衡实例。 Locked(锁定状态):当负载均衡实例到期后,但到期时间未超过7天时,负载均衡实例进入锁定状态。此种状态下,不能对负载均衡实例进行任何操作,并且实例不再会进行流量转发,但会保留实例的IP和其它配置。 Inactive(失效状态):当负载均衡实例到期超过7天时,负载均衡实例进入失效状态。 此种状态下,负载均衡实例会直接释放,不会保留IP和任何配置。 | 在合同期内或合同到期后的7天内,可以进行续费 |
按量付费 | 系统根据负载均衡服务最近24小时的账单应付金额的平均值来判断用户账户余额是否足以支付其负载均衡服务后三个账期的费用,如果不足以支付将给予短信/邮件提醒。如果开启了余额预警,当账户余额小于设定的预警值时将给予短信/邮件提醒。 欠费后,实例继续运行24小时后会被锁定,停止服务。实例停止服务后,计费也将停止。 若7天后仍旧欠费,实例会被释放。在实例释放前一天会发送短信/邮件提醒,实例被释放后相关配置和数据将被永久删除,不可恢复。 | 按时付费实例根据实际使用时间计费,无需续费,在阿里云管理控制台上对账户进行充值即可。 在欠费后24小时内进行充值,的服务将不会受到停服影响。 在7天内充值补足欠费后,服务会自动开启,可以继续使用。 |
实例
概述
负载均衡实例是一个运行的负载均衡服务实体。使用负载均衡服务,必须创建一个负载均衡实例,在实例中添加监听和后端服务器。
实例类型
阿里云提供公网和私网两种类型的负载均衡服务。可以根据业务场景选择配置对外公开或对内私有的负载均衡,系统会根据选择分配公网或私网服务地址。
- 公网负载均衡实例
-
公网类型的负载均衡实例可以通过Internet将客户端请求按照 制定的监听规则分发到添加的后端服务器ECS上。在创建公网负载均衡实例后,系统会为其分配一个公网服务地址,可以将域名和该公网服务地址进行绑定,对外提供服务
-
私网负载均衡实例
- 私网类型的负载均衡实例只能在阿里云内部使用,可以转发的请求只能来自具有负载均衡的私网访问权限的客户端。私网负载均衡实例可以进一步对网络类型进行选择:
- 经典网络
如果选择的私网负载均衡实例的网络类型是经典网络,那么私网负载均衡实例的服务地址由阿里云统一分配和管理。该私网负载均衡服务只能被经典网络ECS实例访问。 - 专有网络
如果选择的私网负载均衡实例的网络类型是专有网络,那么私网负载均衡实例的服务地址会 指定的专有网络的交换机网段内分配。该私网负载均衡服务只能被相同VPC内的ECS实例访问。
实例规格
负载均衡提供性能共享型实例和性能保障型实例,性能保障型实例提供可靠的性能指标
- 性能共享型实例
- 负载均衡性能共享型实例,资源是所有实例共享的,不保障实例的性能指标。
- 性能保障型实例
规格 | 规格 | 最大连接数(秒) | 每秒新建连接数(cps) | 每秒查询数(qps) | 购买方式 |
---|---|---|---|---|---|
规格 1 | 简约型I (slb.s1.small) | 5,000 | 3,000 | 1,000 | 官网售卖 |
规格 2 | 标准型I (slb.s2.small) | 50,000 | 5,000 | 5,000 | 官网售卖 |
规格 3 | 标准型II (slb.s2.medium) | 100,000 | 10,000 | 10,000 | 官网售卖 |
规格 4 | 高阶型I (slb.s3.small) | 200,000 | 20,000 | 20,000 | 官网售卖 |
规格 5 | 高阶型II (slb.s3.medium) | 500,000 | 50,000 | 30,000 | 官网售卖 |
规格 6 | 超强型I (slb.s3.large) | 1,000,000 | 100,000 | 50,000 | 官网售卖 |
规格 7 | 超强型II(slb.s3.xlarge) | 2,000,000 | 200,000 | 100,000 | 联系客户经理申请 |
规格 8 | 超强型III(slb.s3.xxlarge) | 5,000,000 | 500,000 | 100,000 | 联系客户经理申请 |
性能共享型实例与性能保障型实例区别
创建实例
配置说明
配置 | 说明 |
---|---|
地域 | 选择负载均衡实例的所属地域。( 确保负载均衡实例的地域和后端添加的云服务器ECS的地域相同。 ) |
可用区类型 | 单可用区:负载均衡实例只部署在一个可用区上 多可用区:负载均衡实例会部署在两个可用区上。默认启用主可用区的实例。当主可用区出现故障时,将会自动切换到备可用区继续提供负载均衡服务,可以大大提升本地可用性。 |
主可用区 | 选择负载均衡实例的主可用区,主可用区是当前承载流量的可用区。 |
备可用区 | 选择负载均衡实例的备可用区。备可用区默认不承载流量,主可用区不可用时才承载流量。 |
实例名称 | 长度限制为1-80个字符,允许包含中文、字母、数字、连接符(-)、斜杠(/)、点号(.)和下划线(_)等字符。 |
资源组 | 云资源所属的资源组。 |
实例规格 | 选择一个性能规格。不同的性能规格所提供的性能指标也不同. |
实例类型 | 公网:公网负载均衡实例仅提供公网IP,可以通过Internet访问负载均衡。私网:私网负载均衡实例仅提供阿里云私网IP,只能通过阿里云内部网络访问该负载均衡服务,无法从Internet访问。 |
后端服务器类型 | 选择负载均衡实例挂载后端服务器类型,本地域表示允许挂载本地域后端服务器。 |
IP 版本 | 选择负载均衡实例的IP版本,可以设置为IPv4或者IPv6。 只有个别的地区支持ipv6 |
计费方式 | 按量,包年包月 |
购买数量 | 选择购买数量 |
监听
- 负载均衡提供四层(TCP/UDP协议)和七层(HTTP/HTTPS协议)监听
协议 | 说明 | 使用场景 |
---|---|---|
TCP | 面向连接的协议,在正式收发数据前,必须和对方建立可靠的连接 基于源地址的会话保持 在网络层可直接看到来源地址 数据传输快 | 适用于注重可靠性,对数据准确性要求高,速度可以相对较慢的场景,如文件传输、发送或接收邮件、远程登录 无特殊要求的Web应用 |
UDP | 面向非连接的协议,在数据发送前不与对方进行三次握手,直接进行数据包发送,不提供差错恢复和数据重传 可靠性相对低;数据传输快 | 关注实时性而相对不注重可靠性的场景,如视频聊天、金融实时行情推送。 |
HTTP | 应用层协议,主要解决如何包装数据 基于Cookie的会话保持 使用X-Forward-For获取源地址 | 需要对数据内容进行识别的应用,如Web应用、小的手机游戏等。 |
HTTPS | 加密传输数据,可以阻止未经授权的访问 统一的证书管理服务,用户可以将证书上传到负载均衡,解密操作直接在负载均衡上完成 | 需要加密传输的应用。 |
添加tcp监听
这里我们需要两台后端的ecs没有的去买两台按量的最便宜的同地域的ecs。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
我们登录ecs创建个nginx把80端口打开
复制备份一下。
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak
#修改主页文件
[root@iZ8vbd3y162k63ua90xlgaZ ~]# echo `hostname -I` > /usr/share/nginx/html/index.html
[root@iZ8vbd3y162k63ua90xlgaZ ~]# cat /usr/share/nginx/html/index.html
172.26.173.48
[root@iZ8vbd3y162k63ua90xlgaZ ~]# hostname -I
172.26.173.48
[root@iZ8vbd3y162k63ua90xlgaZ ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@iZ8vbd3y162k63ua90xlgaZ ~]# nginx
[root@iZ8vbd3y162k63ua90xlgaZ ~]# ss -atnup | grep 80
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=2067,fd=6),("nginx",pid=2066,fd=6))
tcp ESTAB 0 0 172.26.173.48:36654 100.100.30.25:80 users:(("AliYunDun",pid=1221,fd=16))
tcp LISTEN 0 128 :::80 :::* users:(("nginx",pid=2067,fd=7),("nginx",pid=2066,fd=7))
另一台也做同样的操作。
[root@iZ8vbd3y162k63ua90xlg9Z ~]# echo `hostname -I` > /usr/share/nginx/html/index.html
[root@iZ8vbd3y162k63ua90xlg9Z ~]# cat /usr/share/nginx/html/index.html
172.26.173.49
[root@iZ8vbd3y162k63ua90xlg9Z ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@iZ8vbd3y162k63ua90xlg9Z ~]# nginx
[root@iZ8vbd3y162k63ua90xlg9Z ~]# ss -antup | grep 80
tcp LISTEN 1 128 *:80 *:* users:(("nginx",pid=1682,fd=6),("nginx",pid=1681,fd=6))
tcp ESTAB 0 0 172.26.173.49:48526 100.100.30.25:80 users:(("AliYunDun",pid=1216,fd=16))
tcp LISTEN 0 128 :::80 :::* users:(("nginx",pid=1682,fd=7),("nginx",pid=1681,fd=7))
因为我们开了会话保持所以在短时间里都是一个ip,我们试着把回话保持关掉
添加udp监听
- 注意事项
- UDP监听的250、4789和4790三个端口为系统保留端口,暂时不对外开放。
- 暂不支持分片包。
- 经典网络负载均衡实例的UDP监听暂不支持查看源地址。
- 在以下两种情况下,UDP协议监听配置需要五分钟才能生效:
- 移除后端服务器。
- 健康检查检测到异常后,将后端服务器的权重设置为0。
- 由于IPv6的IP头部较IPv4更长,当在SLB IPv6实例上使用UDP监听时,需要确保后端服务器(通常是ECS云服务器)与SLB通信的网卡的MTU不大于1200(有些应用程序需要根据此MTU值同步修改其配置文件),否则数据包可能会因过大被丢弃。
- 如果使用TCP/HTTP/HTTPS监听,TCP协议支持MSS自动协商,因此不需要额外配置。
添加http监听
HTTP协议适用于需要对数据内容进行识别的应用,如Web应用和小的手机游戏等。可以添加一个HTTP监听转发来自HTTP协议的请求。
监听配置 | 说明 |
---|---|
选择负载均衡协议 | HTTP |
监听端口 | 用来接收请求并向后端服务器进行请求转发的监听端口。端口范围为1-65535。(在同一个负载均衡实例内,监听端口不可重复。) |
监听名称 | 设置监听的名称,用户自定义。 |
高级配置
监听配置 | 说明 |
---|---|
调度算法 | 加权轮询(WRR):权重值越高的后端服务器,被轮询到的次数(概率)也越高。 轮询(RR):按照访问顺序依次将外部请求分发到后端服务器。 加权最小连接数(WLC):除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑后端服务器的实际负载(即连接数)。当权重值相同时,当前连接数越小的后端服务器被轮询到的次数(概率)也越高。 |
监听转发 | 选择是否将HTTP监听的流量转发到HTTPS监听。 (如果开启监听转发,确保已经创建了HTTPS监听。) |
开启会话保持 | 开启会话保持功能后,负载均衡会把来自同一客户端的访问请求分发到同一台后端服务器上进行处理。 (植入Cookie: 只需要指定Cookie的过期时间。客户端第一次访问时,负载均衡会在返回请求中植入Cookie(即在HTTP/HTTPS响应报文中插入SERVERID),下次客户端携带此Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器上。) ( 重写Cookie:可以根据需要指定HTTPS/HTTP响应中插入的Cookie。 需要在后端服务器上维护该Cookie的过期时间和生存时间。负载均衡服务发现用户自定义了Cookie,将会对原来的Cookie进行重写,下次客户端携带新的Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器。) |
启用访问控制 | 启用访问控制后,可以通过配置访问控制策略来实现允许某些特定IP访问负载均衡,或禁止某些特定IP访问负载均衡的功能。 |
访问控制方式 | 白名单:允许特定IP访问负载均衡SLB,仅转发来自所选访问控制策略组中设置的IP地址或地址段的请求,白名单适用于应用只允许特定IP访问的场景。 设置白名单存在一定业务风险。一旦设置白名单,就只有白名单中的IP可以访问负载均衡监听。如果开启了白名单访问,但访问策略组中没有添加任何IP,则负载均衡监听会转发全部请求。 黑名单:禁止特定IP访问负载均衡SLB,来自所选访问控制策略组中设置的IP地址或地址段的所有请求都不会转发,黑名单适用于应用只限制某些特定IP访问的场景。 如果开启了黑名单访问,但访问策略组中没有添加任何IP,则负载均衡监听会转发全部请求。 |
选择访问控制策略组 | 于按带宽计费的负载均衡实例,可以针对不同监听设定不同的带宽峰值来限定监听的流量。实例下所有监听的带宽峰值总和不能超过该实例的带宽。 默认不开启,各监听共享实例的总带宽。(使用流量计费方式的实例默认不限制带宽峰值。) |
开启监听带宽限速 | 对于按带宽计费的负载均衡实例,可以针对不同监听设定不同的带宽峰值来限定监听的流量。实例下所有监听的带宽峰值总和不能超过该实例的带宽。 默认不开启,各监听共享实例的总带宽。(使用流量计费方式的实例默认不限制带宽峰值。 ) |
连接空闲超时时间 | 指定连接空闲超时时间,取值范围为1-60秒。 在超时时间内一直没有访问请求,负载均衡会暂时中断当前连接,直到下一次请求来临时重新建立新的连接。该功能已经在全部地域开放。 (该功能对使用HTTP/2.0的请求暂不生效) |
连接请求超时时间 | 指定请求超时时间,取值范围为1-180秒。在超时时间内后端服务器一直没有响应,负载均衡将放弃等待,给客户端返回HTTP 504错误码。 该功能已经在全部地域开放。 |
Gzip数据压缩 | 开启该配置对特定文件类型进行压缩。 目前Gzip支持压缩的类型包括:text/xml、text/plain、text/css、application/javascript、application/x-javascript application/rss+xml、application/atom+xml、application/xml。 |
附加HTTP头字段 | 添加X-Forwarded-For字段获取客户端的IP地址。 添加X-Forwarded-Proto字段获取实例的监听协议。 添加SLB-IP字段获取负载均衡实例的公网IP。 添加SLB-ID字段获取负载均衡实例的ID。 |
获取客户端真实IP | HTTP监听通过 X-Forwarded-For获取客户端真实IP,默认开启。 |
创建完毕自动启动监听 | 是否在监听配置完成后启动负载均衡监听,默认开启。 |
添加https监听
在https使用的时候我们需要先添加自签证书
#首先连接服务器
[root@iZ8vbd3y162k63ua90xlgaZ ~]# mkdir ca
[root@iZ8vbd3y162k63ua90xlgaZ ~]# cd ca
[root@iZ8vbd3y162k63ua90xlgaZ ca]# mkdir newcerts private conf server
[root@iZ8vbd3y162k63ua90xlgaZ ca]# ls
conf newcerts private server
#newcerts目录将用于存放CA签署过的数字证书。
#private目录用于存放CA的私钥。
#conf目录用于存放一些简化参数用的配置文件。
#server目录存放服务器证书文件。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# cd conf/
[root@iZ8vbd3y162k63ua90xlgaZ conf]# ls
[root@iZ8vbd3y162k63ua90xlgaZ conf]# vim openssl.conf
[root@iZ8vbd3y162k63ua90xlgaZ conf]# cat openssl.conf
[ ca ]
default_ca = foo
[ foo ]
dir = /root/ca
database = /root/ca/index.txt
new_certs_dir = /root/ca/newcerts
certificate = /root/ca/private/ca.crt
serial = /root/ca/serial
private_key = /root/ca/private/ca.key
RANDFILE = /root/ca/private/.rand
default_days = 365
default_crl_days= 30
default_md = md5
unique_subject = no
policy = policy_any
[ policy_any ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
localityName = optional
commonName = supplied
emailAddress = optional
#生产私钥
[root@iZ8vbd3y162k63ua90xlgaZ conf]# cd /root/ca/
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl genrsa -out private/ca.key
Generating RSA private key, 2048 bit long modulus
.......................................................................................................................+++
.................+++
e is 65537 (0x10001)
[root@iZ8vbd3y162k63ua90xlgaZ ca]#
#生成csr文件。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl req -new -key private/ca.key -out private/ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:yunjisuan
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:yunjisuan (这里在工作中输入你的slb的域名,这里没有就先这样)
Email Address []:18910670931@163.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (这里直接回车)
An optional company name []: (这里直接回车)
#生成crt文件
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=Beijing/O=yunjisuan/OU=test/CN=yunjisuan/emailAddress=18910670931@163.com
Getting Private key
#为CA的key设置起始序列号,可以是任意四个字符。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# echo FACE > serial
touch index.txt
#为移除客户端证书创建一个证书撤销列表。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl ca -gencrl -out /root/ca/private/ca.crl -crldays 7 -config "/root/ca/conf/openssl.conf"
Using configuration from /root/ca/conf/openssl.conf
客户端证书签名
[root@iZ8vbd3y162k63ua90xlgaZ ca]# pwd
/root/ca
[root@iZ8vbd3y162k63ua90xlgaZ ca]# mkdir users
#为客户端创建一个key。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl genrsa -des3 -out /root/ca/users/client.key 1024
Generating RSA private key, 1024 bit long modulus
.....................................++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for /root/ca/users/client.key:
Verifying - Enter pass phrase for /root/ca/users/client.key: #创建key时要求输入pass phrase,这个是当前key的口令,以防止本密钥泄漏后被人盗用。两次输入同一个密码。 (我这里的密码:1111)
#为客户端key创建一个证书签名请求csr文件。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl req -new -key /root/ca/users/client.key -out /root/ca/users/client.csr
Enter pass phrase for /root/ca/users/client.key: #这里需要输入我们刚刚创建key时候的密码:1111
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:yunjisuan
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:yunjisuan
Email Address []:18910670931@163.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (这里直接回车)
An optional company name []: (这里直接回车)
#使用CA证书的key为客户端key签名。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl ca -in /root/ca/users/client.csr -cert /root/ca/private/ca.crt -keyfile /root/ca/private/ca.key -out /root/ca/users/client.crt -config "/root/ca/conf/openssl.conf"
Using configuration from /root/ca/conf/openssl.conf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :ASN.1 12:'BeiJing'
localityName :ASN.1 12:'Beijing'
organizationName :ASN.1 12:'yunjisuan'
organizationalUnitName:ASN.1 12:'test'
commonName :ASN.1 12:'yunjisuan'
emailAddress :IA5STRING:'18910670931@163.com'
Certificate is to be certified until May 19 15:26:01 2021 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#将证书转换为PKCS12文件。
[root@iZ8vbd3y162k63ua90xlgaZ ca]# openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12
Enter pass phrase for /root/ca/users/client.key: (这里是client的密码:1111)
Enter Export Password: (这里直接空格)
Verifying - Enter Export Password: (这里也是直接空格)
[root@iZ8vbd3y162k63ua90xlgaZ ca]# cd users/
[root@iZ8vbd3y162k63ua90xlgaZ users]# ls
client.crt client.csr client.key client.p12
上传证书
创建https监控
健康检查
健康检查配置 | 说明 |
---|---|
健康检查协议 | TCP模式的健康检查是基于网络层探测,通过发送SYN握手报文来检测服务器端口是否存活。HTTP模式的健康检查是通过发送head请求,通过发送HEAD/GET请求模拟浏览器的访问行为来检查服务器应用是否健康 |
健康检查方法(仅HTTP和HTTPS健康检查协议支持) | 7层监听(HTTP/HTTPS)健康检查支持HEAD和GET方法,默认采用HEAD方法。如果后端应用服务器不支持HEAD方法或HEAD方法被禁用,则可能会出现健康检查失败,此时可以使用GET方法来进行健康检查使用GET方法时,如果Response长度超过8K,会被截断,但不会影响健康检查结果的判定。(仅印度(孟买)地域的七层监听健康检查支持GET方法。) |
健康检查路径和健康检查域名(可选)(仅HTTP健康检查协议支持) | HTTP健康检查默认由负载均衡系统通过后端ECS内网IP地址向该服务器应用配置的缺省首页发起http head请求。 如果用来进行健康检查的页面并不是应用服务器的缺省首页,需要指定具体的检查路径 因为有些应用服务器会对请求中的host字段做校验,即要求请求头中必须存在host字段。如果在健康检查中配置了域名,则SLB会将域名配置到host字段中去,反之,如果没有配置域名,SLB则不会在请求中附带host字段,因此健康检查请求就会被服务器拒绝,可能导致健康检查失败。综上原因,如果 的应用服务器需要校验请求的host字段,则需要配置相关域名,确保健康检查正常工作。 |
正常状态码(仅HTTP健康检查协议支持) | 默认值为http_2xx和http_3xx。 |
健康检查端口 | 健康检查服务访问后端时的探测端口。默认值为配置监听时指定的后端端口。(如果该监听配置了虚拟服务器组或主备服务器组,且组内的ECS实例的端口都不相同,此时不需要配置检查端口。负载均衡系统会使用各自ECS的后端端口进行健康检查。 ) |
健康检查响应超时时间 | 接收来自运行状况检查的响应需要等待的时间。如果后端ECS在指定的时间内没有正确响应,则判定为健康检查失败。范围是1-300秒,UDP监听的默认值为10秒,HTTP/HTTPS/TCP监听的默认值为5秒。 |
健康检查间隔时间 | LVS集群内所有节点,都会独立、并行地遵循该属性对后端ECS进行健康检查。由于各LVS节点的检查时间并不同步,所以,如果从后端某一ECS上进行单独统计,会发现来自负载均衡的健康检查请求在时间上并不会遵循上述时间间隔。范围是1-50秒,UDP监听的默认值为5秒,HTTP/HTTPS/TCP监听的默认值为2秒。 |
健康检查不健康阈值 | 同一LVS节点服务器针对同一ECS服务器,从成功到失败的连续健康检查失败次数。可选值2-10,默认为3次。 |
健康检查健康阈值 | 同一LVS节点服务器针对同一ECS服务器,从失败到成功的连续健康检查成功次数。可选值 2-10,默认为3次。 |
健康检查请求和健康检查返回结果 | 为UDP监听配置健康检查时,可以在健康检查请求中输入请求的内容(例如youraccountID),在健康检查返回结果中输入预期的返回结果(例如slb123)。同时在后端服务器的应用逻辑中加入相应的健康检查应答逻辑,如收到youraccountID的请求时,回应slb123。此时,当负载均衡收到后端服务器发来的正确响应时,则认为健康检查成功,否则认为健康检查失败。此方式能最大程度确保健康检查的可靠性。 |
通用配置
DDoS基础防护介绍
阿里云免费为负载均衡服务提供最高5G的DDoS基础防护。如下图所示,所有来自Internet的流量都要先经过云盾再到达负载均衡,云盾会针对常见的攻击进行清洗过滤。云盾DDoS基础防护可以防御SYN Flood、UDP Flood、ACK Flood、ICMP Flood 和DNS Flood等DDoS攻击
- 云盾DDoS基础防护根据公网负载均衡实例的带宽设定清洗阈值和黑洞阈值。当入方向流量达到阈值上限时,触发清洗和黑洞:
- 清洗:当来自Internet的攻击流量较大或符合某些特定攻击流量模型特征时,云盾将会自动对攻击流量进行清洗,清洗包括攻击报文过滤、流量限速、包限速等。
-
黑洞:当来自Internet的攻击流量非常大时,为保护整个集群的安全,流量将会被黑洞处理,即所有入流量全部被丢弃。
-
阈值的计算遵循如下两个原则:
- 根据SLB实例所购买的带宽来决定阈值的高低,即SLB的出方向带宽,当实例的带宽较高时,各类阈值较高,当实例的带宽较低时,各类阈值相应的会变低。
-
根据用户的安全信誉分来决定黑洞阈值的高低。 ( 注意安全信誉分仅影响黑洞阈值,不影响清洗阈值。)
-
计算阈值:
-
SLB后台根据用户购买的带宽给出能够满足实例正常工作的阈值建议值。(如果用户购买的是按流量计费实例,出带宽为实例所在地域所支持的带宽峰值上限,目前中国内地地域带宽上限都是峰值5G)
-
SLB带宽与BPS清洗阈值之间的关系 (bps(bits per second)是数据传输速率的常用单位,意思是比特率、比特/秒、位/秒、每秒传的位数。)
- 当SLB带宽<100Mbps时,清洗BPS默认阈值 = 120Mbps
-
当SLB带宽>100Mbps时,清洗BPS默认阈值 = 带宽值*1.2
-
SLB带宽与PPS清洗阈值之间的关系 (PS是Precision Positioning System的简称,是常用的网络吞吐率的单位,即每秒发送多少个分组数据包,网络的性能通常用吞吐率(throughput)这个指标来衡量。)
-
清洗PPS阈值 = (SLB带宽值/500)*150000 带宽值单位为Mbps。
-
SLB带宽与黑洞BPS阈值之间的关系
- SLB带宽<1Gbps时,黑洞BPS默认阈值 = 2Gbps
-
SLB带宽>1Gbps时,黑洞BPS默认阈值 = MAX(SLB带宽值*1.5,2G)
-
云盾根据SLB给出的建议值,结合用户安全信誉分和各地域的资源情况,计算出最终的阈值。
- 云盾评估BPS和PPS阈值的规则
- BPS最小值为1000M,PPS最小值为30万个。
- SLB传入的参考阈值小于上述最小值时,取上述最小值。
- SLB传入的参考阈值高于上述最小值时,取SLB传入的参考阈值。
- 云盾根据用户的安全信誉分来决定黑洞阈值的高低
查看防护阈值
授权云盾基础防护只读权限
- 使用主账号登录访问控制RAM管理控制台。
切换回RAM账号
最后做完实验别忘了释放实例,不释放实例会继续扣钱