负载均衡和会话保持
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A10负载均衡和会话保持
在大多数的企业级应用中,客户端与服务器经常需要通过多次的交互才能完成一次事务处理或一笔交易。由于这些交互与用户的身份是紧密相关的,因此,与这个客户端相关的应用请求,往往需要转发至一台服务器完成,而不能被负载均衡器转发至不同的服务器上进行处理。为了实现这一机制,我们需要在负载均衡上配置会话保持(Session Persistence)机制,以确保客户端与应用系统之间的交互不会因为部署了负载均衡而发生问题。
实际上,会话保持机制与负载均衡的基本功能是完全矛盾的。负载均衡希望将来自客户端的连接、请求均衡的转发至后端的多台服务器,以避免单台服务器负载过高;而会话保持机制却要求将某些请求转发至同一台服务器进行处理。因此,在实际的部署环境中,我们要根据应用环境的特点,选择适当的会话保持机制。
连接和会话的区别
在介绍会话保持技术之前,我们必须先花点时间弄清楚一些概念:什么是连接(Connection)、什么是会话(Session),以及这二者之间的区别。
需要特别强调的是,如果我们仅仅是谈论负载均衡,会话和连接往往具有相同的含义。但是,如果我们和开发人员沟通这些术语时,这两个术语却具有截然不同的含义。希望广大读者能够注意这其中的区别。在本文中,我想着重说明的是开发人员眼中的连接及会话的含义。
通常,在普通的客户端或服务器上,我们把具有相同[源地址:端口],和相同[目的地址:端口]的数据包定义为一个连接。下表是Windows系统中用命令 netstat –an输出的部分系统连接状态。
1.C:\>netstat -an
2.
3.活动连接
4.
5.协议本地地址外部地址状态
6.
7....<省略部分输出内容>...
8. TCP 172.31.20.53:47669 122.225.67.240:80 ESTABLISHED
9. TCP 172.31.20.53:47670 122.225.67.240:80 ESTABLISHED
10. TCP 172.31.20.53:47671 122.228.243.240:80 ESTABLISHED
11. TCP 172.31.20.53:47672 110.75.34.138:80 TIME_WAIT
12. TCP 172.31.20.53:47673 110.75.34.138:80 TIME_WAIT
13. TCP 172.31.20.53:47674 110.75.34.138:80 TIME_WAIT
14. TCP 172.31.20.53:47675 122.225.67.240:80 ESTABLISHED
15. TCP 172.31.20.53:47676 122.225.67.240:80 ESTABLISHED
16. TCP 172.31.20.53:47677 122.228.243.240:80 ESTABLISHED
17. TCP 172.31.20.53:47679 110.75.24.105:80 ESTABLISHED
18. TCP 172.31.20.53:47681 122.225.67.240:80 ESTABLISHED
19. TCP 172.31.20.53:47682 122.225.67.240:80 ESTABLISHED
20. TCP 172.31.20.53:47683 60.191.143.240:80 ESTABLISHED
21. TCP 172.31.20.53:47684 60.191.143.240:80 ESTABLISHED
22. TCP 192.168.1.4:18231 203.208.46.29:443 CLOSE_WAIT
23....<省略部分输出内容>...
对于负载均衡来说,情况则稍微发生了一些变化。负载均衡会将来自相同[源IP:端口],发送到相同[目的IP:端口]的数据包,通过NAT技术做一些转换后,转发至后端的某台固定的服务器。如下表所示,虽然两个TCP连接具有相同的源地址,但源端口不同,AX负载均衡仍然将其识别为两个不同的连接,并且转发至两台不同的服务器进行处理。
1.AX#show session
2....<省略部分输出内容>...
3.
4.Prot Forward Source Forward Dest Reverse Source
Reverse Dest Age Hash
5.--------------------------------------------------------------------
---------------------------------------
6.Tcp 103.104.15
7.122:1619 61.22.215.151:80 172.30.2.83:80
103.104.157.122:1619 60 1
7.
8.Tcp 103.104.157.122:1621 61.22.215.151:80 172.30.2.84:80
103.104.157.122:1621 120 3
9.
10....<省略部分输出内容>...
对于同一个连接中的数据包,负载均衡会将其进行NAT转换后,转发至后端固定的服务器进行处理,这是负载均衡最基本、最原始的功能。负载均衡系统内部会专门有一张表来记录这些连接的状况,包括:[源IP:端口]、[目的IP:端口]、[服务器IP:端口]、空闲超时时间(Idle Timeout)等等。这里需要特别说明一下超时时间的意义和定义。
由于负载均衡内部记录连接状态的这张表需要消耗系统的内存资源,因此,这张表不可能无限大,所有厂家都会有一定的限制。这张表的大小一般称之为最大并发连接数,也就是系统同时能够容纳的连接数量。考虑到建立这些连接的客户端或服务器会发生一些异常状况,导致这些连接不能被正常终结掉,因此,负载均衡的当前连接状态表项中,设计了一个空闲超时时间的参数。这个参数定义为,当该连接在一定时间内无流量通过时,负载均衡会自动删除该连接条目,释放系统资源。在AX中,这个空闲超时时间一般设置为120秒。也就是说,如果在120秒内,对于某个连接,AX没有收到任何来自客户端或服务器端的数据包,AX会主动删除该连接,以释放系统资源。
之所以在这里强调这个参数,是为了和后面介绍会话保持机制时提到的会话保持时间有所区别。
理解了连接的概念,那么对于会话的概念就会比较容易理解一些。在开发人员眼中,会话一般是指从用户登录应用系统,进行事务处理,直至退出应用系统的整个过程。因此,对于相同的会话,客户端可能会建立多个连接进行处理。如果在客户端和服务器之间部署了负载均