專利名稱:一種網(wǎng)絡(luò)連接的接管方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域中網(wǎng)絡(luò)系統(tǒng)的備份技術(shù),尤其涉及一種網(wǎng)絡(luò)連接的接管方法。
背景技術(shù):
在客戶/服務(wù)器(Client/Server)架構(gòu)中,客戶端與服務(wù)端通過(guò)某種連接媒介進(jìn)行通信。傳輸控制協(xié)議(Transmission Control Protocol,TCP)在服務(wù)端和客戶端之間提供了基于非可靠網(wǎng)際協(xié)議(Internet Protocol,IP)層之上的可靠的、安全的邏輯鏈路和連接。IP層為TCP發(fā)送和接收可變長(zhǎng)度的以Internet數(shù)據(jù)報(bào)文封裝的分段和信息提供了可能。
圖1為Client/Server架構(gòu)中的TCP位置。圖1所示的場(chǎng)景中客戶端發(fā)送數(shù)據(jù),服務(wù)端接收數(shù)據(jù)。圖中僅僅給出了一個(gè)服務(wù)節(jié)點(diǎn)和一個(gè)客戶節(jié)點(diǎn)的情況。實(shí)際上,服務(wù)端既可以是單個(gè)服務(wù)節(jié)點(diǎn)也可以是一群向客戶節(jié)點(diǎn)提供服務(wù)的節(jié)點(diǎn)的集合,即服務(wù)節(jié)點(diǎn)集合工作在集群環(huán)境下。集群環(huán)境下的客戶端將整個(gè)集群當(dāng)作單個(gè)服務(wù)節(jié)點(diǎn)來(lái)看,并且所有集群內(nèi)部的操作對(duì)客戶端而言都是透明的。
圖2為集群環(huán)境下的客戶端與服務(wù)端的連接示意圖。圖2中客戶端位于集群之外(實(shí)際應(yīng)用中,客戶端往往不止一個(gè)節(jié)點(diǎn)),服務(wù)端是由多個(gè)服務(wù)節(jié)點(diǎn)構(gòu)成的集群,向客戶端提供服務(wù)。集群內(nèi)部的變化(這些變化可能是期望看到的負(fù)載均衡,也可能是不希望看到的節(jié)點(diǎn)失效或節(jié)點(diǎn)崩潰等)對(duì)客戶端而言是完全透明的,服務(wù)端對(duì)于客戶端的服務(wù)請(qǐng)求總是能夠響應(yīng)。
若要對(duì)已建立TCP連接的服務(wù)器和客戶端實(shí)現(xiàn)TCP接管,現(xiàn)有技術(shù)采用TCP連接傳遞(TCP Connection Passing,TCPCP)技術(shù)。在TCPCP機(jī)制中如果活動(dòng)服務(wù)節(jié)點(diǎn)正常關(guān)閉,那么冗余備份服務(wù)節(jié)點(diǎn)能夠接管TCP連接。
TCPCP機(jī)制通過(guò)將活動(dòng)服務(wù)節(jié)點(diǎn)上與客戶端進(jìn)行通信的socket連接轉(zhuǎn)變?yōu)榉腔顒?dòng)狀態(tài)來(lái)實(shí)現(xiàn)TCP連接從活動(dòng)服務(wù)節(jié)點(diǎn)遷移到備份服務(wù)節(jié)點(diǎn)上。
參見(jiàn)圖3,為現(xiàn)有技術(shù)中利用TCPCP機(jī)制進(jìn)行TCP連接接管的流程示意圖。由于活動(dòng)服務(wù)節(jié)點(diǎn)使自身socket轉(zhuǎn)為非活動(dòng)狀態(tài)時(shí)并沒(méi)有改變客戶端的狀態(tài),因此到目前為止,客戶節(jié)點(diǎn)仍然保持著ESTABLISHED狀態(tài),利用TCPCP機(jī)制進(jìn)行TCP連接接管的具體步驟包括1~2、活動(dòng)服務(wù)節(jié)點(diǎn)創(chuàng)建socket,并確立與客戶節(jié)點(diǎn)的連接。
3~4、客戶節(jié)點(diǎn)通過(guò)該連接與服務(wù)節(jié)點(diǎn)互傳數(shù)據(jù)。
5、活動(dòng)服務(wù)節(jié)點(diǎn)通知備份服務(wù)節(jié)點(diǎn)進(jìn)行TCP連接接管。
由于管理的需要,活動(dòng)服務(wù)節(jié)點(diǎn)要正常關(guān)閉。首先,活動(dòng)服務(wù)節(jié)點(diǎn)將其上的與客戶節(jié)點(diǎn)進(jìn)行通信的socket連接將轉(zhuǎn)為非活動(dòng)狀態(tài),并通過(guò)getsockopt()系統(tǒng)調(diào)用獲得當(dāng)前TCP的狀態(tài);然后,以內(nèi)部連接信息(Internal ConnectionInformation,ICI)的形式將TCP狀態(tài)信息發(fā)送給備份服務(wù)節(jié)點(diǎn);之后,活動(dòng)服務(wù)節(jié)點(diǎn)轉(zhuǎn)入關(guān)閉狀態(tài)。
備份服務(wù)節(jié)點(diǎn)從活動(dòng)服務(wù)節(jié)點(diǎn)處獲得ICI信息后,將創(chuàng)建一個(gè)新的用于與客戶端進(jìn)行通信的socket連接;然后,將從活動(dòng)服務(wù)節(jié)點(diǎn)獲得的TCP狀態(tài)設(shè)置在新的socket連接中;6~7、新的socket被激活,服務(wù)端恢復(fù)與客戶端的通信。
上述TCPCP機(jī)制存在如下限制(1)活動(dòng)服務(wù)節(jié)點(diǎn)因非正常原因(如系統(tǒng)崩潰,內(nèi)核掛起等)失效時(shí),TCPCP機(jī)制無(wú)法實(shí)現(xiàn)TCP連接接管;(2)當(dāng)備份服務(wù)節(jié)點(diǎn)獲得活動(dòng)服務(wù)節(jié)點(diǎn)ICI信息后,活動(dòng)服務(wù)節(jié)點(diǎn)的socket被釋放,不能再利用該socket進(jìn)行任何其他的通信。因此,當(dāng)TCP連接接管發(fā)生的時(shí)候,活動(dòng)服務(wù)節(jié)點(diǎn)被強(qiáng)迫失效。即,ICI信息僅僅能夠得到一次,并且獲得后需要立即從獲得服務(wù)節(jié)點(diǎn)發(fā)送到備份節(jié)點(diǎn)。
與本發(fā)明相關(guān)的現(xiàn)有技術(shù)之二,為TCP透明連接錯(cuò)誤接管技術(shù)。該技術(shù)方案為通過(guò)面向連接協(xié)議建立連接的備份服務(wù)器和客戶端提供了一種透明的連接錯(cuò)誤接管機(jī)制。該機(jī)制中如果活動(dòng)服務(wù)節(jié)點(diǎn)產(chǎn)生一個(gè)響應(yīng),那么備份服務(wù)節(jié)點(diǎn)也將產(chǎn)生同樣的響應(yīng)來(lái)回應(yīng)客戶節(jié)點(diǎn)。兩個(gè)服務(wù)節(jié)點(diǎn)擁有完全相同的狀態(tài)轉(zhuǎn)換,為了同步活動(dòng)服務(wù)節(jié)點(diǎn)和備份服務(wù)節(jié)點(diǎn)之間TCP狀態(tài),需要在TCP與IP層之間引入橋接層(bridge layer)。這種方法需要兩類服務(wù)節(jié)點(diǎn)(活動(dòng)和備份)處于相同的服務(wù)模式。備份服務(wù)節(jié)點(diǎn)雖然處于standby模式,但需要與活動(dòng)服務(wù)節(jié)點(diǎn)一樣響應(yīng)客戶端請(qǐng)求。上述技術(shù)方案中,由于活動(dòng)服務(wù)節(jié)點(diǎn)和備份服務(wù)節(jié)點(diǎn)擁有完全相同的狀態(tài),因此,如果當(dāng)活動(dòng)服務(wù)節(jié)點(diǎn)的應(yīng)用程序失效時(shí),備份服務(wù)節(jié)點(diǎn)上很有可能也出現(xiàn)應(yīng)用程序失效,因此該方案不能確?;顒?dòng)服務(wù)節(jié)點(diǎn)失效時(shí)TCP連接的有效接管。
與本發(fā)明相關(guān)的現(xiàn)有技術(shù)之三,為利用連接緩沖存儲(chǔ)器實(shí)現(xiàn)高可用性TCP系統(tǒng)的連接失效接管。該技術(shù)通過(guò)一種附加的設(shè)備——連接高速緩沖存儲(chǔ)器(connection cache)的幫助來(lái)完成TCP的錯(cuò)誤接管。該技術(shù)方案不僅需要額外的設(shè)備進(jìn)行TCP連接接管,而且僅適用于單節(jié)點(diǎn)失效的情況。
發(fā)明內(nèi)容
本發(fā)明提供一種網(wǎng)絡(luò)連接的接管方法,用以實(shí)現(xiàn)備份節(jié)點(diǎn)從網(wǎng)絡(luò)節(jié)點(diǎn)失效處接管網(wǎng)絡(luò)連接,以實(shí)現(xiàn)在非正常原因節(jié)點(diǎn)失效時(shí)網(wǎng)絡(luò)連接的正常接管,保證網(wǎng)絡(luò)通信正常進(jìn)行。
本發(fā)明方法包括第一節(jié)點(diǎn)向備份節(jié)點(diǎn)發(fā)送所述第一節(jié)點(diǎn)與第二節(jié)點(diǎn)的當(dāng)前的連接狀態(tài)信息;所述備份節(jié)點(diǎn)接收所述連接狀態(tài)信息并存儲(chǔ);若所述第一節(jié)點(diǎn)失效,所述備份節(jié)點(diǎn)根據(jù)存儲(chǔ)的所述連接狀態(tài)信息恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接。
根據(jù)本發(fā)明的上述方法,所述第一節(jié)點(diǎn)向所述備份節(jié)點(diǎn)發(fā)送的所述當(dāng)前的連接狀態(tài)信息包括靜態(tài)信息和動(dòng)態(tài)信息。
所述第一節(jié)點(diǎn)向所述備份節(jié)點(diǎn)發(fā)送所述當(dāng)前的連接狀態(tài)信息的過(guò)程具體包括所述第一節(jié)點(diǎn)與所述第二節(jié)點(diǎn)建立連接時(shí),向所述備份節(jié)點(diǎn)發(fā)送該連接的靜態(tài)信息;所述第一節(jié)點(diǎn)與所述第二節(jié)點(diǎn)通過(guò)該連接進(jìn)行通信時(shí),向所述備份節(jié)點(diǎn)發(fā)送該連接的動(dòng)態(tài)信息。
上述方法中,所述第一節(jié)點(diǎn)調(diào)用設(shè)定的連接狀態(tài)信息獲取函數(shù),獲取本地內(nèi)核中所述連接的靜態(tài)信息或動(dòng)態(tài)信息,并發(fā)送到所述備份節(jié)點(diǎn)。
所述連接狀態(tài)信息獲取函數(shù)包含靜態(tài)信息選項(xiàng)和動(dòng)態(tài)信息選項(xiàng);所述連接狀態(tài)信息獲取函數(shù)通過(guò)所述靜態(tài)信息選項(xiàng)獲取內(nèi)核中該連接的靜態(tài)信息,通過(guò)所述動(dòng)態(tài)信息選項(xiàng)獲取內(nèi)核中該連接的動(dòng)態(tài)信息。
根據(jù)本發(fā)明的上述方法,所述備份節(jié)點(diǎn)獲知所述第一節(jié)點(diǎn)失效后恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接;所述備份節(jié)點(diǎn)獲知所述第一節(jié)點(diǎn)失效,包括所述備份節(jié)點(diǎn)檢測(cè)到所述第一節(jié)點(diǎn)失效;或所述備份節(jié)點(diǎn)收到所述第一節(jié)點(diǎn)發(fā)送的連接接管通知。
所述備份節(jié)點(diǎn)檢測(cè)到所述第一節(jié)點(diǎn)失效,進(jìn)一步包括所述備份節(jié)點(diǎn)定時(shí)向所述第一節(jié)點(diǎn)發(fā)送脈沖信號(hào),若未在指定時(shí)間內(nèi)收到所述第一節(jié)點(diǎn)返回的響應(yīng)時(shí),認(rèn)為所述第一節(jié)點(diǎn)失效;或位于所述第一節(jié)點(diǎn)上的中間件檢測(cè)到所述第一節(jié)點(diǎn)失效后,關(guān)閉該節(jié)點(diǎn)的網(wǎng)絡(luò)連接的通信接口,并通過(guò)所述備份節(jié)點(diǎn)上的中間件通知所述備份節(jié)點(diǎn)所述第一節(jié)點(diǎn)失效。
上述方法中,當(dāng)所述備份節(jié)點(diǎn)上的中間件檢測(cè)到所述第一節(jié)點(diǎn)上的中間件失效時(shí),該備份節(jié)點(diǎn)上的中間件將通過(guò)熱中間件關(guān)閉所述第一節(jié)點(diǎn)上的網(wǎng)絡(luò)連接的通信接口,并通知所述備份節(jié)點(diǎn)所述第一節(jié)點(diǎn)失效。
根據(jù)本發(fā)明的上述方法,所述備份節(jié)點(diǎn)利用存儲(chǔ)的所述連接狀態(tài)信息,恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接的過(guò)程包括所述備份節(jié)點(diǎn)創(chuàng)建連接套接字;所述備份節(jié)點(diǎn)獲取存儲(chǔ)的所述連接狀態(tài)信息,并用該信息設(shè)置該連接套接字的狀態(tài)。
上述方法中,所述備份節(jié)點(diǎn)通過(guò)調(diào)用設(shè)定的連接狀態(tài)信息設(shè)置函數(shù)設(shè)置所述連接套接字的狀態(tài)。
上述方法中,所述連接狀態(tài)信息設(shè)置函數(shù)包含狀態(tài)信息設(shè)置選項(xiàng),所述連接狀態(tài)信息設(shè)置函數(shù)通過(guò)該設(shè)置選項(xiàng)設(shè)置所述連接套接字的靜態(tài)和動(dòng)態(tài)連接狀態(tài)。
根據(jù)本發(fā)明的上述方法,所述備份節(jié)點(diǎn)通過(guò)恢復(fù)后的網(wǎng)絡(luò)連接向所述第二節(jié)點(diǎn)發(fā)送數(shù)據(jù)前,將數(shù)據(jù)包的時(shí)間戳修改為與所述第一節(jié)點(diǎn)的時(shí)間戳一致。
根據(jù)本發(fā)明的上述方法,所述第一節(jié)點(diǎn)通過(guò)浮動(dòng)IP地址與所述第二節(jié)點(diǎn)建立IP地址連接;所述第一節(jié)點(diǎn)失效后,所述備份節(jié)點(diǎn)使用該浮動(dòng)IP地址與所述第二節(jié)點(diǎn)建立IP地址連接進(jìn)行交互。
上述方法中,所述第一節(jié)點(diǎn)失效后,其上的虛擬網(wǎng)絡(luò)接口被關(guān)閉;所述備份節(jié)點(diǎn)開(kāi)啟本地的虛擬網(wǎng)絡(luò)接口,并用所述第一節(jié)點(diǎn)的浮動(dòng)IP地址設(shè)置該虛擬網(wǎng)絡(luò)接口的地址。
根據(jù)本發(fā)明的上述方法,所述連接狀態(tài)信息為TCP連接狀態(tài)信息;所述備份節(jié)點(diǎn)恢復(fù)與所述第二節(jié)點(diǎn)的TCP連接。
本發(fā)明的有益效果如下(1)本發(fā)明通過(guò)第一節(jié)點(diǎn)每次接收和發(fā)送數(shù)據(jù)后,都向備份節(jié)點(diǎn)發(fā)送當(dāng)前的連接狀態(tài)信息,使備份節(jié)點(diǎn)保存并維護(hù)網(wǎng)絡(luò)連接的最新?tīng)顟B(tài),因此,不論第一節(jié)點(diǎn)發(fā)生故意失效還是非故意失效,備份節(jié)點(diǎn)都能夠從失效點(diǎn)處恢復(fù)網(wǎng)絡(luò)連接,以保證正常通信。
(2)本發(fā)明中,第一節(jié)點(diǎn)通過(guò)浮動(dòng)IP地址與第二節(jié)點(diǎn)進(jìn)行通信,當(dāng)?shù)谝还?jié)點(diǎn)失效時(shí),備用節(jié)點(diǎn)開(kāi)啟虛擬網(wǎng)絡(luò)接口,并使用相同的浮動(dòng)IP地址與第二節(jié)點(diǎn)端通信,在保證透明地為第二節(jié)點(diǎn)提供服務(wù)的同時(shí),還保證了第一節(jié)點(diǎn)上其他未失效的應(yīng)用仍然可以正常通信。
(3)由于本發(fā)明中,備份節(jié)點(diǎn)只需存儲(chǔ)第一節(jié)點(diǎn)與第二節(jié)點(diǎn)間的連接狀態(tài)信息,不必與第一節(jié)點(diǎn)擁有完全相同的狀態(tài),因此與現(xiàn)有技術(shù)相比,避免了第一節(jié)點(diǎn)上的應(yīng)用程序失效時(shí)對(duì)備份節(jié)點(diǎn)上的應(yīng)用程序造成影響,保證網(wǎng)絡(luò)連接的有效接管。
(4)與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)現(xiàn)方法簡(jiǎn)單易行,不需額外的設(shè)備。
圖1為現(xiàn)有技術(shù)中Client/Server架構(gòu)中的TCP位置示意圖;圖2為現(xiàn)有技術(shù)中集群環(huán)境下的客戶端與服務(wù)端的連接示意圖;圖3為現(xiàn)有技術(shù)中利用TCPCP機(jī)制進(jìn)行TCP連接接管的流程示意圖;圖4為本發(fā)明第二節(jié)點(diǎn)通過(guò)虛擬網(wǎng)絡(luò)接口連接到第一節(jié)點(diǎn)的示意圖;圖5為本發(fā)明第一節(jié)點(diǎn)失效后,第二節(jié)點(diǎn)通過(guò)虛擬網(wǎng)絡(luò)接口連接到備份節(jié)點(diǎn)的示意圖;圖6為本發(fā)明實(shí)施例一中活動(dòng)服務(wù)節(jié)點(diǎn)正常通信流程示意圖;圖7為本發(fā)明實(shí)施例一中活動(dòng)服務(wù)節(jié)點(diǎn)非故意失效時(shí)的TCP連接接管流程示意圖;圖8為本發(fā)明實(shí)施例二中活動(dòng)服務(wù)節(jié)點(diǎn)故意失效時(shí)的TCP連接接管流程示意圖;圖9為本發(fā)明實(shí)施例中活動(dòng)服務(wù)節(jié)點(diǎn)獲取TCP靜態(tài)參數(shù)的過(guò)程示意圖;圖10為本發(fā)明實(shí)施例中活動(dòng)服務(wù)節(jié)點(diǎn)獲取TCP動(dòng)態(tài)參數(shù)的過(guò)程示意圖;圖11為本發(fā)明實(shí)施例中備份服務(wù)節(jié)點(diǎn)恢復(fù)TCP連接過(guò)程的示意圖。
具體實(shí)施例方式
本發(fā)明通過(guò)第一節(jié)點(diǎn)每次發(fā)送和接收數(shù)據(jù)報(bào)文時(shí),發(fā)送當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)信息給備份節(jié)點(diǎn),使備份節(jié)點(diǎn)記錄該網(wǎng)絡(luò)連接的最新?tīng)顟B(tài),當(dāng)?shù)谝还?jié)點(diǎn)非故意失效時(shí),備份節(jié)點(diǎn)能夠利用記錄的連接狀態(tài)信息,從失效點(diǎn)處恢復(fù)網(wǎng)絡(luò)連接,保證網(wǎng)絡(luò)系統(tǒng)中節(jié)點(diǎn)間能夠正常通信。
本發(fā)明還采用浮動(dòng)IP地址(也稱別名IP地址)接管機(jī)制,使備份節(jié)點(diǎn)通過(guò)與第一節(jié)點(diǎn)相同的浮動(dòng)IP地址與第二節(jié)點(diǎn)進(jìn)行通信,以保證備份節(jié)點(diǎn)接管網(wǎng)絡(luò)連接后,其他與第一節(jié)點(diǎn)通過(guò)實(shí)際IP地址進(jìn)行通信的應(yīng)用依然可以與該節(jié)點(diǎn)通過(guò)實(shí)際IP地址進(jìn)行通信。
浮動(dòng)IP地址通過(guò)在一個(gè)節(jié)點(diǎn)的虛擬網(wǎng)絡(luò)接口上分配IP地址來(lái)實(shí)現(xiàn)。網(wǎng)絡(luò)結(jié)構(gòu)通常都是以eth0,eth1來(lái)命名(eth0代表節(jié)點(diǎn)上的第一塊網(wǎng)絡(luò)接口卡NIC,eth1表示節(jié)點(diǎn)上的第二塊NIC卡),可以向其分配IP地址。虛擬網(wǎng)絡(luò)接口一般采用eth0:0的形式,這表明eth0擁有一個(gè)虛擬接口,通過(guò)虛擬接口可以向一塊NIC卡分配多個(gè)IP地址。
參見(jiàn)圖4,為本發(fā)明第二節(jié)點(diǎn)通過(guò)虛擬網(wǎng)絡(luò)接口連接到第一節(jié)點(diǎn)的示意圖。
其中,第二節(jié)點(diǎn)為客戶端節(jié)點(diǎn),第一節(jié)為服務(wù)端節(jié)點(diǎn),第二節(jié)點(diǎn)與第一節(jié)點(diǎn)采用Client/Server架構(gòu)連接并進(jìn)行通信,第一節(jié)點(diǎn)所在的服務(wù)端運(yùn)行在高可用性集群上,第二節(jié)點(diǎn)位于高可用性集群之外。對(duì)第二節(jié)點(diǎn)而言,除了能感知到服務(wù)端提供的服務(wù)外,服務(wù)端的其他變化對(duì)其都應(yīng)該是透明的。首先被第二節(jié)點(diǎn)連接的服務(wù)端節(jié)點(diǎn)稱之為活動(dòng)服務(wù)節(jié)點(diǎn)(即圖中的第一節(jié)點(diǎn))。備份節(jié)點(diǎn)能夠在第一節(jié)點(diǎn)失效時(shí)接管其工作。預(yù)先為第一節(jié)點(diǎn)的虛擬網(wǎng)絡(luò)接口eth0:0分配IP地址11.168.1.100,該IP地址稱為浮動(dòng)IP地址,第二節(jié)點(diǎn)通過(guò)該地址與其建立連接。
當(dāng)?shù)谝还?jié)點(diǎn)失效時(shí),為備份節(jié)點(diǎn)的虛擬網(wǎng)絡(luò)接口分配浮動(dòng)IP地址11.168.1.100。此時(shí),第二節(jié)點(diǎn)就可以通過(guò)原浮動(dòng)IP地址訪問(wèn)備份節(jié)點(diǎn),保證第二節(jié)點(diǎn)的正常通信。
參見(jiàn)圖5,為本發(fā)明第一節(jié)點(diǎn)失效后,第二節(jié)點(diǎn)通過(guò)虛擬網(wǎng)絡(luò)接口連接到備份節(jié)點(diǎn)的示意圖。第二節(jié)點(diǎn)通過(guò)浮動(dòng)IP地址11.168.1.100與服務(wù)端節(jié)點(diǎn)進(jìn)行通信,路由器將第二節(jié)點(diǎn)的請(qǐng)求路由到備份節(jié)點(diǎn)。此時(shí),若第一節(jié)點(diǎn)僅僅是提供服務(wù)的應(yīng)用程序失效,而自身并未失效,則該節(jié)點(diǎn)上的其他未失效的應(yīng)用程序仍然可以使用原有的IP地址保持通信。
第二節(jié)點(diǎn)可以是客戶端節(jié)點(diǎn),也可以是服務(wù)端節(jié)點(diǎn)。當(dāng)?shù)诙?jié)點(diǎn)是服務(wù)端節(jié)點(diǎn)時(shí),其網(wǎng)絡(luò)連接的接管過(guò)程與上述過(guò)程類似。
本發(fā)明提供的網(wǎng)絡(luò)接管方法適用于集群系統(tǒng)內(nèi)的TCP連接接管。下面以高可用性集群系統(tǒng)中的非故意TCP連接接管和故意TCP連接接管的過(guò)程,對(duì)本發(fā)明進(jìn)行詳細(xì)描述。在下述實(shí)施例中,將客戶端節(jié)點(diǎn)對(duì)應(yīng)于所述第二節(jié)點(diǎn),活動(dòng)服務(wù)節(jié)點(diǎn)對(duì)應(yīng)于所述第一節(jié)點(diǎn),備份服務(wù)節(jié)點(diǎn)在活動(dòng)服務(wù)節(jié)點(diǎn)失效后,接管活動(dòng)服務(wù)節(jié)點(diǎn)和客戶端的TCP連接。
實(shí)施例一非故意TCP連接接管的過(guò)程。在本實(shí)施例中,客戶端與服務(wù)端采用浮動(dòng)IP地址進(jìn)行通信,即在活動(dòng)服務(wù)節(jié)點(diǎn)設(shè)置虛擬網(wǎng)絡(luò)接口,并設(shè)置該接口的IP地址11.168.1.100(浮動(dòng)IP地址),客戶端與活動(dòng)服務(wù)節(jié)點(diǎn)通過(guò)該IP地址進(jìn)行通信。
參見(jiàn)圖6,為本發(fā)明實(shí)施例一中活動(dòng)服務(wù)節(jié)點(diǎn)正常通信流程示意圖,具體步驟包括1、客戶端向浮動(dòng)IP地址11.168.1.100發(fā)送連接請(qǐng)求,該請(qǐng)求被路由到活動(dòng)服務(wù)節(jié)點(diǎn)。
2、活動(dòng)服務(wù)節(jié)點(diǎn)建立連接后,通過(guò)getsockopt()系統(tǒng)調(diào)用獲得TCP連接的靜態(tài)信息,并將該靜態(tài)信息發(fā)送給備份服務(wù)節(jié)點(diǎn);備份服務(wù)節(jié)點(diǎn)在本地創(chuàng)建該TCP連接的檢查點(diǎn),并將收到的TCP連接的靜態(tài)信息存儲(chǔ)到檢查點(diǎn)中。
3、活動(dòng)服務(wù)節(jié)點(diǎn)向客戶端發(fā)送確認(rèn)客戶端連接的消息,表明客戶端的請(qǐng)求被活動(dòng)服務(wù)節(jié)點(diǎn)接受。
4、客戶端通過(guò)建立的TCP連接向活動(dòng)服務(wù)節(jié)點(diǎn)傳輸數(shù)據(jù)。
5、活動(dòng)服務(wù)節(jié)點(diǎn)通過(guò)getsockopt()系統(tǒng)調(diào)用獲得TCP連接當(dāng)前的動(dòng)態(tài)信息,并將該動(dòng)態(tài)信息發(fā)送給備份服務(wù)節(jié)點(diǎn);備份服務(wù)節(jié)點(diǎn)將該TCP連接的動(dòng)態(tài)信息存儲(chǔ)到對(duì)應(yīng)的檢查點(diǎn)中。
6、活動(dòng)服務(wù)節(jié)點(diǎn)響應(yīng)客戶端的數(shù)據(jù)傳輸。
7、活動(dòng)服務(wù)節(jié)點(diǎn)再次通過(guò)getsockopt()系統(tǒng)調(diào)用獲得TCP連接當(dāng)前的動(dòng)態(tài)信息,并將該動(dòng)態(tài)信息發(fā)送給備份服務(wù)節(jié)點(diǎn);備份服務(wù)節(jié)點(diǎn)更新對(duì)應(yīng)檢查點(diǎn)中的TCP連接的動(dòng)態(tài)信息,以此實(shí)現(xiàn)備份服務(wù)節(jié)點(diǎn)維護(hù)最新的活動(dòng)服務(wù)節(jié)點(diǎn)的TCP連接的動(dòng)態(tài)信息。
8、客戶端向活動(dòng)服務(wù)節(jié)點(diǎn)發(fā)送關(guān)閉連接請(qǐng)求。
9、活動(dòng)服務(wù)節(jié)點(diǎn)關(guān)閉會(huì)話連接后,向備份服務(wù)節(jié)點(diǎn)發(fā)送關(guān)閉連接的通知,備份服務(wù)節(jié)點(diǎn)刪除其維護(hù)的TCP連接所對(duì)應(yīng)的檢查點(diǎn),即刪除其保持的活動(dòng)服務(wù)節(jié)點(diǎn)的TCP連接信息。
如果在通信過(guò)程中活動(dòng)服務(wù)節(jié)點(diǎn)失效,IP地址接管和TCP連接接管將同時(shí)起作用。
參見(jiàn)圖7,為本發(fā)明實(shí)施例一中活動(dòng)服務(wù)節(jié)點(diǎn)非故意失效時(shí)的TCP連接接管流程示意圖。
1~7、同圖6流程中的步驟1~7,為活動(dòng)服務(wù)節(jié)點(diǎn)正常通信時(shí)的流程。
8、活動(dòng)服務(wù)節(jié)點(diǎn)失效,備份服務(wù)節(jié)點(diǎn)通過(guò)維護(hù)的最新的活動(dòng)服務(wù)節(jié)點(diǎn)TCP連接狀態(tài)信息恢復(fù)TCP連接,該步驟包括8a、備份服務(wù)節(jié)點(diǎn)通過(guò)心跳機(jī)制幀測(cè)到活動(dòng)服務(wù)節(jié)點(diǎn)失效。
備份服務(wù)節(jié)點(diǎn)向活動(dòng)服務(wù)節(jié)點(diǎn)周期性發(fā)送脈沖心跳信號(hào),并從活動(dòng)服務(wù)節(jié)點(diǎn)處獲得響應(yīng)。該響應(yīng)有超時(shí)時(shí)間,在指定時(shí)間內(nèi),如果備份服務(wù)節(jié)點(diǎn)沒(méi)有收到活動(dòng)服務(wù)節(jié)點(diǎn)返回的響應(yīng),則認(rèn)為活動(dòng)服務(wù)節(jié)點(diǎn)已經(jīng)失效。
8b、備份服務(wù)節(jié)點(diǎn)接管活動(dòng)服務(wù)節(jié)點(diǎn)的IP地址。
備份服務(wù)節(jié)點(diǎn)開(kāi)啟本地的虛擬網(wǎng)絡(luò)接口,并用活動(dòng)服務(wù)節(jié)點(diǎn)與客戶端進(jìn)行通信的IP地址11.168.1.100設(shè)置本地的虛擬網(wǎng)絡(luò)接口地址;8c、備份服務(wù)節(jié)點(diǎn)接管活動(dòng)服務(wù)節(jié)點(diǎn)的TCP連接。
備份服務(wù)節(jié)點(diǎn)建立socket連接,利用本地維護(hù)的TCP連接所對(duì)應(yīng)的檢查點(diǎn)中存儲(chǔ)的TCP連接狀態(tài)信息,通過(guò)setsockopt()系統(tǒng)調(diào)用設(shè)置該socket連接的TCP狀態(tài)。
9、客戶端向IP地址11.168.1.100傳輸數(shù)據(jù),該消息被路由到備份服務(wù)節(jié)點(diǎn)。
10、備份服務(wù)節(jié)點(diǎn)向客戶端返回響應(yīng)。
11、客戶端發(fā)送關(guān)閉連接請(qǐng)求,該請(qǐng)求被路由到備份服務(wù)節(jié)點(diǎn)。
12、備份服務(wù)節(jié)點(diǎn)關(guān)閉TCP連接。
從實(shí)施例一的流程可以看出,備份服務(wù)節(jié)點(diǎn)利用其維護(hù)的活動(dòng)服務(wù)節(jié)點(diǎn)的TCP連接狀態(tài)信息,能夠在客戶端毫不知情的情況下恢復(fù)TCP連接。
實(shí)施例一是以備份服務(wù)節(jié)點(diǎn)通過(guò)心跳機(jī)制獲知活動(dòng)服務(wù)節(jié)點(diǎn)失效為例進(jìn)行描述的,備份服務(wù)節(jié)點(diǎn)還可以通過(guò)其他方式獲知活動(dòng)服務(wù)節(jié)點(diǎn)失效,如通過(guò)中間件獲知活動(dòng)服務(wù)節(jié)點(diǎn)失效。
在高可用性集群中,可引入中間件處理應(yīng)用程序的故障(該中間件可以看成是操作系統(tǒng)的抽象)。中間件分別位于各服務(wù)節(jié)點(diǎn),當(dāng)位于活動(dòng)服務(wù)節(jié)點(diǎn)上的中間件檢測(cè)到活動(dòng)服務(wù)節(jié)點(diǎn)上的應(yīng)用程序發(fā)生故障時(shí),位于服務(wù)節(jié)點(diǎn)上的中間件將關(guān)閉活動(dòng)服務(wù)節(jié)點(diǎn)的虛擬網(wǎng)絡(luò)接口,并采用中間件的通信機(jī)制,通知位于備份服務(wù)節(jié)點(diǎn)上的中間件,使備份服務(wù)節(jié)點(diǎn)獲知活動(dòng)服務(wù)節(jié)點(diǎn)已經(jīng)失效。中間件由位于其上層的熱中間件(hot middleware)(熱中間件是從中間件中分離出來(lái)的系統(tǒng)內(nèi)核的抽象)進(jìn)行管理控制。當(dāng)備份服務(wù)節(jié)點(diǎn)上的中間件檢測(cè)到活動(dòng)服務(wù)節(jié)點(diǎn)上中間件失效時(shí),備份服務(wù)節(jié)點(diǎn)上的中間件將通過(guò)熱中間件關(guān)閉活動(dòng)服務(wù)節(jié)點(diǎn)虛擬網(wǎng)絡(luò)接口。此時(shí)的心跳信號(hào)反映活動(dòng)服務(wù)節(jié)點(diǎn)當(dāng)前的健康狀態(tài)。
實(shí)施例二故意TCP連接接管的過(guò)程。在該實(shí)施例中,客戶端與服務(wù)端采用浮動(dòng)IP地址進(jìn)行通信,即在活動(dòng)服務(wù)節(jié)點(diǎn)設(shè)置虛擬網(wǎng)絡(luò)接口,并設(shè)置該接口的IP地址11.168.1.100(浮動(dòng)IP地址),客戶端與活動(dòng)服務(wù)節(jié)點(diǎn)通過(guò)該IP地址進(jìn)行通信。
參見(jiàn)圖8,為本發(fā)明實(shí)施例二中活動(dòng)服務(wù)節(jié)點(diǎn)故意失效時(shí)的TCP連接接管流程示意圖。
1~7、同圖6流程中的步驟1~7,為活動(dòng)服務(wù)節(jié)點(diǎn)正常通信時(shí)的流程。
8、活動(dòng)服務(wù)節(jié)點(diǎn)通知備份服務(wù)節(jié)點(diǎn)接管TCP連接。
由于管理的需要,活動(dòng)服務(wù)節(jié)點(diǎn)要正常關(guān)閉。首先,活動(dòng)服務(wù)節(jié)點(diǎn)將其上的與客戶節(jié)點(diǎn)進(jìn)行通信的socket連接將轉(zhuǎn)為非活動(dòng)狀態(tài),并通過(guò)getsockopt()系統(tǒng)調(diào)用獲得當(dāng)前TCP的狀態(tài);然后,關(guān)閉本地的虛擬網(wǎng)絡(luò)接口,并通知備份服務(wù)節(jié)點(diǎn)接管TCP連接。
9、備份服務(wù)節(jié)點(diǎn)收到接管TCP連接的通知后,建立并恢復(fù)socket連接,該步驟包括9a、備份服務(wù)節(jié)點(diǎn)接管活動(dòng)服務(wù)節(jié)點(diǎn)的IP地址。
備份服務(wù)節(jié)點(diǎn)開(kāi)啟本地的虛擬網(wǎng)絡(luò)接口,并用活動(dòng)服務(wù)節(jié)點(diǎn)與客戶端進(jìn)行通信的IP地址11.168.1.100設(shè)置本地的虛擬網(wǎng)絡(luò)接口地址;9b、備份服務(wù)節(jié)點(diǎn)接管活動(dòng)服務(wù)節(jié)點(diǎn)的TCP連接。
備份服務(wù)節(jié)點(diǎn)建立socket連接,利用ICI信息中包含的TCP連接狀態(tài)信息,通過(guò)setsockopt()系統(tǒng)調(diào)用設(shè)置該socket連接的TCP狀態(tài)。
10、客戶端向IP地址11.168.1.100傳輸數(shù)據(jù),該消息被路由到備份服務(wù)節(jié)點(diǎn)。
11、備份服務(wù)節(jié)點(diǎn)向客戶端返回響應(yīng)。
12、客戶端發(fā)送關(guān)閉連接請(qǐng)求,該請(qǐng)求被路由到備份服務(wù)節(jié)點(diǎn)。
13、備份服務(wù)節(jié)點(diǎn)關(guān)閉TCP連接。
本發(fā)明通過(guò)修改服務(wù)端系統(tǒng)內(nèi)核,以實(shí)現(xiàn)上述實(shí)施例一和實(shí)施例二中TCP連接的接管。通過(guò)修改被getsockopt系統(tǒng)調(diào)用所調(diào)用的TCP狀態(tài)信息獲取函數(shù)tcp_getsockopt(),實(shí)現(xiàn)分別獲取與socket連接相關(guān)的靜態(tài)和動(dòng)態(tài)參數(shù)信息;通過(guò)修改被setsockopt系統(tǒng)調(diào)用所調(diào)用的TCP狀態(tài)信息設(shè)置函數(shù)tcp_setsockopt(),實(shí)現(xiàn)設(shè)置與socket連接相關(guān)的參數(shù)信息。
本發(fā)明在tcp_getsockopt()函數(shù)中設(shè)置了兩個(gè)socket選項(xiàng)(1)TCP靜態(tài)信息選項(xiàng)TCP_STATIC_INFO該選項(xiàng)在客戶端與服務(wù)端之間的連接已經(jīng)建立起來(lái)后調(diào)用,通過(guò)該選項(xiàng)可以獲得TCP連接的靜態(tài)信息。靜態(tài)TCP狀態(tài)信息在客戶端與服務(wù)端連接建立的初始握手階段確定,通過(guò)該選項(xiàng)獲取的主要靜態(tài)參數(shù)包括1)源IP地址(浮動(dòng)IP地址);2)活動(dòng)服務(wù)節(jié)點(diǎn)用來(lái)與客戶端通信的源端口號(hào);3)目的IP地址(客戶端IP地址);4)客戶端節(jié)點(diǎn)用來(lái)與活動(dòng)服務(wù)節(jié)點(diǎn)通信的目的端口號(hào);5)最大可以發(fā)送的TCP數(shù)據(jù)段;6)最大可以接收的TCP數(shù)據(jù)段;7)客戶端可以提供的最大窗口尺寸;8)服務(wù)端可以提供的最大窗口尺寸;9)客戶端與服務(wù)端傳輸數(shù)據(jù)之前協(xié)商的TCP標(biāo)志(TCP Flag)。
上述提到的參數(shù)都可以從維護(hù)有TCP連接狀態(tài)的socket連接中獲取。該函數(shù)如果執(zhí)行成功則返回靜態(tài)參數(shù),如果執(zhí)行失敗則返回負(fù)數(shù)。
參見(jiàn)圖9,為本發(fā)明實(shí)施例中活動(dòng)服務(wù)節(jié)點(diǎn)獲取TCP靜態(tài)參數(shù)的過(guò)程示意圖,具體步驟包括1、應(yīng)用程序通過(guò)getsockopt系統(tǒng)調(diào)用來(lái)調(diào)用tcp_getsockopt()函數(shù),并指定用TCP_STATIC_INFO選項(xiàng)來(lái)獲取TCP靜態(tài)參數(shù);2、內(nèi)核獲得TCP連接的靜態(tài)參數(shù)并將其發(fā)送給應(yīng)用程序。若沒(méi)有獲得相應(yīng)信息,則返回錯(cuò)誤信息給應(yīng)用程序。
(2)TCP動(dòng)態(tài)信息選項(xiàng)TCP_DYN_INFO
TCP連接的動(dòng)態(tài)信息就是那些在客戶端與服務(wù)端通信過(guò)程中會(huì)隨著通信的進(jìn)行而改變的一些參數(shù)。主要包括如下參數(shù)1)下一個(gè)將要發(fā)送的序列號(hào);2)沒(méi)有確認(rèn)的序列號(hào);3)下一個(gè)將要接收的序列號(hào);4)用于流量控制的服務(wù)端發(fā)送窗口尺寸;5)用于客戶端流量控制的接收窗口尺寸;6)服務(wù)端TCP連接的發(fā)送緩存區(qū)大??;7)信息時(shí)戳;8)socket狀態(tài)。
上述所有在活動(dòng)服務(wù)節(jié)點(diǎn)上的參數(shù)都在不斷變化。除緩存區(qū)中的數(shù)據(jù)外,所有其他參數(shù)都需要在備份服務(wù)節(jié)點(diǎn)中存儲(chǔ),以便于TCP連接狀態(tài)的恢復(fù)。只有在活動(dòng)服務(wù)節(jié)點(diǎn)中存在沒(méi)有發(fā)送完的數(shù)據(jù)的情況下,可能需要在備份服務(wù)節(jié)點(diǎn)上存儲(chǔ)緩存區(qū)數(shù)據(jù),以便當(dāng)備份服務(wù)節(jié)點(diǎn)接管連接后,重新發(fā)送這些數(shù)據(jù)。但是由于送緩存區(qū)中數(shù)據(jù)量較大,每次在備份服務(wù)節(jié)點(diǎn)上存儲(chǔ)可能導(dǎo)致網(wǎng)絡(luò)擁擠和阻塞。因此一般不采用這種形式,而是通過(guò)TCP自身的重傳機(jī)制請(qǐng)求重傳。本發(fā)明采用應(yīng)用層的檢查點(diǎn)機(jī)制,因?yàn)閼?yīng)用程序?qū)⒅匦庐a(chǎn)生數(shù)據(jù)并確保通信從最后的檢查點(diǎn)上恢復(fù),因而只有最后緩存區(qū)中的數(shù)據(jù)需要被重新發(fā)送。
參見(jiàn)圖10,為本發(fā)明實(shí)施例中活動(dòng)服務(wù)節(jié)點(diǎn)獲取TCP動(dòng)態(tài)參數(shù)的過(guò)程示意圖,具體步驟包括1、應(yīng)用程序通過(guò)getsockopt系統(tǒng)調(diào)用來(lái)調(diào)用tcp_getsockopt()函數(shù),并指定用TCP_DYN_INFO選項(xiàng)來(lái)獲取TCP動(dòng)態(tài)參數(shù);2、內(nèi)核獲得TCP連接的動(dòng)態(tài)參數(shù)并將其發(fā)送給應(yīng)用程序。若沒(méi)有獲得相應(yīng)信息,則返回錯(cuò)誤信息給應(yīng)用程序。
本發(fā)明在tcp_setsockopt()函數(shù)中設(shè)置一個(gè)socket選項(xiàng)TCP信息設(shè)置選項(xiàng)TCP_SET_INFO
該選項(xiàng)將在備份服務(wù)節(jié)點(diǎn)上設(shè)置新的TCP連接的狀態(tài)。利用已經(jīng)存儲(chǔ)在備份服務(wù)節(jié)點(diǎn)上的TCP連接的靜態(tài)信息和最新的動(dòng)態(tài)信息,備份服務(wù)節(jié)點(diǎn)將TCP連接恢復(fù)為活動(dòng)服務(wù)節(jié)點(diǎn)產(chǎn)生異常之前的狀態(tài)。備份服務(wù)節(jié)點(diǎn)向該客戶端發(fā)送的數(shù)據(jù)包不能采用其自身的時(shí)戳,需要將其更改為與活動(dòng)服務(wù)節(jié)點(diǎn)上的一致(TCP時(shí)戳選項(xiàng)在RFC-793中有詳細(xì)定義)。
參見(jiàn)圖11,為本發(fā)明實(shí)施例中備份服務(wù)節(jié)點(diǎn)恢復(fù)TCP連接過(guò)程的示意圖。圖11中“服務(wù)端應(yīng)用程序”、“服務(wù)端內(nèi)核”,以及“服務(wù)端TCP輸出功能”指的是備份服務(wù)節(jié)點(diǎn)中的核心函數(shù);客戶端采用單獨(dú)的實(shí)體描述(沒(méi)有采用內(nèi)核函數(shù)的形式),其恢復(fù)TCP連接狀態(tài)的具體步驟包括1、備份服務(wù)節(jié)點(diǎn)按照本地存儲(chǔ)的TCP連接的動(dòng)態(tài)和靜態(tài)信息,通過(guò)tcp_setsockopt()函數(shù)中的TCP_SET_INFO選項(xiàng)設(shè)置備份服務(wù)節(jié)點(diǎn)上的TCP連接狀態(tài);2、備份服務(wù)節(jié)點(diǎn)內(nèi)核設(shè)置好TCP狀態(tài)后,向該節(jié)點(diǎn)的TCP輸出功能發(fā)送一個(gè)啞確認(rèn)(dummy acknowledgement),所謂啞確認(rèn)就是不需要對(duì)端節(jié)點(diǎn)發(fā)送數(shù)據(jù)的確認(rèn);3、TCP輸出函數(shù)給處于不活躍狀態(tài)的客戶端(但處于連接狀態(tài))發(fā)送確認(rèn)信息,喚醒客戶端與服務(wù)端重新通信;4、備份服務(wù)節(jié)點(diǎn)的內(nèi)核向應(yīng)用程序返回設(shè)置成功響應(yīng);5、備份服務(wù)節(jié)點(diǎn)向客戶端發(fā)送數(shù)據(jù),該節(jié)點(diǎn)的應(yīng)用程序?qū)l(fā)送的數(shù)據(jù)傳遞給內(nèi)核的TCP連接;6、內(nèi)核將數(shù)據(jù)重新打包為TCP數(shù)據(jù)包,并發(fā)送給TCP輸出功能準(zhǔn)備傳輸;7、TCP輸出功能為TCP數(shù)據(jù)包設(shè)置與前活動(dòng)服務(wù)節(jié)點(diǎn)相匹配的時(shí)戳;8、TCP輸出功能向客戶節(jié)點(diǎn)發(fā)送數(shù)據(jù)。
其后從備份服務(wù)節(jié)點(diǎn)上發(fā)送的的數(shù)據(jù)包都需要經(jīng)過(guò)更改時(shí)戳的操作。
在備份服務(wù)節(jié)點(diǎn)設(shè)置好TCP連接的動(dòng)態(tài)和靜態(tài)參數(shù)后,備份服務(wù)節(jié)點(diǎn)就在客戶端毫不知情的情況下重新建立與其的連接。
對(duì)于上述的TCP_STATIC_INFO、TCP_DYN_INFO和TCP_SEF_INFO三個(gè)選項(xiàng),在內(nèi)核中已經(jīng)定義了相應(yīng)的操作。
上述兩個(gè)實(shí)施例都采用了浮動(dòng)IP地址接管機(jī)制,不采用浮動(dòng)IP地址接管機(jī)制的故意TCP連接接管和非故意TCP連接接管也在本發(fā)明的保護(hù)范圍之內(nèi)。
通過(guò)以上流程描述可知,本發(fā)明通過(guò)活動(dòng)服務(wù)節(jié)點(diǎn)每次接收和發(fā)送數(shù)據(jù)后,都向備份服務(wù)節(jié)點(diǎn)發(fā)送當(dāng)前的TCP連接狀態(tài)信息,使備份服務(wù)節(jié)點(diǎn)保存并維護(hù)TCP連接的最新?tīng)顟B(tài)。當(dāng)活動(dòng)服務(wù)節(jié)點(diǎn)失效后,備份服務(wù)節(jié)點(diǎn)能夠從本地保存的TCP連接狀態(tài)信息恢復(fù)TCP連接,以保證客戶端的正常通信。本發(fā)明在活動(dòng)服務(wù)節(jié)點(diǎn)故意失效和非故意失效時(shí),都可實(shí)現(xiàn)備份服務(wù)節(jié)點(diǎn)接管TCP連接。另外,本發(fā)明還通過(guò)浮動(dòng)IP地址接管機(jī)制,保證服務(wù)端透明地為客戶端提供服務(wù)的同時(shí),還保證了活動(dòng)服務(wù)節(jié)點(diǎn)上其他未失效的應(yīng)用仍然可以正常通信。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種網(wǎng)絡(luò)連接的接管方法,包括第一節(jié)點(diǎn)向備份節(jié)點(diǎn)發(fā)送所述第一節(jié)點(diǎn)與第二節(jié)點(diǎn)的當(dāng)前的連接狀態(tài)信息;所述備份節(jié)點(diǎn)接收所述連接狀態(tài)信息并存儲(chǔ);若所述第一節(jié)點(diǎn)失效,所述備份節(jié)點(diǎn)根據(jù)存儲(chǔ)的所述連接狀態(tài)信息恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接。
2.如權(quán)利要求1所述的方法,其特征在于,所述第一節(jié)點(diǎn)向所述備份節(jié)點(diǎn)發(fā)送的所述當(dāng)前的連接狀態(tài)信息包括靜態(tài)信息和動(dòng)態(tài)信息。
3.如權(quán)利要求2所述的方法,其特征在于,所述第一節(jié)點(diǎn)向所述備份節(jié)點(diǎn)發(fā)送所述當(dāng)前的連接狀態(tài)信息的過(guò)程具體包括所述第一節(jié)點(diǎn)與所述第二節(jié)點(diǎn)建立連接時(shí),向所述備份節(jié)點(diǎn)發(fā)送該連接的靜態(tài)信息;所述第一節(jié)點(diǎn)與所述第二節(jié)點(diǎn)通過(guò)該連接進(jìn)行通信時(shí),向所述備份節(jié)點(diǎn)發(fā)送該連接的動(dòng)態(tài)信息。
4.如權(quán)利要求3所述的方法,其特征在于,所述第一節(jié)點(diǎn)調(diào)用設(shè)定的連接狀態(tài)信息獲取函數(shù),獲取本地內(nèi)核中所述連接的靜態(tài)信息或動(dòng)態(tài)信息,并發(fā)送到所述備份節(jié)點(diǎn)。
5.如權(quán)利要求4所述的方法,其特征在于,所述連接狀態(tài)信息獲取函數(shù)包含靜態(tài)信息選項(xiàng)和動(dòng)態(tài)信息選項(xiàng);所述連接狀態(tài)信息獲取函數(shù)通過(guò)所述靜態(tài)信息選項(xiàng)獲取內(nèi)核中該連接的靜態(tài)信息,通過(guò)所述動(dòng)態(tài)信息選項(xiàng)獲取內(nèi)核中該連接的動(dòng)態(tài)信息。
6.如權(quán)利要求1所述的方法,其特征在于,所述備份節(jié)點(diǎn)獲知所述第一節(jié)點(diǎn)失效后恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接;所述備份節(jié)點(diǎn)獲知所述第一節(jié)點(diǎn)失效,包括所述備份節(jié)點(diǎn)檢測(cè)到所述第一節(jié)點(diǎn)失效;或所述備份節(jié)點(diǎn)收到所述第一節(jié)點(diǎn)發(fā)送的連接接管通知。
7.如權(quán)利要求6所述的方法,其特征在于,所述備份節(jié)點(diǎn)檢測(cè)到所述第一節(jié)點(diǎn)失效,進(jìn)一步包括所述備份節(jié)點(diǎn)定時(shí)向所述第一節(jié)點(diǎn)發(fā)送脈沖信號(hào),若未在指定時(shí)間內(nèi)收到所述第一節(jié)點(diǎn)返回的響應(yīng)時(shí),認(rèn)為所述第一節(jié)點(diǎn)失效;或位于所述第一節(jié)點(diǎn)上的中間件檢測(cè)到所述第一節(jié)點(diǎn)失效后,關(guān)閉該節(jié)點(diǎn)的網(wǎng)絡(luò)連接的通信接口,并通過(guò)所述備份節(jié)點(diǎn)上的中間件通知所述備份節(jié)點(diǎn)所述第一節(jié)點(diǎn)失效。
8.如權(quán)利要求7所述的方法,其特征在于,當(dāng)所述備份節(jié)點(diǎn)上的中間件檢測(cè)到所述第一節(jié)點(diǎn)上的中間件失效時(shí),該備份節(jié)點(diǎn)上的中間件將通過(guò)熱中間件關(guān)閉所述第一節(jié)點(diǎn)上的網(wǎng)絡(luò)連接的通信接口,并通知所述備份節(jié)點(diǎn)所述第一節(jié)點(diǎn)失效。
9.如權(quán)利要求1所述的方法,其特征在于,所述備份節(jié)點(diǎn)利用存儲(chǔ)的所述連接狀態(tài)信息,恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接的過(guò)程包括所述備份節(jié)點(diǎn)創(chuàng)建連接套接字;所述備份節(jié)點(diǎn)獲取存儲(chǔ)的所述連接狀態(tài)信息,并用該信息設(shè)置該連接套接字的狀態(tài)。
10.如權(quán)利要求9所述的方法,其特征在于,所述備份節(jié)點(diǎn)通過(guò)調(diào)用設(shè)定的連接狀態(tài)信息設(shè)置函數(shù)設(shè)置所述連接套接字的狀態(tài)。
11.如權(quán)利要求10所述的方法,其特征在于,所述連接狀態(tài)信息設(shè)置函數(shù)包含狀態(tài)信息設(shè)置選項(xiàng),所述連接狀態(tài)信息設(shè)置函數(shù)通過(guò)該設(shè)置選項(xiàng)設(shè)置所述連接套接字的靜態(tài)和動(dòng)態(tài)連接狀態(tài)。
12.如權(quán)利要求1所述的方法,其特征在于,所述備份節(jié)點(diǎn)通過(guò)恢復(fù)后的網(wǎng)絡(luò)連接向所述第二節(jié)點(diǎn)發(fā)送數(shù)據(jù)前,將數(shù)據(jù)包的時(shí)間戳修改為與所述第一節(jié)點(diǎn)的時(shí)間戳一致。
13.如權(quán)利要求1所述的方法,其特征在于,所述第一節(jié)點(diǎn)通過(guò)浮動(dòng)IP地址與所述第二節(jié)點(diǎn)建立IP地址連接;所述第一節(jié)點(diǎn)失效后,所述備份節(jié)點(diǎn)使用該浮動(dòng)IP地址與所述第二節(jié)點(diǎn)建立IP地址連接進(jìn)行交互。
14.如權(quán)利要求13所述的方法,其特征在于,所述第一節(jié)點(diǎn)失效后,其上的虛擬網(wǎng)絡(luò)接口被關(guān)閉;所述備份節(jié)點(diǎn)開(kāi)啟本地的虛擬網(wǎng)絡(luò)接口,并用所述第一節(jié)點(diǎn)的浮動(dòng)IP地址設(shè)置該虛擬網(wǎng)絡(luò)接口的地址。
15.如權(quán)利要求1所述的方法,其特征在于,所述連接狀態(tài)信息為TCP連接狀態(tài)信息;所述備份節(jié)點(diǎn)恢復(fù)與所述第二節(jié)點(diǎn)的TCP連接。
全文摘要
本發(fā)明公開(kāi)了一種網(wǎng)絡(luò)連接的接管方法,包括第一節(jié)點(diǎn)向備份節(jié)點(diǎn)發(fā)送所述第一節(jié)點(diǎn)與第二節(jié)點(diǎn)的當(dāng)前的連接狀態(tài)信息;所述備份節(jié)點(diǎn)接收所述連接狀態(tài)信息并存儲(chǔ);若所述第一節(jié)點(diǎn)失效,所述備份節(jié)點(diǎn)根據(jù)存儲(chǔ)的所述連接狀態(tài)信息恢復(fù)與所述第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接。采用本發(fā)明方法,可實(shí)現(xiàn)集群內(nèi)與第二節(jié)點(diǎn)連接的第一節(jié)點(diǎn)失效時(shí),由備份節(jié)點(diǎn)從失效點(diǎn)處恢復(fù)與第二節(jié)點(diǎn)的網(wǎng)絡(luò)連接,保證節(jié)點(diǎn)間的正常通信。
文檔編號(hào)H04L29/06GK1921369SQ20061010389
公開(kāi)日2007年2月28日 申請(qǐng)日期2006年8月8日 優(yōu)先權(quán)日2006年8月8日
發(fā)明者西瓦·庫(kù)馬·K, 阿若納卡勒姆·帕什薩拉什·A 申請(qǐng)人:華為技術(shù)有限公司