服务器集群技术概述
当前很多大型的应用系统都使用了服务器集群技术,集群将相同的服务部署在多台服务器上构成一个整体来对外提供服务,这些集群有的是 Web 应用服务器集群,有的是数据库服务器集群等等。而在 Web 应用服务器集群的最前端,一般总会有一台负载均衡服务器,作为客户端流量的入口,负责将客户端的请求转发给合适的服务器来处理。
负载均衡
负载均衡器一般分为硬件和软件两种。商用的负载均衡硬件常见的有 F5、绿盟、梭子鱼等,一般价格比较高昂,普通企业难以承受,而负载均衡软件价格则相对便宜,它们很多甚至是开源免费的,因此受到了许多企业的青睐,常见的有 LVS、Nginx、HAProxy 等。
LVS
LVS 全名 Linux Virtual Server,意为 Linux 虚拟服务器,它是一个虚拟的服务器集群系统,主要用于服务器集群的负载均衡。由于它工作在 OSI 的第四层,也就是网络层,因此我们通常称它为四层负载均衡。LVS 的抗负载能力很强,因为 LVS 只负责分发请求,流量并不经过它,这个特点决定了它在负载均衡软件中性能是最强的。同时,LVS 的应用范围也比较广,因为工作在第四层,所以它几乎可以对所有的应用做负载均衡。当然,LVS 的缺点也有很多:比如对网络稳定性要求高,不支持动静分离、正则处理等,在大型网站中实施复杂,维护成本也很高。
在 LVS 中,具体提供 IP 负载均衡功能的模块是 IPVS(IP Virtual Server,IP 虚拟服务器),由于其工作在第四层,因此与 iptables 操作的 netfilter 一样,是直接工作在内核空间上的。在 Linux 2.4 以前,使用 LVS 需要重新编译内核以支持 LVS 的功能,但是从 Linux 2.4 开始,内核已经集成了 LVS 的各个功能模块,因此我们可以直接使用它了。目前主流的 Linux 发行版中默认都集成了 LVS 的各个功能模块。
Nginx
Nginx 的用途比较广泛,它不光是一个高性能的 HTTP 服务器,同时也支持反向代理和负载均衡。它工作在 OSI 的第七层,也就是我们常说的应用层,它可以针对 HTTP 应用做一些分流的策略,比如可以针对域名、目录结构等,安装配置简单且对网络稳定性要求较小,基本只要能够 PING 通就可以进行负载均衡,但是它仅支持 HTTP、HTTPS 和 Email 协议,适用范围就要比 LVS 小很多,并且也不支持 Session 会话和 Cookie 引导。
HAProxy
HAProxy 使用简单,它支持两种工作模式,分别工作在 OSI 的第四层和第七层。与 Nginx 不同的是,它的主要功能就是负载均衡。它的出现弥补了 Nginx 不支持 Session 会话和 Cookie 引导的不足,并且在负载均衡的处理速度和并发上要优于 Nginx。
高可用
只有一个负载均衡节点的集群会存在单点问题,也就是说,负载均衡节点可能会因为一些原因宕机,此时客户端流量无法被转发,从而导致服务不可用。因此,一般的负载均衡节点至少需要两个,可以是一主一备,也可以是双主。接下来还需要通过某种方式,使集群能够及时发现和剔除出现问题的负载均衡节点,同时使所有的流量切换到正常的负载均衡节点上,从而实现负载均衡与集群的高可用。
Keepalived
Keepalived 是目前比较常用的高可用组件。起初它是专为 LVS 设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能,可以作为其他服务的高可用组件使用。
VRRP 全称 Virtual Router Redundancy Protocol,意为虚拟路由冗余协议,是由 IETF 提出的用于解决局域网中静态网关单点失效问题的路由协议,在 1998 年正式成为标准,协议编号为:RFC2338。通过 VRRP 协议,可以把几台路由设备联合组成一台虚拟的路由设备,并将虚拟路由设备的 IP 地址(VIP,Virtual IP Address,虚拟 IP 地址)作为用户的默认网关与外部网络进行通信。在正常情况下,主设备需要处理两个主要任务,一个是负责转发数据流,另一个就是周期性的发送 VRRP 协议报文,而作为备组的设备则主要负责接收 VRRP 报文。当主设备遇到问题时,备组将无法接收到报文,此时备组中优先级较高的设备将被选举出来作为主设备继续负责转发,从而实现网关的冗余备份功能和链路的冗余功能。