如何提升服务器性能?
-
增加服务器硬件如CPU、内存或换配置更高的服务器来提升单机的性能 很快会达到瓶颈, 而且成本和性能不成正比
-
应用分离 主机A(Apache) + 主机B(MySQL) 依然会达到瓶颈
-
采用集群技术
1 2 3
LB Load Balancing 负载均衡 HA High Availability 高可用 HPC High Performance Computing 高性能计算
整个集群提供一个唯一的访问入口,对最终用户透明
集群技术 | 说明 |
---|---|
LB | 负载均衡,即多个服务器同时提供相同的服务,并分担压力,但是至少三台服务器; |
HA | 又称双机 Active/Standby,即一个提供服务,另一个保持等待状态,至少两台服务器;(解决单节点故障) |
HPC | 高性能计算(High-Performance Computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件。高性能集群主要用于处理复杂的计算问题,应用在需要大规模科学计算的环境中,如天气预报、石油勘探与油藏模拟、分子模拟、基因测序等。高性能集群上运行的应用程序一般使用并行算法,把一个大的普通问题根据一定的规则分为许多小的子问题,在集群内的不同节点上进行计算,而这些小问题的处理结果,经过处理可合并为原问题的最终结果。由于这些小问题的计算一般是可以并行完成的,从而可以缩短问题的处理时间。 |
HA集群
- keepalived 基于vrrp协议,常用于实现前端调度器的高可用, 轻量级, 不需要共享存储
- corosync+pacemaker 实现的是Service的高可用, 需要共享存储, 一般用于多个节点
- Heartbeat 是基于主机或网络的服务的高可用方式, 不常用
LB集群
A. 硬件: F5 BIG-IP 性能好,成本高
B. 软件: LVS Nginx Haproxy SLB
LB 集群
三大主流软件负载均衡器对比(LVS — Nginx — Haproxy)
LVS:
- 工作在网络4层,抗负载能力强,性能高;
- 稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
- 应用范围比较广,可以对所有应用做负载均衡;
- 不支持通过访问URL或应用报文中的特性进行调度,不能做动静分离;
- 本身不支持对后端服务器的健康检测;
- 运行在内核空间,通过修改数据包实现分发,非代理模式。
Nginx:
- 主要做7层调度,可以针对http应用做灵活的配置,比如通过访问的URL或请求报文中的指定字段进行配置;
- 也支持4层调度(stream);
- Nginx安装和配置比较简单,测试起来比较方便;
- 也可以承担高的负载压力且稳定,一般能支撑万级并发;
- 自带后端服务器的健康检查机制;
- Nginx还能做Web服务器;
- 运行在用户空间,为代理模式。
LVS
Linux Virtual Server,也就是Linux虚拟服务器
LVS 概述
LVS(Linux虚拟服务器)是Linux内核的一部分,性能非常高。
它不真正提供服务,但它接受客户的访问,为整个集群提供唯一的入口。
真实服务器(Real Server):它真正提供服务,集群中每个Real Server可以是一台物理主机,也可以是虚拟机。
LVS相关术语:
- DS :Director Server。指的是前端负载均衡器节点。
- RS :Real Server。后端真实的工作服务器。
- VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。(virtual ip) 对外通信。
- DIP:Director Server IP,主要用于和内部主机通讯的IP地址。对内通信。
- RIP:Real Server IP,后端服务器的IP地址。
- CIP:Client IP,客户端的IP地址。
LVS 四种模式
• NAT:网络地址转换模式,通过修改数据包的目标IP地址来实现,进站/出站的数据流量都经过调度器。 客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器。调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。
• DR:直接路由模式,通过修改数据包的MAC地址来实现,只有进站的数据流量经过调度器。 在VS/DR 中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
• TUN: 隧道模式,只有进站的数据流量经过分发器,类似于DR模式,需要隧道设备支持。
• FULL-NAT:类似于NAT,修改数据包时不仅修改了目标地址,也修改了源地址。性能有所下降,但提高了安全性。
LVS 基本工作原理
根据上图:
- 当用户向负载均衡调度器(VIP)发起请求,调度器将请求发往至内核空间
- PREROUTING链首先会接收到用户请求,因目标IP确定是本机IP,将数据包发往INPUT链
- IPVS工作在INPUT链。 当用户请求到达INPUT时,IPVS判断用户访问的是否集群服务,如果是,IPVS会强行修改数据包,并将新的数据包发往POSTROUTING链,最终发给真实服务器。
LVS 三种工作模式特点
-
NAT 模式(NAT)
通过修改请求报文的目标IP地址实现分发到RS,RS通过LVS调度器响应客户端。 期间,无论是请求还是响应,都必须经过负载均衡器。
-
直接路由模式(DR)
负载均衡器和RS都拥有VIP。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。 调度器通过修改数据包的MAC地址实现分发,请求经过调度器,但响应由RS直接响应,不经过调度器。
-
IP隧道模式(VS-TUN)
类似于DR模式,但由于VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。
LVS 命令
|
|
NAT 模式
- 当用户的请求到达 Director Server时,请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 VIP。
- PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链。
- IPVS 比对数据包请求的服务是否为集群服务,如果是,修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 RIP。
- POSTROUTING 链通过选路,将数据包发送给 Real Server。
- Real Server 比对发现目标位自己的 IP,开始构建响应报文发回给 Director Server。此时报文的源 IP 为 RIP,目标 IP 为 CIP。
- Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。此时报文的源 IP 为 VIP,目标 IP 为 CIP。
特性
- RS 应该使用私有地址,RS 的网关必须指向 DIP。
- DIP 和 RIP 必须在同一个网段内。
- 请求和响应报文都需要经过 Director Server,高负载场景中,Director Server 容易成为性能瓶颈。
实验
📢注意:在 Director 机器要开启转发,两台服务器要把网关设置为 Director 的 ip
在两台 web 服务器上的 80 端口开启 web 服务。
在 Director 上设置:
|
|
在客户端访问 192.168.1.100就能访问 web 服务了
DR 模式
- 当用户请求到达 Director Server,会先到内核空间的 PREROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 VIP
- PREROUTING 检查发现数据包的目标是本机,将数据包发送至 INPUT 链
- IPVS 对比数据包发现访问的是集群服务,将源 MAC 地址改为 DIP 的 MAC 地址,将目标 MAC 地址修改为 RIP 的 MAC 地址,然后将数据包发至 POSTROUTING 链
- 由于 DS 和 RS 在同一网络中,所以是通过二层来传输。POSTROUTING 链检查目标 MAC 地址为 RIP 的 MAC 地址,那么此时数据包将会发至 Real Server
- RS 发现请求报文的 MAC 地址是自己的 MAC 地址,就接收此报文。处理完成之后,将响应报文向外发出,此时的源 IP 为 VIP,目标 IP 为 CIP。
特性
- RS跟Director Server必须在同一个物理网络中,且都要拥有VIP
- 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
- 不支持地址转换,也不支持端口映射
过程问题及解决方案
-
客户端要与VIP进行通信,因为是在同一个网段,所以发arp广播找VIP的MAC地址
RS上也有VIP,但我们不能直接让RS回应客户端的广播。
方法:将RS上的内核参数arp_ignore设置为1,将RS上的VIP设置在lo网卡上
将arp_ignore 设置为1,意思是只有ARP请求数据包所请求的IP地址属于当前接收网卡的IP地址,才会回应ARP请求。
默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求。
-
当DR收到这个广播之后,对其进行回应。客户端将请求报文发到DR上,DR对报文分发给RS。
DR如何分发到RS?
DR通过arp广播拿到相应RS的MAC地址,然后修改数据包的目标MAC为RIP_MAC,再将数据包发送出去
-
RS收到数据包后对其进行响应
为了使得客户端接收响应包,源IP必须要使用VIP进行封包。
方法:设置arp_announce的内容为2,意思是使用本机最好的IP来封包
怎么算是最好的本地IP地址?同一个网段下,子网掩码最长的IP地址被认为是最好的IP