弹性负载均衡支持什么类型的会话保持?
独享型负载均衡器支持源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) 加权轮询算法 源IP地址 支持 不支持 负载均衡器cookie 不涉及 支持 应用程序cookie 不涉及 支持 加权最少连接 源IP地址 支持 不支持 负载均衡器cookie 不涉及 支持 应用程序cookie 不涉及 支持 源IP地址 源IP地址 不涉及 不支持 负载均衡器cookie 不涉及 不支持 应用程序cookie 不涉及 不支持
一般建议:算法可以使用轮询算法,四层会话保持使用源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,最终导致回程流量不通。