负载均衡
1. 负载均衡的作用 负载均衡(Load Balance LB),是通过单一的入口,使用某些算法,对用户流量进行分发,使用户请求合理的分配到多个服务器节点中的一种技术。 现代应用通常需要同时对大量用户提供服务,此时单台机器已经难以承担这些需求,因此需要使用多个节点同时为用户提供服务,但显然不能让用户记住多个域名甚至IP。LB位于用户与服务器集群之间,充当不可见的协调者,确保均等使用所有资源服务器。 2. DNS负载均衡 基于DNS的负载均衡比较简单,其原理是为一个域名配置多个A记录,这样当对域名进行请求时,就可以通过返回不同的域名进行流量的分配。 一种最常见的 DNS 负载平衡技术是循环 DNS。即在请求到来时,IP地址以循环方式轮换返回,请请求分散到关联的服务器上。 当然,也可以采用其他负载均衡策略,例如根据IP地址的地域等分配较劲的服务器。 3. 四层LB与七层LB 从形式上来说LB都可以分为两种:四层负载均衡和七层负载均衡。其中四层负载均衡的优势是性能高,七层负载均衡的优势是功能强。这里的四层、七层指的是OSI网络分层标准中的第四层传输层和第七层应用层。 3.1 四层LB 这里存在一个误解: **四层负载均衡并不是只工作在第四层传输层,事实上它们主要工作在二层(数据链路层)和三层(网络层)上。**根据OSI模型,当数据包到达第四层,其实已经到达了目标主机上,所以此时显然不存在什么流量转发了。四层负载均衡的真正含义是:这些工作模式的共同特点是都维持着同一个TCP连接。 数据链路层LB 数据链路层数据帧中包括有目的MAC地址和源MAC地址,数据链路层负载均衡所做的工作,是修改请求的数据帧中的 MAC 目标地址,让用户原本是发送给负载均衡器的请求的数据帧,被二层交换机根据新的 MAC 目标地址,转发到服务器集群中,对应的服务器的网卡上,这样真实服务器就获得了一个原本目标并不是发送给它的数据帧。 数据链路层的负载均衡只对目标MAC地址进行了修改,不涉及其他层次,因此对于更上层的网络层来说,数据是无变化的,这样网络层才能正常工作。 这是因为第三层的数据包,也就是 IP 数据包中,包含了源(客户端)和目标(均衡器)的 IP 地址,只有真实服务器保证自己的 IP 地址与数据包中的目标 IP 地址一致,这个数据包才能被正确处理。 所以,我们在使用这种负载均衡模式的时候,需要把真实物理服务器集群所有机器的虚拟 IP 地址(Virtual IP Address,VIP),配置成跟负载均衡器的虚拟 IP 一样,这样经均衡器转发后的数据包,就能在真实服务器中顺利地使用。 另外,也正是因为实际处理请求的真实物理服务器 IP 和数据请求中的目的 IP 是一致的,所以响应结果就不再需要通过负载均衡服务器进行地址交换,我们可以把响应结果的数据包直接从真实服务器返回给用户的客户端,避免负载均衡器网卡带宽成为瓶颈,所以数据链路层的负载均衡效率是相当高的。 这种传输方式被称为三角传输,返回的流量不经过LB,避免负载均衡器网卡带宽成为瓶颈,效率较高. 数据链路层的劣势也很明显,因为其需要通过修改MAC地址的方式进行工作,因此真实目标服务器必须和LB服务器在同一子网下。 网络层LB 与数据链路层类似的,网络层是通过修改三层数据包的目标IP地址进行工作: 其修改方式主要有两种: 第一种是保持原来的数据包不变,新创建一个数据包,把原来数据包的 Headers 和 Payload 整体作为另一个新的数据包的 Payload,在这个新数据包的 Headers 中,写入真实服务器的 IP 作为目标地址,然后把它发送出去。 这种方式需要在接收时重新进行拆包,取出原来要发送的数据包,这样,IP数据包的源IP和目的IP无变化,真实服务器仍然可以直接将数据发送给客户端,不需要经过LB,也即仍具有三角传输的特性。 这种方式被称为IP隧道,因为其工作在网络层,可以跨VLAN进行传输,但要求目标服务器支持IP隧道协议。 第二种方式直接把数据包 Headers 中的目标地址改掉,修改后原本由用户发给均衡器的数据包,也会被三层交换机转发送到真实服务器的网卡上,而且因为没有经过 IP 隧道的额外包装,也就无需再拆包了。 但这样的话,真实服务器在将数据返回给客户端时,就会使用自己的IP作为源IP,客户端一看:“我想要的是A服务器响应,你给我来了个B服务器响应,滚犊子”,不能正常处理这个应答,因此必须让响应返回LB再发给客户端。...