Linux IPVS故障轉(zhuǎn)移原理
Linux中的IPVS(IP Virtual Server)是一種用于負載均衡和故障轉(zhuǎn)移的技術(shù)。在IPVS中,可以使用多個真實服務(wù)器(Real Server)來提供服務(wù),并將它們隱藏在一個虛擬IP地址(Virtual IP)后面。當某個真實服務(wù)器發(fā)生故障時,IPVS會將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器,以實現(xiàn)故障轉(zhuǎn)移。
以下是幾個舉例說明IPVS的故障轉(zhuǎn)移場景:
Web服務(wù)器群集:假設(shè)你有一個由多個Web服務(wù)器組成的群集,每個服務(wù)器都提供相同的網(wǎng)站。你可以將這些服務(wù)器配置為IPVS群集,并使用一個虛擬IP地址來提供服務(wù)。如果其中一個服務(wù)器發(fā)生故障(如硬件故障或服務(wù)崩潰),IPVS將自動將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器,確保用戶的請求得到處理。
數(shù)據(jù)庫服務(wù)器群集:在高負載的數(shù)據(jù)庫環(huán)境中,可以將多個數(shù)據(jù)庫服務(wù)器配置為IPVS群集,并使用虛擬IP地址作為數(shù)據(jù)庫訪問的入口點。如果某個數(shù)據(jù)庫服務(wù)器發(fā)生故障,IPVS將自動將連接重定向到其他可用的數(shù)據(jù)庫服務(wù)器,確保數(shù)據(jù)庫服務(wù)的高可用性和無縫的故障轉(zhuǎn)移。
應(yīng)用服務(wù)器群集:如果你有一個由多個應(yīng)用服務(wù)器組成的群集,每個服務(wù)器運行不同的應(yīng)用程序或服務(wù),你可以使用IPVS來平衡和管理流量。如果某個應(yīng)用服務(wù)器出現(xiàn)故障,IPVS會將請求轉(zhuǎn)發(fā)到其他正常工作的服務(wù)器,從而確保服務(wù)的連續(xù)性和可用性。
郵件服務(wù)器:在郵件服務(wù)器環(huán)境中,IPVS可用于實現(xiàn)故障轉(zhuǎn)移和負載均衡。例如,你可以配置多個郵件服務(wù)器作為IPVS群集,并使用虛擬IP地址作為郵件流量的入口。如果其中一個郵件服務(wù)器發(fā)生故障,IPVS將自動將郵件流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器,確保郵件服務(wù)的可用性和可靠性。

IPVS的故障轉(zhuǎn)移是基于一些具體的觸發(fā)條件來進行的。下面是幾種常見的IPVS故障轉(zhuǎn)移觸發(fā)條件的舉例:
網(wǎng)絡(luò)連接超時:當一個真實服務(wù)器無法在指定的時間內(nèi)響應(yīng)來自客戶端的請求時,IPVS可以將其標記為故障,然后將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器。例如,如果一個服務(wù)器的網(wǎng)絡(luò)連接超時時間設(shè)置為5秒,當它在5秒內(nèi)無法回復(fù)請求時,IPVS會觸發(fā)故障轉(zhuǎn)移。
健康檢查失?。篒PVS可以定期對真實服務(wù)器進行健康檢查,以確保它們正常工作。如果一個服務(wù)器的健康檢查失?。ㄈ鐭o法響應(yīng)或返回錯誤狀態(tài)碼),IPVS會將其標記為故障,并將請求轉(zhuǎn)發(fā)到其他正常工作的服務(wù)器。
網(wǎng)絡(luò)連接重置:當IPVS檢測到與真實服務(wù)器的網(wǎng)絡(luò)連接被重置(RST)時,它可以將該服務(wù)器標記為故障,并將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器。網(wǎng)絡(luò)連接重置可能是由于服務(wù)器崩潰、網(wǎng)絡(luò)故障或其他問題引起的。
服務(wù)器負載過高:IPVS可以通過監(jiān)控服務(wù)器的負載情況來進行故障轉(zhuǎn)移。如果一個服務(wù)器的負載超過了預(yù)設(shè)的閾值(如CPU利用率或內(nèi)存使用率),IPVS可以將其標記為故障,并將流量轉(zhuǎn)發(fā)到其他負載較低的服務(wù)器。
服務(wù)器宕機:如果IPVS檢測到某個服務(wù)器完全宕機(無法響應(yīng)任何請求),它會立即將其標記為故障,并將請求轉(zhuǎn)發(fā)到其他可用的服務(wù)器。

IPVS的故障轉(zhuǎn)移是基于服務(wù)器的可用性狀態(tài)進行觸發(fā)的。以下是一些可能導(dǎo)致IPVS故障轉(zhuǎn)移的具體觸發(fā)條件的示例:
服務(wù)器故障:如果IPVS群集中的某個真實服務(wù)器發(fā)生故障,例如硬件故障、操作系統(tǒng)崩潰或服務(wù)崩潰,IPVS將檢測到該服務(wù)器不可用,并將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器。
服務(wù)器負載過高:當某個真實服務(wù)器的負載超過預(yù)設(shè)的閾值時,IPVS可以將其視為故障,并將新的連接請求轉(zhuǎn)發(fā)到其他可用的服務(wù)器。這可以確保服務(wù)器不會被過度負載,保持服務(wù)的可用性。
服務(wù)器網(wǎng)絡(luò)故障:如果IPVS群集中的某個服務(wù)器的網(wǎng)絡(luò)連接中斷或丟失,IPVS將無法到達該服務(wù)器,并將其標記為不可用。IPVS將流量轉(zhuǎn)發(fā)到其他網(wǎng)絡(luò)連接正常的服務(wù)器,確保服務(wù)的連續(xù)性。
監(jiān)測腳本或代理的檢測:可以使用自定義的監(jiān)測腳本或代理來監(jiān)測真實服務(wù)器的可用性。這些監(jiān)測程序可以周期性地檢查服務(wù)器的健康狀態(tài),例如通過Ping請求、HTTP請求或特定服務(wù)的自定義檢查。如果監(jiān)測程序檢測到服務(wù)器不可用,IPVS將觸發(fā)故障轉(zhuǎn)移并將流量導(dǎo)向其他可用的服務(wù)器。
人工干預(yù):管理員可以手動標記某個服務(wù)器為不可用,例如在服務(wù)器維護、升級或故障排除期間。在這種情況下,IPVS將立即將流量轉(zhuǎn)發(fā)到其他可用的服務(wù)器。

要使用ipvsadm查看IPVS故障轉(zhuǎn)移的情況,你可以執(zhí)行以下命令:
ipvsadm -Ln --stats
該命令將顯示當前IPVS的配置和統(tǒng)計信息,包括已經(jīng)發(fā)生故障轉(zhuǎn)移的IP地址。
輸出結(jié)果中的每一行都表示一個虛擬服務(wù)器(Virtual Server)的配置。在每一行中,你會看到一個或多個真實服務(wù)器(Real Server)的IP地址和端口號。如果發(fā)生了故障轉(zhuǎn)移,IPVS會顯示已經(jīng)轉(zhuǎn)發(fā)到的真實服務(wù)器的IP地址。
下面是一個示例輸出:
在這個示例中,虛擬服務(wù)器的IP地址是192.168.1.100,使用的調(diào)度算法是rr(Round Robin)。下面列出了三個真實服務(wù)器的IP地址和端口號。如果發(fā)生了故障轉(zhuǎn)移,ActiveConn(活動連接)列將顯示轉(zhuǎn)發(fā)到每個服務(wù)器的連接數(shù)。如果某個服務(wù)器不可用并發(fā)生了故障轉(zhuǎn)移,你會注意到ActiveConn列的變化。
通過觀察ActiveConn列中的值,你可以了解到故障轉(zhuǎn)移發(fā)生的情況,并判斷哪些IP地址經(jīng)歷了故障轉(zhuǎn)移。

使用ipvsadm命令可以查看IPVS的配置和狀態(tài)信息,包括發(fā)生故障轉(zhuǎn)移的IP地址。要查看發(fā)生故障轉(zhuǎn)移的IP地址,可以執(zhí)行以下命令:
ipvsadm -Ln --stats
該命令將顯示IPVS的詳細配置信息,并列出每個虛擬服務(wù)器的狀態(tài)統(tǒng)計信息,包括活動連接數(shù)、數(shù)據(jù)包計數(shù)等。在輸出中,你可以查找"Real Server"部分,其中列出了每個真實服務(wù)器的IP地址和端口號。
在發(fā)生故障轉(zhuǎn)移后,IPVS會將流量從一個故障的服務(wù)器轉(zhuǎn)發(fā)到另一個可用的服務(wù)器。如果發(fā)生故障轉(zhuǎn)移,你可以注意以下幾點來確定故障轉(zhuǎn)移的IP地址:
查看"Real Server"部分中的"ActiveConn"列,其中顯示了每個真實服務(wù)器的活動連接數(shù)。如果某個服務(wù)器的活動連接數(shù)為0,則表示該服務(wù)器可能發(fā)生了故障轉(zhuǎn)移。
比較"Real Server"部分的"InActConn"列和之前的輸出。"InActConn"列顯示了每個真實服務(wù)器的非活動連接數(shù)。如果某個服務(wù)器的非活動連接數(shù)增加,而活動連接數(shù)為0,那么該服務(wù)器可能經(jīng)歷了故障轉(zhuǎn)移。
檢查"Real Server"部分的其他狀態(tài)列,如"BytesIn"和"BytesOut"等,觀察它們的變化情況。如果某個服務(wù)器的數(shù)據(jù)傳輸量突然減少或停止,并且其他服務(wù)器的數(shù)據(jù)傳輸量增加,那么可能發(fā)生了故障轉(zhuǎn)移。
通過分析這些信息,你可以確定發(fā)生故障轉(zhuǎn)移的IP地址,并了解故障轉(zhuǎn)移的情況。請注意,IPVS的輸出可能會根據(jù)配置和環(huán)境的不同而有所差異,因此具體的列和信息可能會有所變化。

要使用ipvsadm查看IPVS發(fā)生故障轉(zhuǎn)移的IP地址列表,可以執(zhí)行以下命令:
ipvsadm -ln
該命令將顯示IPVS配置的詳細信息,包括虛擬IP地址(Virtual Address)和實際服務(wù)器(Real Server)的列表。在列表中,你可以查找"ActiveConn"列,它顯示了每個實際服務(wù)器當前活動的連接數(shù)。如果某個服務(wù)器發(fā)生故障轉(zhuǎn)移,你將注意到連接數(shù)從一個實際服務(wù)器轉(zhuǎn)移到另一個實際服務(wù)器。
例如,以下是ipvsadm輸出的示例:
在這個示例中,虛擬IP地址為192.168.1.100,使用了"Weighted Least Connection"調(diào)度器(wlc)。在"Forward"列下,你可以看到三個實際服務(wù)器(192.168.2.1、192.168.2.2和192.168.2.3),它們分別具有不同的權(quán)重(Weight)。"ActiveConn"列顯示了每個實際服務(wù)器當前的活動連接數(shù)。
如果發(fā)生故障轉(zhuǎn)移,你可以觀察到"ActiveConn"列中的連接數(shù)從一個實際服務(wù)器增加到另一個實際服務(wù)器,這表明故障轉(zhuǎn)移已經(jīng)發(fā)生。
請注意,以上命令需要在具有適當權(quán)限的Linux系統(tǒng)上執(zhí)行(通常需要root權(quán)限)。