LVS(Linux Virtual Server)
LVS基本介绍
LVS是Linux Virtual Server的简称,它是一种负载均衡技术。
- 官方网站:www.linuxvirtualserver.org。
- 对于使用LVS的用户,他们很明确地需要利用LVS提供的负载均衡技术和Linux操作系统来构建一个高性能、高可用的服务器集群。
- 该集群具有卓越的可靠性、可扩展性和易操作性,以低成本实现最出色的服务性能。这种架构也是大多数中小型企业所推崇的。
LVS体系架构
LVS相关术语
在负载均衡系统中,DS代表Director Server,即前端负载均衡器节点,而RS则代表Real Server,即后端真实的工作服务器。此外,VIP是面向用户请求的IP地址,而DIP则是用于内部主机通讯的IP地址。最后,RIP指的是后端服务器的IP地址,而CIP则代表访问客户端的IP地址。
总的来说,这些术语在负载均衡系统中非常重要,因为它们描述了整个系统中不同组件之间的关系和功能。如果您正在研究或使用负载均衡技术,理解这些术语将有助于您更好地掌握该领域的知识。
2.2 请求通讯路径
用户在终端发起请求
-
负载均衡层(Load Balancer)
-
服务器群组层(Server Arrary)
-
共享存储层(Shared Storage)
负载均衡层(Load Balancer)
在LVS集群中,有一台或多台被称为负载调度器(Director Server),它处于集群最前端,并负责分发请求给服务器集群组层的应用服务器(Real Server)。另外,负载调度器还可以监控应用服务器的健康状况,动态地从LVS路由表中添加或剔除服务器,以实现高可用性和负载均衡。除此之外,LVS负载调度器也可以作为一个应用服务器,即兼职Real Server的身份。
总之,LVS是一种非常有效的负载均衡技术,通过将负载分布到不同的服务器上,可以提高系统的可靠性和性能。
服务器群组层(Server Arrary)
- 每个负责运行实际应用程序的服务器都构成一个或多个实际应用服务器。
- 当关联每个 Real Server 时,需要通过有效网络互连。
共享存储层(Shared Storage)
提供共享存储空间和确保内容一致性的存储区域。
LVS的NAT模式
实现原理
- 使用负载均衡算法:在选出一组可用的RS后,使用负载均衡算法将流量均衡地分配给这些RS节点,以提高整体的性能和可靠性。常见的负载均衡算法包括轮询、加权轮询、最少连接等。
- 去除重复请求:当存在多个请求同时发送到不同的RS时,可能会导致重复请求的问题。可以使用缓存技术或者请求去重算法来解决该问题。缓存技术可以将请求响应结果缓存起来,下次遇到相同的请求直接返回结果,从而降低RS的负载;请求去重算法则可以根据请求内容和源地址等信息判断是否为重复请求,并且只将非重复请求转发到RS。
- 采用双机热备份方案:在多目标IP的DNAT转发中,如果其中一个RS节点发生故障或宕机,需要及时切换到备用的RS节点上。因此,可以采用双机热备份方案,在主节点和备节点之间建立高可用性的通信链路,并且在主节点出现故障时自动切换到备节点,从而保证服务的连续性。
流程分析
- 当用户请求到达DS后,该请求的数据报文会先到内核空间的PREROUTING链。
- 在PREROUTING链中,可以根据报文的源IP和目标IP,使用iptables进行DNAT转发到相应的目标IP上。这样就可以实现多目标IP的转发需求。
- 为了避免重复转发,可以使用iptables的“conntrack”模块进行连接跟踪。当一个新连接建立时,会在内存中创建一条连接跟踪记录,包括源IP、目标IP、端口等信息。
- 在PREROUTING链中,可以根据连接跟踪记录判断是否需要进行转发。如果已经有一条连接跟踪记录,就不需要再次转发。
- 如果需要进行转发,可以使用iptables的“mark”模块进行标记。这个标记可以在后续的处理中用来区分不同的连接。这样就可以避免在PREROUTING链中反复处理相同的连接请求。
| 源地址 | 目的地址 |
|---|---|
| CIP | VIP |
- 当PREROUTING检查发现数据包的目标IP是本机时,将数据包转到INPUT链。然后,IPVS会比对数据包请求的服务是否为集群服务。如果是,它将修改数据包的目标IP地址为后端服务器的IP,然后将数据包发送到POSTROUTING链。因此,在此过程中,源IP为CIP,目标IP为RIP。
| 源地址 | 目的地址 |
|---|---|
| CIP | RIP |
-
通过 POSTROUTING 链进行选路,将数据包发送至 RS。
-
当RS比对发现目标为自己的IP后,RS会构建响应报文并将其发送回DS。在此过程中,RS的IP地址将被设置为源IP,而CIP将被设置为目标IP。
| 源地址 | 目的地址 |
|---|---|
| RIP | CIP |
- Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端,此时报文的源IP为VIP,目标IP为CIP;
| 源地址 | 目的地址 |
|---|---|
| VIP | CIP |
- 在响应客户端请求之前,Director Server会将报文中的源IP地址替换为自己的VIP地址,然后将修改后的报文发送给客户端。因此,在客户端收到响应报文时,源IP地址为VIP地址,目标IP地址为CIP地址。
LVS特性
- DS需要配备双网卡,其中一个网卡提供公网VIP服务,另一个网卡与RIP在同一网段中,提供DIP服务。
- RIP和DIP应该使用私有地址,并处于同一个网段中。RS的网关应指向DIP。
- 所有请求和响应报文都必须通过DS转发。在高负载情况下,DS可能成为系统瓶颈。
- RS可以选择任意操作系统。
配置大致步骤讲解
LVS-Server端
2023/5/13 20:26:12
- 配置路由转发:
要配置路由转发,需要在路由器上进行以下步骤:
- 确定网络拓扑结构和所需的路由。
- 配置路由器接口地址。
- 建立动态路由协议(例如 OSPF 或 BGP)或静态路由。
- 配置路由映射规则,将入站流量从一个接口转发到另一个接口。
- 配置NAT模式:
要配置NAT模式,需要在路由器上进行以下步骤:
- 为要进行NAT的接口指定IP地址池。
- 创建NAT规则,将源地址和端口号映射到新的源地址和端口号。
- 配置ACL以允许入站和出站数据包通过。
- 配置转发到RIP规则:
要将路由器配置为转发到RIP规则,需要在路由器上进行以下步骤:
- 配置RIP协议,并指定网络。
- 将路由器的接口与正确的协议关联。
- 确保其他路由器也运行了RIP协议,并且它们之间有可达性。
- 检查并排除任何故障。
LVS-client
将DIP配置到RS网关上执行。
LVS的TUN模式
实现原理
- 添加内层IP首部:将原有的IP报文添加一个新的内层IP首部。该IP首部包含源IP地址和目标IP地址,分别设置CIP和VIP。
- 添加外层IP首部:在内层IP首部之上添加一个新的外层IP首部。该IP首部包括源IP地址和目标IP地址,分别设置DIP和RIP。
通过这种方式,您可以在原有IP报文的基础上添加两个新的IP首部。这样做的好处是可以增加数据传输的安全性和可靠性,使其更难以被第三方攻击者截取或篡改。
请注意,根据网络环境和具体实现方式,添加额外的IP首部可能会导致一些延迟和处理开销。因此,在实现时需要进行充分的测试和评估。
流程分析
- 当用户请求到达DS后,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP;
| 源地址 | 目的地址 |
|---|---|
| CIP | VIP |
-
PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
-
IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP;
| IP首部源地址 | IP首部目的地址 | 源地址 | 目的地址 |
|---|---|---|---|
| DIP | RIP | CIP | VIP |
-
POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输),此时源IP为DIP,目标IP为RIP;
-
RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的tun0接口VIP,那么此时RS开始处理此请求,处理完成之后,通过tun0接口送出去向外传递,此时的源IP地址为VIP,目标IP为CIP;
| 源地址 | 目的地址 |
|---|---|
| VIP | CIP |
- 响应报文最终送达至客户端;
特性
- DIP、VIP、RIP应该使用公网地址,以确保网络可达性和稳定性。私有地址虽然可以用于内部通信,但无法在互联网上进行直接通信。
- RS的网关不应指向DIP,因为DIP是公网地址,RS无法通过其访问私有网络。相反,RS的网关应指向VPN或其他连接私有网络的方式。
- RS必须支持IP隧道,以便在公网上安全地传输数据。IP隧道是一种加密和封装技术,可将私有网络流量传输到公共网络,同时确保数据的机密性和完整性。这对于跨越多个地理位置的企业非常重要。
配置大致步骤讲解(代码就不详细粘贴了)
lvs-server
- 将VIP配置到tun0网卡上,并配置tun0隧道0网卡为独立网段;
- 添加隧道ip路由表,防止路由短缺;
- 配置TUN模式;
- 配置转发到RIP规则;
lvs-client
- 将VIP配置到tun0网卡上,配置tun0隧道0网卡为独立网段;
- 添加隧道ip路由表,防止路由短缺;
- 配置tun0/all忽略arp_ignore,宣告arp_announce;
LVS的DR模式
实现原理
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
流程分析
- 当用户请求到达DS后,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP;
| 源地址 | 目的地址 |
|---|
| CIP | VIP |
|---|
| 源MAC地址 | 目的MAC地址 |
|---|---|
| CIP-MAC | VIP-MAC |
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
- IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
| 源地址 | 目的地址 |
|---|
| CIP | VIP |
|---|
| 源MAC地址 | 目的MAC地址 |
|---|---|
| DIP-MAC | RIP-MAC |
-
由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至RS。
-
RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出,此时的源IP地址为VIP,目标IP为CIP; | 源地址|目的地址| | ------|---------|
|VIP |CIP | -
响应报文最终送达至客户端;
特性
- RIP可以是公网地址,也可以是私网地址;
- RIP、DIP需要在同一个IP网段;
- RIP的网关不能指向DIP,以确保响应报文不会经由DS,而是直接通过RS发往Client;
配置大致步骤讲解(代码就不详细粘贴了)
lvs-server
- 网卡可配置多个ip,将VIP配置到调度器eth0:0的一个端口上;
- 添加eth0:0路由表,防止路由短缺;
- 配置DR模式;
- 配置转发到RIP规则;
lvs-client
- 将VIP配置到回环接口的一个端口上;
- 添加lo:0路由表,防止路由短缺;
- 配置lo/all忽略arp_ignore,宣告arp_announce;