弹性负载均衡支持什么类型的会话保持?
独享型负载均衡器支持源IP地址、负载均衡器cookie两种会话保持类型。
共享型负载均衡器支持源IP地址、负载均衡器cookie、应用程序cookie三种会话保持类型。
弹性负载均衡是否支持后端FTP服务?
弹性负载均衡不支持后端FTP服务。但是可以支持SFTP场景。
弹性负载均衡的带宽是否可调整?
公网弹性负载均衡(ELB绑定EIP)的带宽可以调整。可通过控制台进行自助调整,或联系客户经理进行调整。
监听器中分配算法和会话保持算法是什么关系?
会话保持功能,目的是将同一个用户的会话分发到相同的后端节点。
下表是独享型负载均衡支持情况。
分配策略 | 会话保持类型 | L4(TCP、UDP) | L7(HTTP、HTTPS) |
---|---|---|---|
加权轮询算法 | 源IP地址 | 支持 | 不支持 |
负载均衡器cookie | 不涉及 | 支持 | |
应用程序cookie | 不涉及 | 不支持 | |
加权最少连接 | 源IP地址 | 支持 | 不支持 |
负载均衡器cookie | 不涉及 | 支持 | |
应用程序cookie | 不涉及 | 不支持 | |
源IP地址 | 源IP地址 | 不涉及 | 不支持 |
负载均衡器cookie | 不涉及 | 不支持 | |
应用程序cookie | 不涉及 | 不支持 |
分配策略 | 会话保持类型 | L4(TCP、UDP) | L7(HTTP、HTTPS) |
---|
下表是共享型负载均衡支持情况。
分配策略 | 会话保持类型 | L4(TCP、UDP) | L7(HTTP、HTTPS) |
---|---|---|---|
加权轮询算法 | 源IP地址 | 支持 | 不支持 |
负载均衡器cookie | 不涉及 | 支持 | |
应用程序cookie | 不涉及 | 支持 | |
加权最少连接 | 源IP地址 | 支持 | 不支持 |
负载均衡器cookie | 不涉及 | 支持 | |
应用程序cookie | 不涉及 | 支持 | |
源IP地址 | 源IP地址 | 不涉及 | 不支持 |
负载均衡器cookie | 不涉及 | 不支持 | |
应用程序cookie | 不涉及 | 不支持 |
分配策略 | 会话保持类型 | L4(TCP、UDP) | L7(HTTP、HTTPS) |
---|
一般建议:算法可以使用轮询算法,四层会话保持使用源IP地址,七层使用负载均衡器cookie方式。
云监控EIP带宽使用统计与ELB监控的网络流出速率数据为何不一致?
以下两种情况监控EIP带宽使用统计与ELB监控的网络流出速率数据不一致:
- 如果流量没有超过EIP带宽,EIP未被限流,云监控EIP带宽使用统计外网访问数据,而ELB不仅采集外网访问数据,而且采集内网访问的数据。
- 如果流量超过EIP带宽,EIP会被限流,ELB内访问的数据流量跟EIP访问数据流量不是一个路径,ELB内访问数据流量不会被限流。
如何检查弹性负载均衡会话保持不生效问题?
- 查看后端服务器组上是否开启了会话保持。
- 查看后端云服务器的健康检查状态是否正常,如果异常,流量会切换到其他后端云服务器,导致会话保持失效。
- 如果选择的是源IP算法,需要注意请求到达弹性负载均衡之前IP是否发生变化。
- 如果是HTTP或HTTPS监听器,配置了会话保持,不用观察session是否丢失,而需要注意发送的请求是否带有cookie,如果带有cookie,则观察该cookie值是否发生了变化(因为7层会话保持基于cookie)。
每IP地址组支持多少IP地址?
每个IP地址组最多可添加300个IP地址和网段。
如果IP地址组未包含任何IP地址,当访问控制选择白名单时,则对应的负载均衡监听器禁止任何IP地址访问。
如何获取来访者的真实IP?
当客户端通过ELB访问后端服务器时,客户端真实的IP地址会被ELB转换,后端服务器获取到的往往是ELB转换后的客户端IP地址。如果需要获取到客户端的真实IP,可以按如下方法操作。
- 七层服务(HTTP/HTTPS协议):需要对应用服务器进行配置,然后使用X-Forwarded-For的方式获取来访者的真实IP地址,详见下文内容。
- 四层服务(TCP/UDP协议):开启监听器的“获取客户端IP”功能,详见下文内容。
约束与限制
- 如果IP经过NAT,则只能获取到NAT转化后的IP地址,无法获取到NAT转化前的IP地址。
- 如果客户端为容器,只能获取到容器所在主机的IP地址,无法获取容器的IP。
- 四层监听器(TCP/UDP)开启“获取客户端IP”功能之后,不支持同一台服务器既作为后端服务器又作为客户端的场景。
- 独享型负载均衡的四层监听器(TCP/UDP)默认开启源地址透传功能,无需手动开启,且不支持关闭。
如果客户端经过WAF+ELB访问服务器,则还可以通过WAF直接获取客户端真实IP。
七层服务
针对七层服务(HTTP/HTTPS协议),需要对应用服务器进行配置,然后使用X-Forwarded-For的方式获取来访者的真实IP地址。
实的来访者IP会被负载均衡放在HTTP头部的X-Forwarded-For字段,格式如下:
X-Forwarded-For: 来访者真实IP, 代理服务器1-IP, 代理服务器2-IP, ...
当使用此方式获取来访者真实IP时,获取的第一个地址就是来访者真实IP。
配置Apache服务器
- 安装Apache 2.4。
例如在CentOS 7.5环境下,可以执行如下命令执行安装:
yum install httpd
- 修改Apache的配置文件/etc/httpd/conf/httpd.conf,在最末尾添加以下配置信息。
LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 100.125.0.0/16
图 修改Apache的配置文件示例图
将代理服务器的网段添加到 RemoteIPInternalProxy
共享型负载均衡需要添加的IP地址段为 100.125.0.0/16(100.125.0.0/16 是负载均衡服务保留地址,其他用户无法分配到该网段内,不会存在安全风险)和高防IP地址段。多个IP地址段用逗号分隔。
独享型负载均衡需要添加ELB实例关联的VPC子网网段。
- 修改Apache的配置文件/etc/httpd/conf/httpd.conf,将日志输出格式修改为如下所示(%a代表源IP地址):
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- 重启Apache。
systemctl restart httpd
- 查看httpd的访问日志,您可以获取真实的来访者IP。
配置Nginx服务器
例如在CentOS 7.5环境下,可以执行如下命令执行安装:
- 运行以下命令安装http_realip_module。
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar zxvf nginx-1.17.0.tar.gz
cd nginx-1.17.0
./configure --prefix=/path/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
make
make install
- 打开nginx.conf文件。
vi /path/server/nginx/conf/nginx.conf
- 在以下配置信息后添加新的配置字段和信息。
在http或者server处,需要添加的配置字段和信息:
set_real_ip_from 100.125.0.0/16;
real_ip_header X-Forwarded-For;
图 添加配置字段和信息示例图
将代理服务器的网段添加到 set_real_ip_from
共享型负载均衡的IP地址段 100.125.0.0/16(100.125.0.0/16是负载均衡服务保留地址,其他用户无法分配到该网段内,不会存在安全风险)和高防IP地址段。多个IP地址段用逗号分隔。
独享型负载均衡需要添加ELB实例关联的VPC子网网段。
- 启动Nginx。
/path/server/nginx/sbin/nginx
- 查看Nginx的访问日志,您可以获取真实的来访者IP。
cat /path/server/nginx/logs/access.log
配置Tomcat服务器
本教程中的Tomcat的安装路径为“/usr/tomcat/tomcat8/”。
- 登录已安装Tomcat的服务器。
- 执行如下命令,确定Tomcat已经正常运行。
ps -ef|grep tomcat
netstat -anpt|grep java
图 正常运行结果示例
- 将server.xml文件中的className="org.apache.catalina.valves.AccessLogValve"模块修改为如下内容。
vim /usr/tomcat/tomcat8/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false" />
图 配置示例
- 执行如下命令,重启Tomcat服务。
cd /usr/tomcat/tomcat8/bin && sh shutdown.sh && sh startup.sh
其中“/usr/tomcat/tomcat8/”为Tomcat安装路径,请根据实际情况替换。
图 重启Tomcat服务
- 执行如下命令,查看最新的日志。
如图中红框所示获取到的非100.125网段的IP地址,即为获取到的源IP地址。
cd /usr/tomcat/tomcat8/logs/
cat localhost_access_log..2021-11-29.txt
其中“localhost_access_log..2021-11-29.txt”为当天日志路径,请根据实际情况替换。
图 查询源IP地址
配置Windows IIS服务器
本教程以Windows Server 2012配置IIS7为例介绍,其他版本操作可能略有不同。
- 下载并安装IIS。
- 从第三方网站下载F5XForwardedFor.dll插件,并获取x86和x64目录下的F5XForwardedFor.dll插件拷贝到IIS服务具有访问权限的目录下,例如C:\F5XForwardedFor2008。
- 打开IIS管理器,选择“模块 > 配置本机模块”注册拷贝的2个插件。
图 选择模块选项
图 配置本机模块
- 单击“注册”,分别注册x86和x64插件。
图 注册插件
- 在“模块”页面,确认注册的模块名称出现在列表中。
图 确认注册成功
- 选择IIS管理器主页的“ISAPI筛选器”,为2个插件授权运行ISAPI和CGI扩展。
图 添加授权
- 选择“ISAPI和CGI限制”,为2个插件设置执行权限。
图 允许执行
- 单击主页的“重新启动”,重启IIS服务,重启后配置生效。
图 重启IIS服务
四层服务
针对四层服务(TCP/UDP协议):开启监听器的“获取客户端IP”功能。
开启此功能后,执行后端服务器迁移任务时,可能出现流量中断(例如单向下载、推送类型的流量)。所以后端服务器迁移完成后,需要通过报文重传来恢复流量。
监听器开启此功能后,后端服务器不能作为客户端访问此监听器。
如果监听器之前已经添加了后端服务器、并且开启了健康检查功能,开启“获取客户端IP”功能会重新上线后端服务器,新建流量会有1-2个健康检查间隔的中断。
1、
1)开启监听器的“获取客户端IP”功能。
2)登录管理控制台。在管理控制台左上角选择区域和项目。
3)在页面中选择“网络 > 弹性负载均衡”。
4)在“负载均衡器”界面,单击需要操作的负载均衡名称。
5)切换到“监听器”页签。
- 新增场景:单击“添加监听器”。
- 修改场景:在需要修改的监听器名称右侧所在行的操作列,单击“编辑”。
6)开启“获取客户端IP”开关。
7)设置后端服务器的安全组、网络ACL、操作系统和软件的安全规则,使客户端的IP地址能够访问后端服务器。
开启“获取客户端IP”之后,不支持同一台服务器既作为后端云主机又作为客户端的场景。如果后端云主机和客户端使用同一台云主机,且开启“获取客户端IP”,则后端云主机会根据报文源IP为本地IP判定该报文为本机发出的报文,无法将应答报文返回给ELB,最终导致回程流量不通。
2、
开启“获取客户端IP”之后,不支持同一台服务器既作为后端服务器又作为客户端的场景。如果后端服务器和客户端使用同一台服务器,且开启“获取客户端IP”,则后端服务器会根据报文源IP为本地IP判定该报文为本机发出的报文,无法将应答报文返回给ELB,最终导致回程流量不通。