负载均衡器

负载均衡器可以将来自多个公网地址的访问流量分发到多台主机上, 并支持自动检测并隔离不可用的主机,从而提高业务的服务能力和可用性。 同时,你还可以随时通过添加或删减主机来调整你的服务能力,而且这些操作不会影响业务的正常访问。 负载均衡器支持HTTP/HTTPS/TCP 三种监听模式,并支持透明代理,可以让后端主机不做任何更改,直接获取客户端真实IP。 另外,负载均衡器还支持灵活配置多种转发策略,实现高级的自定义转发控制功能。

本指南旨在介绍如何通过配置负载均衡器(LoadBalancer)来实现对多台主机的负载均衡。

搭建 HTTP 协议的负载均衡器

在本例中,我们假设已经存在2台主机,位于基础网络中, 每台主机上都已搭建好 HTTP 的 web server,监听 80 端口。 我们接下来将配置负载均衡器对这2台主机进行负载均衡。

第一步:创建一个负载均衡器

首先,你需要创建一个负载均衡器。 在创建的对话框中,你需要指定负载均衡器类型是公网还是私网。

  • 公网负载均衡器需要绑定公网IP地址
  • 私网负载均衡器需要选择网络ID

这里我们选择两个公网IP地址进行绑定,然后点击提交。

注解

你也可以在负载均衡器创建完成之后,通过 “绑定”/”解绑” 动作来动态地调整公网IP数目

第二步:新建监听器

当负载均衡器创建完成之后,我们需要新建一个 HTTP 协议的监听器。 首先,点击进入负载均衡器的详情页面,找到并点击 “新建监听器” 按钮。 如图所示,在弹出的对话框中,监听协议选择 “HTTP”,监听端口选择 “80”,均衡方式选择 “轮询”,点击提交。

注解

添加监听器后请检查负载均衡器的防火墙规则,确保 80 端口流量可以通过,否则从外网无法访问你的服务 你也可以通过点击右边 “快速设置” 里头的 “HTTP” 协议进行快速设置

第三步:添加后端服务器

监听器添加完成之后,我们需要为监听器添加后端服务器。 首先,找到并点击 HTTP 监听器下面的 “添加后端服务器” 按钮。 如图所示,在弹出的对话框中,”所在网络” 需要选择 “基础网络”, 然后从 “后端服务器” 的下拉菜单中选择我们已经配置好的 web server,”端口” 填 “80”, 然后点击提交。同理你可以添加另一台主机。

由于你的配置修改还没有被应用,所以后端服务器会显示不可用状态,这是正常的。 这时我们需要点击”新建监听器”旁边的”应用修改”按钮,使得修改生效。

注解

在每次完成修改负载均衡器配置之后,都需要点击”应用修改”按钮将修改生效

如下图所示,应用修改完成之后,后端服务器会成功被负载均衡器接管, 然后状态会恢复为 “活跃”。此时你通过负载均衡器绑定的IP地址(例如 http://<loadbalancer_eip>/ ), 就可以正常的访问自己的服务了。

搭建 HTTPS 协议的负载均衡器

假设我们的 web server 主机还需要提供 HTTPS 协议的访问, 那么我们同样可以搭建一个 HTTPS 的负载均衡器来对我们的 web server 进行负载均衡, 我们的负载均衡器提供了原生的 HTTPS 协议支持,即你的后端主机只需要支持 HTTP 协议即可。 如果这不是你期望的模式,例如你希望由你的后端承担 HTTPS 的卸载,那么你可以通过 TCP 协议来实现类似的功能。

第一步:创建一个负载均衡器

因为一个负载均衡器可以新建多个监听器,所以在本例里, 我们不再创建新的负载均衡器,而是选择在现有负载均衡器里添加新的监听器。

第二步:上传 SSL 服务器证书

进入负载均衡器的 “服务器证书” 页面,点击 “创建”,并将你的 “证书内容” 和 “私钥” 粘贴到对应的输入框中,点击 “提交”。 如下图所示:

注解

如果你需要上传证书链,也可以将所有证书链的内容粘贴于 “证书内容” 中。

第三步:新建监听器

首先,点击进入负载均衡器的详情页面,找到并点击 “新建监听器” 按钮。 如图所示,监听协议选择 “HTTPS”,监听端口选择 “443”,均衡方式选择 “轮询”, 在 “服务器证书” 处选择你上传的证书。点击提交。

注解

添加监听器后请检查负载均衡器的防火墙规则,确保 443 端口流量可以通过,否则从外网无法访问你的服务 你也可以通过点击右边”快速设置”里头的 “HTTPS” 协议进行快速设置

第四步:添加后端服务器

如图所示,”所在网络” 依旧选择 “基础网络”, 然后从 “后端服务器” 的下拉菜单中选择我们已经配置好的 web server,”端口” 填 “80”,然后点击提交。

同理,如果还有其他后端主机,你可以通过类似的操作依次添加, 注意在添加完成之后,不要忘记点击 “应用修改” 使配置生效。

搭建 TCP 协议的负载均衡器

假设后端主机已经支持了 HTTPS 协议,并不需要负载均衡器本身来做 SSL 的卸载,那么我们可以使用 TCP 协议的负载均衡方式。 除此之外,数据库等服务也可以使用 TCP 协议进行负载均衡。

第一步:创建一个负载均衡器

因为一个负载均衡器可以新建多个监听器,所以在本例里, 我们不再创建新的负载均衡器,而是选择在现有负载均衡器里添加新的监听器。

第二步:新建监听器

首先,点击进入负载均衡器的详情页面,找到并点击 “新建监听器” 按钮。 如图所示,监听协议选择 “TCP”,监听端口选择 “443”,均衡方式选择 “轮询”, 点击提交。

注解

添加监听器后请检查负载均衡器的防火墙规则,确保 443 端口流量可以通过,否则从外网无法访问您的服务

第三步:添加后端服务器

如图所示,”所在网络” 依旧选择 “基础网络”, 然后从 “后端服务器” 的下拉菜单中选择我们已经配置好的 web server,”端口” 填 “443”,然后点击提交。

同理,如果还有其他 HTTPS 主机,你可以通过类似的操作依次添加, 注意在添加完成之后,不要忘记点击 “应用修改” 使配置生效。

添加私有网络中的后端服务器

在我们上面的例子中,我们添加的后端服务器都是位于基础网络中的主机。 本篇中将介绍如何添加私有网络中的主机作为后端服务器。

注解

目前,我们只支持添加受管私有网络的主机

为了行文方便,假设我们有一个名称为 “私有网络 1” 的受管私有网络, 连接着名称为 “路由器 1” 的路由器。私有网络里头有两台 HTTP server 主机, IP地址分别为 192.168.1.2192.168.1.3 。 我们现在通过配置负载均衡器对这两台受管私有网络中的主机进行负载均衡。

第一步:建立路由器转发规则

因为私有网络和其他网络是 100% 隔离的,所以我们需要建立路由器的转发规则来使请求能够到达私有网络内部的主机。 如图所示,我们建立一条规则,将 “8081” 端口的 TCP 请求转发给 192.168.1.2 的 “80” 端口。 同理建立另外一条规则,将 “8082” 端口的 TCP 请求转发给 192.168.1.3 的 “80” 端口。

注解

“8081” 和 “8082” 端口是我们为了行文方便定义的,你可以指定其他自己喜欢的端口

转发规则建立完成后,需要点击 “应用修改” 使修改生效。 同时,我们需要打开路由器对应的防火墙的 “8081” 和 “8082” 端口下行规则, 使得这两个端口可以被外部访问,添加规则之后需要点击 “更新规则” 使得修改应用。

第二步:创建一个负载均衡器

步骤同 搭建 HTTP 协议的负载均衡器 ,不再赘述。

第三步:新建监听器

步骤同 搭建 HTTP 协议的负载均衡器 ,不再赘述。

第四步:添加后端服务器

如图所示,在 “所在网络” 我们需要选择 “受管私有网络”, 然后从 “后端服务器” 的下拉菜单中选择 “路由器 1”, “端口” 填 “8081”,然后点击提交。同理,添加另一个后端服务器, 从 “后端服务器” 的下拉菜单中依然选择 “路由器 1”,”端口” 填 “8082”,然后点击提交。

完成添加之后,点击 “应用修改” 使得修改生效。这时我们会看到两个后端服务器已经变成 “活跃” 状态。

自定义转发策略

在我们上面的例子中,负载均衡器的后端都是对等的。如果后端不是对等的, 我们可以通过自定义转发策略来进行更高级的转发控制。目前支持 “按域名转发” 和 “按URL转发” 两种规则, 每条转发策略都可以配置多条规则,并可以自定义规则之间的匹配方式。

注解

当负载均衡器的监听协议为 HTTP 或者 HTTPS 时,都可以支持转发策略配置; 监听协议为 TCP 时,不支持转发策略配置。

为了行文方便,我们假设负载均衡器有两个后端,运行着两个不同域名的网站,域名分别为 “domain1.com” 和 “domain2.com”。 我们现在通过配置转发策略来将不同的域名的流量转发到不同的后端。

第一步:创建转发策略和转发规则

首先创建针对域名 “domain1.com” 的转发策略,为了方便查看,我们命名为 “domain1.com”,如图所示:

然后,为该策略创建一条 “按域名转发” 的规则,如图所示:

注解

规则内容为 “domain1.com”, 表示匹配任何 “*.domain1.com” 的域名的请求都会被转发,例如 “www.domain1.com” 和 “site1.domain1.com” 等。我们支持正则表达式(Perl Compatible Regular Expressions),例如你可以通过 “^domain1.com$” 来实现精确匹配。

同理,我们可以为 “domain2.com” 创建相应的转发策略和规则。

第二步:将转发策略与后端进行绑定

当为监听器添加域名为 “domain1.com” 的后端服务时,需要绑定对应的转发策略,即名称为 “domain1.com” 的转发策略,如图所示:

同理,添加域名为 “domain2.com” 的后端服务时,需要绑定名称为 “domain2.com” 的转发策略。

注解

当同一条转发策略与多个后端进行绑定时,满足策略的请求会根据监听器中配置的 “均衡方式” 均衡到多个后端,起到负载均衡的作用。

第三步:更新负载均衡器配置

当后端添加完成之后,我们点击 “应用修改” 来更新负载均衡器的配置,最后的配置效果如图所示:

注解

这里你可能还需要做的配置是,在域名解析商处,将这两个域名解析到负载均衡器对应的IP上。

这样,不同域名的请求将被转发到对应的后端,达到按域名转发的目的。

除了 “按域名转发” 之外,我们还可以配置更复杂的转发策略。例如,如果我们希望将 “site1.domain.com” 或者 “site2.domain.com”, 并且 URL 以 ”.jpg”,”.png” 或者 ”.gif” 结尾的请求都发给某个后端,那么可以创建如下策略:

创建策略,匹配方式选择 “匹配所有规则”,即所有规则之间是 “与” 的关系:

为该策略创建两条规则,分别为 “按URL转发” 和 “按域名转发”,多个域名或者多个 URL 的正则匹配可以通过空格分割,表示匹配任意一条即可:

注解

当某个后端并没有和任何转发策略关联时,表示与后端所在监听器上其他转发策略都无法匹配的流量都会转发到该后端。如果该监听器上没有配置任何转发策略,则所有流量都会转发到该后端。 当一个监听器绑定多条策略或者规则时,请注意规则之间不能有重叠,否则监听器会随机匹配,引起不必要的问题。

rsyslog 远端主机

此功能可以输出负载均衡器的日志流到指定的主机。配置之前,需要提供一台Linux (推荐ubuntu)主机,满足以下要求:

  • 公网负载均衡器
    • 在 SDN 1.0区域,包括AP1/GD1/PEK1/PEK2, 主机需要加入基础网络
    • 在 SDN 2.0区域,包括PEK3/SH1, 主机可以加入VPC或者基础网络,同时配置成负载均衡器的后端
  • 私网负载均衡器, 主机和负载均衡器位于同一网络

按照下面步骤,配置 rsyslog:

第一步:修改 /etc/rsyslog.conf, 添加下面几行:

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 0.0.0.0

第二步:创建 /etc/rsyslog.d/haproxy.conf, 内容如下:

local0.* /var/log/haproxy.log

第三步:重启服务

service rsyslog restart

注解

在这个主机的防火墙放行 udp 514 端口。

准备好主机以后,在青云控制台,右击负载均衡器,选择“配置rsyslog”,输入主机IP,并应用修改就可以生效。

日志格式请参考: HAProxy文档 8.2.1 Default log format

负载均衡器术语解释

  1. 均衡方式

轮询:依据后端服务器的权重,将请求轮流发送给后端服务器,常用于短连接服务,例如 HTTP 等服务。

最少连接:优先将请求发给拥有最少连接数的后端服务器,常用于长连接服务,例如数据库连接等服务。

源地址:将请求的源地址进行hash运算,并结合后端的服务器的权重派发请求至某匹配的服务器,这可以使得同一个客户端IP的请求始终被派发至某特定的服务器。该方式适合负载均衡无cookie功能的TCP协议。

  1. 会话保持

会话保持可以将来自同一个客户端的请求始终发给同一个后端服务器,是通过 cookie 的方式来实现的。

植入cookie:由负载均衡器向客户端植入 cookie,这时你需要指定 cookie 的过期时间,不指定默认为不过期。

改写cookie:cookie 由你的后端业务来植入和管理,负载均衡器会通过改写该 cookie 的值来实现会话保持, 改写 cookie 对后端服务是透明的,不会影响后端服务的正常运行;这时你需要指定需要改写的 cookie 名称。

  1. 健康检查

开启健康检测后,负载均衡器会根据你的配置定期检查后端服务的运行状态, 当某个后端服务出现异常时,会自动隔离该后端服务,并将请求转发给其他健康的后端服务,实现高可用性。

健康检查方式

TCP:通过向后端服务器发送 TCP 包来检测后端服务

HTTP:通过向后端服务器发送 HTTP 请求来检测后端服务,你可以指定需要检测的 URI。负载均衡器会通过 HTTP 返回值是否为200来判断服务是否正常

健康检查选项

检查间隔:连续两次健康检查之间的时间间隔,单位为秒,范围为 2 - 60s

超时时间:等待健康检查请求返回的超时时间,检查超时将会被判定为一次检查失败,单位为秒,范围为 5 - 300s

不健康阈值:多少次连续检查失败之后,可以将后端服务屏蔽,范围为 2 - 10次

健康阈值:多少次连续检查成功之后,可以将后端服务恢复,范围为 2 - 10次

  1. 后端服务器权重
当均衡方式为 “轮询” 时,你可以通过设置后端服务器的权重来让负载均衡器进行权重转发。 权重的范围为 1 - 100,数值越大权重越高。
  1. 后端服务器状态

活跃:健康检查正常

不可用:健康检查失败

异常:处于健康和不健康的中间转换状态,一般持续时间很短,与你配置的 “健康检查选项” 相关

  1. 附加 HTTP 头字段

当监听协议为 HTTP/HTTPS 时,负载均衡器在转发 HTTP 请求时可以附加用户指定的 HTTP 头字段,后端服务器可以通过解析相应的头字段来获取字段内容。目前支持的附加头字段有:

客户端真实IP: 对应的HTTP 的头字段为 X-Forwarded-For

负载均衡器ID: 对应的HTTP 的头字段为 QC-LB-ID

负载均衡器入口IP: 对应的HTTP 的头字段为 QC-LB-IP

负载均衡器监听协议: 对应的HTTP 的头字段为 X-Forwarded-Proto

  1. 超时时间
当客户端与负载均衡器的连接长期处于非活跃状态时,会被判断为连接超时,该连接会被主动中断。超时时间单位为秒,范围是 10 - 86400s,默认值是 50s。 如果你的连接都是长连接,那么你可能需要调整该配置。
  1. 附加选项

取消URL校验: (仅HTTP/HTTPS)可以让负载均衡器接受不符合编码规范的 URL,例如包含未编码中文字符的 URL 等。

获取客户端IP: 把客户端的IP通过直接传递给后端。开启本功能后,负载均衡器对与后端是完全透明的。后端主机 TCP 连接得到的源地址是客户端的IP,而不是负载均衡器的IP。

注解

上述透明代理只支持后端是路由器的使用场景

数据压缩:(仅HTTP/HTTPS)使用 gzip 算法压缩文本数据,以减少网络流量 。

启用 HTTPS 重定向: (仅HTTP) 将此监听器的 HTTP 请求重定向至此负载均衡器的 HTTPS 监听器。注:启用后,此监听器不支持添加后端。

当所有后端不可用时直接拒绝 TCP 连接请求: (仅TCP) 当所有后端不可用时,不再接受连接,而是直接拒绝 TCP 连接请求。

禁用 HTTP 头字段 Proxy: (仅HTTP/HTTPS) 为了安全起见,某些后端为 CGI 的 Web 应用需要在用户请求中禁用该字段来防止注入攻击。

  1. 加密选项

启用全部加密方式:(仅HTTPS)

禁用不安全的加密方式:(仅HTTPS)禁用存在安全隐患的加密方式, 可能会不兼容低版本的客户端。

启用兼容 IE 的加密方式:(仅HTTPS)AES128 + EECDH : AES128 + EDH no-tls-tickets no-sslv3。