Linux IPVS故障转移原理
Linux中的IPVS(IP Virtual Server)是一种用于负载均衡和故障转移的技术。在IPVS中,可以使用多个真实服务器(Real Server)来提供服务,并将它们隐藏在一个虚拟IP地址(Virtual IP)后面。当某个真实服务器发生故障时,IPVS会将流量转发到其他可用的服务器,以实现故障转移。
以下是几个举例说明IPVS的故障转移场景:
Web服务器群集:假设你有一个由多个Web服务器组成的群集,每个服务器都提供相同的网站。你可以将这些服务器配置为IPVS群集,并使用一个虚拟IP地址来提供服务。如果其中一个服务器发生故障(如硬件故障或服务崩溃),IPVS将自动将流量转发到其他可用的服务器,确保用户的请求得到处理。
数据库服务器群集:在高负载的数据库环境中,可以将多个数据库服务器配置为IPVS群集,并使用虚拟IP地址作为数据库访问的入口点。如果某个数据库服务器发生故障,IPVS将自动将连接重定向到其他可用的数据库服务器,确保数据库服务的高可用性和无缝的故障转移。
应用服务器群集:如果你有一个由多个应用服务器组成的群集,每个服务器运行不同的应用程序或服务,你可以使用IPVS来平衡和管理流量。如果某个应用服务器出现故障,IPVS会将请求转发到其他正常工作的服务器,从而确保服务的连续性和可用性。
邮件服务器:在邮件服务器环境中,IPVS可用于实现故障转移和负载均衡。例如,你可以配置多个邮件服务器作为IPVS群集,并使用虚拟IP地址作为邮件流量的入口。如果其中一个邮件服务器发生故障,IPVS将自动将邮件流量转发到其他可用的服务器,确保邮件服务的可用性和可靠性。

IPVS的故障转移是基于一些具体的触发条件来进行的。下面是几种常见的IPVS故障转移触发条件的举例:
网络连接超时:当一个真实服务器无法在指定的时间内响应来自客户端的请求时,IPVS可以将其标记为故障,然后将流量转发到其他可用的服务器。例如,如果一个服务器的网络连接超时时间设置为5秒,当它在5秒内无法回复请求时,IPVS会触发故障转移。
健康检查失败:IPVS可以定期对真实服务器进行健康检查,以确保它们正常工作。如果一个服务器的健康检查失败(如无法响应或返回错误状态码),IPVS会将其标记为故障,并将请求转发到其他正常工作的服务器。
网络连接重置:当IPVS检测到与真实服务器的网络连接被重置(RST)时,它可以将该服务器标记为故障,并将流量转发到其他可用的服务器。网络连接重置可能是由于服务器崩溃、网络故障或其他问题引起的。
服务器负载过高:IPVS可以通过监控服务器的负载情况来进行故障转移。如果一个服务器的负载超过了预设的阈值(如CPU利用率或内存使用率),IPVS可以将其标记为故障,并将流量转发到其他负载较低的服务器。
服务器宕机:如果IPVS检测到某个服务器完全宕机(无法响应任何请求),它会立即将其标记为故障,并将请求转发到其他可用的服务器。

IPVS的故障转移是基于服务器的可用性状态进行触发的。以下是一些可能导致IPVS故障转移的具体触发条件的示例:
服务器故障:如果IPVS群集中的某个真实服务器发生故障,例如硬件故障、操作系统崩溃或服务崩溃,IPVS将检测到该服务器不可用,并将流量转发到其他可用的服务器。
服务器负载过高:当某个真实服务器的负载超过预设的阈值时,IPVS可以将其视为故障,并将新的连接请求转发到其他可用的服务器。这可以确保服务器不会被过度负载,保持服务的可用性。
服务器网络故障:如果IPVS群集中的某个服务器的网络连接中断或丢失,IPVS将无法到达该服务器,并将其标记为不可用。IPVS将流量转发到其他网络连接正常的服务器,确保服务的连续性。
监测脚本或代理的检测:可以使用自定义的监测脚本或代理来监测真实服务器的可用性。这些监测程序可以周期性地检查服务器的健康状态,例如通过Ping请求、HTTP请求或特定服务的自定义检查。如果监测程序检测到服务器不可用,IPVS将触发故障转移并将流量导向其他可用的服务器。
人工干预:管理员可以手动标记某个服务器为不可用,例如在服务器维护、升级或故障排除期间。在这种情况下,IPVS将立即将流量转发到其他可用的服务器。

要使用ipvsadm查看IPVS故障转移的情况,你可以执行以下命令:
ipvsadm -Ln --stats
该命令将显示当前IPVS的配置和统计信息,包括已经发生故障转移的IP地址。
输出结果中的每一行都表示一个虚拟服务器(Virtual Server)的配置。在每一行中,你会看到一个或多个真实服务器(Real Server)的IP地址和端口号。如果发生了故障转移,IPVS会显示已经转发到的真实服务器的IP地址。
下面是一个示例输出:
在这个示例中,虚拟服务器的IP地址是192.168.1.100,使用的调度算法是rr(Round Robin)。下面列出了三个真实服务器的IP地址和端口号。如果发生了故障转移,ActiveConn(活动连接)列将显示转发到每个服务器的连接数。如果某个服务器不可用并发生了故障转移,你会注意到ActiveConn列的变化。
通过观察ActiveConn列中的值,你可以了解到故障转移发生的情况,并判断哪些IP地址经历了故障转移。

使用ipvsadm命令可以查看IPVS的配置和状态信息,包括发生故障转移的IP地址。要查看发生故障转移的IP地址,可以执行以下命令:
ipvsadm -Ln --stats
该命令将显示IPVS的详细配置信息,并列出每个虚拟服务器的状态统计信息,包括活动连接数、数据包计数等。在输出中,你可以查找"Real Server"部分,其中列出了每个真实服务器的IP地址和端口号。
在发生故障转移后,IPVS会将流量从一个故障的服务器转发到另一个可用的服务器。如果发生故障转移,你可以注意以下几点来确定故障转移的IP地址:
查看"Real Server"部分中的"ActiveConn"列,其中显示了每个真实服务器的活动连接数。如果某个服务器的活动连接数为0,则表示该服务器可能发生了故障转移。
比较"Real Server"部分的"InActConn"列和之前的输出。"InActConn"列显示了每个真实服务器的非活动连接数。如果某个服务器的非活动连接数增加,而活动连接数为0,那么该服务器可能经历了故障转移。
检查"Real Server"部分的其他状态列,如"BytesIn"和"BytesOut"等,观察它们的变化情况。如果某个服务器的数据传输量突然减少或停止,并且其他服务器的数据传输量增加,那么可能发生了故障转移。
通过分析这些信息,你可以确定发生故障转移的IP地址,并了解故障转移的情况。请注意,IPVS的输出可能会根据配置和环境的不同而有所差异,因此具体的列和信息可能会有所变化。

要使用ipvsadm查看IPVS发生故障转移的IP地址列表,可以执行以下命令:
ipvsadm -ln
该命令将显示IPVS配置的详细信息,包括虚拟IP地址(Virtual Address)和实际服务器(Real Server)的列表。在列表中,你可以查找"ActiveConn"列,它显示了每个实际服务器当前活动的连接数。如果某个服务器发生故障转移,你将注意到连接数从一个实际服务器转移到另一个实际服务器。
例如,以下是ipvsadm输出的示例:
在这个示例中,虚拟IP地址为192.168.1.100,使用了"Weighted Least Connection"调度器(wlc)。在"Forward"列下,你可以看到三个实际服务器(192.168.2.1、192.168.2.2和192.168.2.3),它们分别具有不同的权重(Weight)。"ActiveConn"列显示了每个实际服务器当前的活动连接数。
如果发生故障转移,你可以观察到"ActiveConn"列中的连接数从一个实际服务器增加到另一个实际服务器,这表明故障转移已经发生。
请注意,以上命令需要在具有适当权限的Linux系统上执行(通常需要root权限)。