1、F5 LTM工作原理,杨明非 F5北方区技术经理,LTM基础架构 VS Type详解 Profile详解 CMP 工作原理 One Connect工作原理 NAT、SNAT工作原理 Monitor工作原理 HA工作原理,Agenda,LTM基础架构,3,什么是TMM,Traffic Management Module TMOS的核心进程,有自己独立的内存、CPU资源分配和I/O控制 所有的生产流量都通过TMM接收 一个CPU Core只能有一个TMM进程 在V9版本上,15/34/64/68都是单TMM运行 在V9版本上,16/36/69/89/84/88都是多TMM运行 在V10版本上,16
2、/36/69/89/84/88都是多TMM运行 Viprion只支持9.6和10.0版本,默认都是多TMM运行,4,TMM处理的范围,5,TMM内部处理功能,所有的VS入口流量 LTM iRiules处理 Profile处理 会话保持处理 负载均衡算法 SSL加速(和硬件结合) HTTP 压缩 SNAT 静态CRL文件校验,不在TMM里面处理的功能,Web Accelerator Module(包括压缩) Application Security Module GTM的分配算法处理(包括GTM rules) Named域名解析 健康检查 日志管理 系统数据统计 SNMP数据输出 HA健康检查,
3、BIGIP 内部结构-V9平台15/34/64/68,6,TM/OS,管理CPU,万兆/千兆交换端口,PVA 四层交换专用ASIC,Host OS Web 界面管理 健康检查 SNMP ,Bridge,TMM 0,独立的管理机 SCCP,SSL加解密,HTTP压缩,Admin,Console,BIGIP 内部结构-Mecury平台16/36/69/89,7,TM/OS,管理CPU,万兆/千兆交换端口,HiSpeed Bridge,TMM 2,Host OS Web 界面管理 健康检查 SNMP ,TMM 3,TMM 1,TMM 0,独立的管理机 AOM,Cluster Muti Process
4、or多CPU并行处理,SSL加解密,HTTP压缩,Console,Admin,Host和TMM的内存分配,Host在启动的时候限定了内存分配的大小,在没有其他module的情况下是384MB TMM进程启动后,将自动获取余下的所有物理内存,8,Host Memory,TMM Memory,查看Host内存占用情况,# physmem /查看物理内存大小8387584 b memory show /查看内存分配情况 MEMORY STATISTICS - | (Host) Total = 3.835GB Used = 3.590GB | (TMM) Total = 5.976GB Used =
5、93.22MB,9,查看TMM内存占用情况,TMM分配的内存是准确的,Host内存显示在这里有一些偏差,10,BIGIP 的重要进程,bigstart status /查看F5进程状态 top /查看Host进程状态 top bcn 1 /显示Host的所有进程,11,TomCat4,TMM,TMM,MCPD,bigd,big3d,业务数据处理,本地健康检查,GTM/Mpack通讯,配置管理界面,Tamd,外部认证,bcm56xxd,交换芯片管理,Module工作模式-GTM,所有的请求接收和响应都通过TMM进行 gtmd负责动态策略解析,并将不在策略制定内的请求转发给named gtmd的所
6、有状态来源均由big3d汇报 gtmd不会直接与bigd通讯,而是从big3d去获得信息,12,TMM,客户端请求,gtmd,named,bigd,big3d,mcpd,Listener接收请求,动态策略解析,静态策略解析,RTT探测 iQuery信息收集和发送,本地健康检查,Module工作模式-WA,PVAC是WA Module处理的主进程,与TMM之间采用Plugin模式通讯 PVAC可以以多线程方式运行 所有的流量由TMM发送到pvac,pvac处理完成之后返回给TMM,再通过负载均衡策略转发到服务器,13,TMM,客户端请求,pvac,Web/应用服务器,Web/应用服务器,Web/
7、应用服务器,pvac,Module工作模式-ASM,14,asm是ASM处理的主进程,与TMM之间采用Plugin模式通讯 asm可以以多线程方式运行 所有的流量由TMM发送到asm,asm处理完成之后返回给TMM,再通过负载均衡策略转发到服务器,14,TMM,客户端请求,asm,Web/应用服务器,Web/应用服务器,Web/应用服务器,asm,Module工作模式-SAM,TMM接收所有流量请求 SSL VPN通道建立处理在TMM内部完成 APD(Application Policy Daemon)负责策略执行,用户认证等,不处理具体的业务流量,15,TMM,客户端请求,APD,Web/应
8、用服务器,Web/应用服务器,Web/应用服务器,VS Type 详解,16,VS Type详解,Performance L4 Standard VS Fast HTTP Fowarding VS,17,Performance L4,TMM只是负责客户端连接的分配和转发,不改变TCP连接中的任何参数 客户端和服务器自行协商TCP传输参数 在34/64/68平台上Performance L4可以有PVA加入实现硬件加速 在15/16/36/69/89/Viprion平台上都通过TMM核心进行处理 Performance L4 VS上只有4层的iRules可以使用 默认状态下,新建连接的第一个包必
9、须是Syn包,如果是其他的数据包比如ACK、RST等如果不在连接表中,则全部丢弃。 在Fast L4 profile打开Loose close和Loose Initial的时候对非Syn包也可以建立连接表,18,TMM,客户端,客户端,客户端,服务器端,服务器端,服务器端,Performance L4 攻击防护-Syn Cookie,正常情况下客户端连接和服务器端连接是1:1的关系 TMM在第一次收到客户端Syn包时,并不建立连接表 TMM的Syn Ack回应通过算法回应给客户端Syn,并期待客户端回应的值 TMM对客户端ACK进行计算,确认是真实客户端,再和后台服务器建立连接 在84/88上
10、可以实现硬件的Syn Cookie计算,其余的平台都是通过软件实现SynCookie计算 Syn Cookie工作模式下,只有成功建立连接的TCP请求才转发到后台,19,TMM,Syn,Syn,Ack (syncookie),Ack(Cookie),Syn,Syn-Ack,Ack,Data,Standard VS,正常情况下客户端连接和服务器端连接是1:1的关系 默认工作在全代理模式,客户端和服务器端的TCP连接完全独立 客户端和服务器端的TCP参数都是由TMM和双方分别协商 默认情况下以客户端源IP和后台建立连接,在打开SNAT的情况下用SNAT地址和后台建立连接 Standard VS的端
11、口永远对外开放,无论后台是否有服务器在工作,20,TMM,Syn,Syn,Ack,Ack,Syn,Syn-Ack,Ack,Data,Data,Standard 模式下的攻击防护,Standard VS模式具有天然的防攻击功能 在遇到Syn攻击的时候会导致系统的连接表过大 通过System-SYN Check Activation Threshold的设置,在达到设置值的时候系统自动启动Syn Cookie,避免建立过多连接,这个值对全局生效 大部分的网络层攻击都无法通过Standard模式的VS,21,Fast HTTP,Fast HTTP VS仅用于HTTP协议 默认开启One Connec
12、t Profile,对客户端连接进行聚合处理 默认开启SNAT AutoMap,在服务器端收到的TCP连接请求都是来自于TMM 没有会话保持功能 不能处理SSL,HTTPS,22,TMM,客户端,客户端,客户端,服务器端,服务器端,服务器端,Fowarding VS(Forwarding IP),只能使用Fast L4 Profile 按照连接处理,类似于路由器工作,但不完全一样,在Fast L4 Profile中开启Loose Initial和Loose Close之后更为接近路由工作模式 所有穿过Fowarding VS的连接都将产生连接表 没有Pool Member,转发完全取决于本地路
13、由 可以使用基于4层的Rules,23,TMM,客户端,查询本地路由表,转发客户端请求,VS和Profile,VS作为所有流量的入口 Profile依赖于VS,对进入VS的流量进行格式化处理 不同的VS可以用同一个Profile或者不同的Profile Profile之间存在有相互排斥和相互依存的关系,24,VS,TCP Profile,UDP Profile,FastL4 Profile,HTTP,RTSP,Client SSL,Server SSL,Streaming,SMTP,SIP,One Connect,VS和Rules,Rules的处理必须依赖于VS对流量的接收 通过事件触发机制,
14、Rules可以控制流量在VS内部处理的整个过程,25,SSL,Compression,Client Side,Server Side,TCP Express,Server,TCP Express,Caching,Microkernel,Virtual Server,iRules,Client,iControl API,TCP Proxy,OneConnect,XML,Rate Shaping,TrafficShield,Web Accel,3rd Party,VS和Rules,26,Server,iRules,Client Side Event Client_accept Client_dat
15、a Cache_request DNS_request HTTP_REQUEST HTTP_REQUEST_DATA RTSP_REQUEST . . . .,Server Side Event Server_connect Server_data Cache_response DNS_response HTTP_RESPONSE HTTP_RESPONSE_DATA RTSP_RESPONSE . . . .,VS和Rules,大部分rules只在同一个VS之内有效 Rules内创建的变量以连接为生命周期 一个VS上可以有多个Rules,它们将被顺序执行,27,CLIENT_ACCPTED,
16、CLIENT_DATA,LB_SELECTED,LB_FAILED,SERVER_ACCPTED,SERVER_DATA,CLIENT_CLOSED,SERVER_CLOSED,RULE_INIT,VS,Profile详解,28,Profile的作用和工作范围,Profile依赖于VS Profile是对VS的流量进行格式化处理 举例如果一个VS上配置了TCP Profile,则该VS对所有的UDP流量都不会接收,29,Profile的作用和工作范围,基本流量处理类型Profile TCP, UDP, FastHTTP, Fast L4, SCTP 服务流量处理类型Profile HTTP,
17、FTP, SMTP, RTSP, SIP, iSession SSL处理类型 Client SSL,Server SSL 会话保持类型 Cookie, Destination IP, hash, msrdp, source IP, Universal, SSL 认证处理类型 Radius, CRLDP, OCSP 其他处理类型 One Connect, Statistics, NTLM, Stream,30,重要的Profile-FastL4,Reset on Timeout: 在连接达到Time out的是否向两端发送Reset包 Idel Timeout:多长时间连接里面没有数据流量的时候
18、就删除连接表 Loose Initiation/Loose Close: 是否接收非Syn包建立连接 Softare Syn Cookie Protection:是否在VS上启用Syn Cookie,实现Syn攻击防护,31,可能调整的参数,重要的Profile-TCP,注意在Client Side和Server Side可以使用不同的TCP Profile 通常情况下建议: Client side:TCP WAN Optimized或LAN Optimized Server side: TCP LAN Optimized 除非你非常了解TCP的工作原理,否则不要调整除idel Timeout
19、以外的任何参数,32,重要的Profile-Client SSL,对所有进入VS的流量按照SSL协议进行处理 注意Client SSL profile不一定只能使用在HTTPS上 使用Client SSL的VS不一定使用443端口,33,TMM,客户端,客户端,客户端,服务器端,服务器端,服务器端,SSL,SSL,SSL,重要的Profile-FTP,FTP的连接模式有两种,PORT(主动模式)和PASV(被动模式), 主动模式的连接过程是:客户端动态的选择一个端口(这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好)向服务器端的FTP端口(默认是21)发送连接请求,服务
20、器接受连接,建立一个命令连接。当需要传送数据时或者列出服务器的文件列表时(通常使用ls或dir命令),客户端通过命令连接告诉服务器(使用PORT命令):“我已经打开了XX端口,请你过来连接”。于是服务器使用20端口向客户端的XX端口发送连接请求,建立一条数据连接来传送数据。 被动模式:客户端首先使用与主动连接模式相同的方法与服务器建立命令连接。当需要传送数据时,客户端通过命令连接告诉服务器(使用PASV命令)“我要连接你的XX端口,请问是否空闲”,如果恰好该端口空闲,服务器会告诉客户端:“你请求的端口空闲,可以建立连接(ACK确认信息)”,否则服务器会说“该端口已经占用,请换个端口(UNACK
21、信息)”。如果客户端得到的是空闲的提示,就会利用该端口建立连接,否则就换个端口重新尝试,这也就是所谓的连接建立的协商过程. PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND.,34,FTP Profile主要用于处理FTP的主动和被动传输两种模式 由于需要配置动态侦听端口,因此FTP协议必须进行单独处理
22、 通过iRules也可以达到同样的目的,但由于FTP协议使用非常广泛,因此使用FTP profile来简化配置和处理 FTP Profile必须依赖于TCP profile工作,CMP工作原理,35,为什么要用CMP,性能增长要求 CPU的主频增加受到比较大的限制,目前的趋势是以多核扩展为主 ASIC、NP的处理架构并不适合于复杂、灵活的流量处理 对于不规范的流量,采用硬件加速将导致系统设计僵化,很难加入新的功能实现市场需求 需要充分利用CPU的多核处理能力来提升系统的整体性能,36,CMP的硬件支持,37,CMP工作模式,流量由HSB进行分配在多个TMM上,每个TMM占据一个CPU Core
23、,每个TMM有自己独立的内存空间 每个TMM都具有相同的配置,包括VS/Profile/iRules/Pool/Persistence等 TMM之间通过内存高速总线进行通讯共享通用信息如会话保持表,SNAT源端口等 当CMP被Disable的时候,TMM0接管所有的流量 64/68的硬件平台已经支持CMP,在10.0上自动开启,38,VIP TMM0,VIP TMM1,VIP TMM2,VIP TMM3,HSB,HSB,Super VIP,如何查看CMP工作状态,b tmm show可以观察每个TMM的状态,39,关于CMP必须了解的内容,V9平台启动WA和ASM将Disable CMP iR
24、ules中定义全局变量将Disable CMP 所有的非TCP/UDP流量都只使用TMM0进行处理 V9中使用Session add, Session Lookup命令将Disable CMP Connection Limit和Rate Shaping的配置是针对每个TMM生效 手工关闭CMP运行 b db Provision.tmmCount 1 调整后必须重启 任何一个TMM Crash,将导致设备间Failover TCPdump已经调整为可支持CMP,40,查看Virtual Server的CMP工作状态,41,如何查看TMM CPU占用率,top命令可以显示每颗CPU的占用率 和V9
25、相比,TMM的CPU在Top命令中的显示发生了变化 每颗CPU的CPU占用率目前在图形界面里都消失了,目前只有整体的CPU占用率,42,One Connect工作原理,43,连接聚合和内容交换,44,sales.htm,d.gif,e.gif,index.htm,a.gif,b.gif,c.asp,Server,f.asp,sales.htm,d.gif,e.gif,index.htm,a.gif,b.gif,c.asp,Server,f.asp,index.htm,a.gif,b.gif,c.asp,index.htm,a.gif,b.gif,c.asp,HTML server pool,G
26、IF server pool,ASP server pool,连接聚合,内容交换,One Connect工作原理,45,One Connect的典型工作场景,实现连接聚合降低服务器的连接总数 需要对每一个请求都进行单独处理(注意在多数情况下,LTM只对一个连接的第一个包进行处理) 典型的,打开Cookie会话保持有时候会出现保持不正确的情况,这时就需要打开One Connect 通过设置Mask=255.255.255.255,可以使后台服务器可以“看到”客户端源IP,但这个时候One-connect只对一个客户端的连接起作用,46,One Connect和应用协议,注意! One Conne
27、ct Profile不是必须和HTTP Profile共用,也可以用于其他应用协议。 用于其他应用协议的时候必须使用iRules编程来调用One Connect 在需要对长连接进行拆分处理的时候,也需要用One Connect Profile,47,NAT和SNAT,48,SNAT的全称,49,Secure Network Address Translation,SNAT,=,NAT的工作模式,50,206.142.12.10,NAT Address: 197.12.100.50,SNAT的工作模式,51,206.142.12.10,172.16.12.1,172.16.12.7,172.16
28、.12.8,SNAT Address: 197.12.100.50,NAT和SNAT之间的差别,52,NAT1比1接收所有发往NAT地址的连接所有的连接只是通过LTM的连接表管理,但是是无状态的,连接不会被Timeout连接不能被镜像,SNAT多对一或者多对多拒绝所有发往SNAT地址的连接请求.连接通过LTM的连接表管理,有timeout设置连接可以被镜像,SNAT AutoMap,当配置SNAT AutoMap的时候,请求从那个VLAN发出去,则SNAT的源地址为VLAN上的SelfIP 当一个VLAN上有多个SelfIP存在的时候,SNAT的源地址是在多个SelfIP之间轮询,53,SNA
29、T Pool的工作模式,SNATPool是提供了一个可用于SNAT源地址的列表 BIGIP采用最小连接数的方式在SNAT的源地址之间进行选择,54,通过iRules控制SNAT,when CLIENT_ACCEPTED set snat_addr 1.1.1.1when HTTP_REQUEST set snat_addr HTTP:header X-Forwarded-Forlog “X-Fowarded-For is HTTP:header X-Forwarded-For“when LB_SELECTED snat $snat_addr,55,HTTPS,SSL Offload 替换源地址
30、,Server 端需要在TCP连接里面获取客户端源地址,SNAT的源地址会话保持,when RULE_INIT #log local5.warning “-$cnc_snatpool“ set snat_length llength $cnc_snatpool log local5.warning “-snat pool length is $snat_length“ when LB_SELECTED #set client_addr “10.1.1.33“ set client_ip IP:client_addr set client_last getfield $client_ip “.“
31、 4 #log local5.warning “-client last is $client_last “ set snat_addr lindex $cnc_snatpool expr $client_last%$snat_length #log local5.warning “-client snat addr $snat_addr“ snat $snat_addr ,56,Timeout定义和镜像,SNAT可以在两台设备之间镜像 SNAT对于TCP idle Timeout 和UDP idle Timeout可以有独立的设置,57,Monitor工作原理,58,Monitor如何向外发
32、送请求,所有的Monitor请求都是由bigd进程发起 Monitor流量要穿过TMM发送到Server或者其他位置 在b conn中可以看到Monitor的流量,59,TMM,bigd,重要的Monitor-TCP,Send String: 发送的请求字符串,支持C语言的转义符 Receive String:在返回的内容中查询的字符串 Transparent:数据包内的三层发送目的地是Alias Address,二层的发送目的地是Node Address的MAC地址,60,重要的Monitor-External Monitor,MEMBER=“$1“; PORT=“$2“; HOST_2_R
33、ESOLV=“$3“; $# -ne 3 & exit 255PIDFILE=“/var/run/pinger.$MEMBER.eav.$PORT.pid“if -f “$PIDFILE“ thenkill -9 cat “$PIDFILE“ /dev/null 2&1 fiecho “$“ “$PIDFILE“MEMBER=echo $1 | sed s/:ffff:/ 2/dev/nulllog_info() echo $* | logger -p local0.info # # stock syslog-ng destinations - # local0.info - /var/log
34、/ltm # local4.info - /var/log/ltm # local1.info - /var/log/messages # local3.info - /var/log/messages# this is for debug only! do not call log_info below unless# you want to see your syntax and the shell evaluation of # variables (variable exansion),61,HA工作原理,62,HA工作模式-Active/Active,每个VS对外提供不同的服务 服务
35、器必须分组,分别指不同的网关 在使用SNAT的情况下不需要服务器指不同的网关(建议模式),63,VS 1,VS 2,串口心跳线的工作模式,没有数据在串口心跳线之间传输 两台设备是通过监控Failover 线上的电压来决定是否切换,备机一旦检测到主机电压为0则进行接管动作 切换时间在200-300毫秒之间 SOD(Switch Over Deamon)进程负责监控Failover线上的电压,64,网络心跳线的工作模式,两台设备之间通过网络互相发送心跳信号 Network Failover 可以设置2条路径 Network Failover和串口心跳线Failover可以同时使用 在10.0里的Network Failover有巨大的变化,65,