本發(fā)明涉及IT技術領域,特別涉及一種前端負載均衡器、后端服務器及注冊方法。
背景技術:
在云計算場景下,現(xiàn)有的負載均衡后端服務發(fā)現(xiàn)方式通常是通過靜態(tài)的手動配置,以HAProxy為例,HAProxy是個著名的開源的軟件TCP(四層)/HTTP(七層)負載均衡器和代理軟件,可以運行在Linux,Solaris和FreeBSD等系統(tǒng)上。HAProxy最常用的用途是通過在多個服務器(比如web服務器,應用,數(shù)據(jù)庫等)之間分發(fā)負載來改善一個服務器系統(tǒng)的性能和可靠性。目前,HAProxy已經(jīng)被許多大公司采用,包括GitHub,Imgur,Instagram,和Twitter等。使用HAProxy的時候需要在前端負載均衡設備手動配置backend,backend是一組接收轉發(fā)的請求的后端服務器的IP地址,通過網(wǎng)絡管理員手工配置好backend來完成后端服務器向前端負載均衡器的注冊過程,在完成注冊后,負載均衡設備根據(jù)規(guī)則把請求分發(fā)到后端服務器。
故在現(xiàn)有的技術中,向一個負載均衡集群中增加或注冊一個后端服務器成員所需做的操作通常是:在前端負載均衡設備上顯式地手動配置后端服務器的信息,從而將新的后端服務器加入到自己的可用服務器列表進行管理。
由于現(xiàn)有技術的后端服務器的加入或注冊不夠智能化,當需要新增一個后端服務器時,只能通過手動的方式在前端負載均衡器上的配置文件中顯式地配置新增的后端服務器的地址來完成注冊,這種方式在當前云計算環(huán)境中特別繁瑣,而由于虛擬化技術的發(fā)展,后端服務器可以部署在虛擬機或容器中,使得后端服務器規(guī)模往往很大,上百個到上千個都有可能。而業(yè)務的動態(tài)變化也要求負載均衡集群動態(tài)擴容,新的后端服務器的注冊將會是經(jīng)常性的操作,若還頻繁地通過手動方式更改前端負載均衡器上的配置文件來注冊后端服務器,管理非常不方便。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種前端負載均衡器、后端服務器及注冊方法,前端負載均衡器可自動對后端服務器進行注冊,從而提高管理的便利性。
第一方面,本申請?zhí)峁┮环N注冊方法,該方法應用于前端負載均衡器,前端負載均衡器與至少一個后端服務器設置于一個組播組內(nèi),同一組播組內(nèi)的前端負載均衡器和后端服務器均設置有相同的組播地址,前端負載均衡器設置有可用服務器列表,可用服務器列表用于記錄注冊成功的后端服務器的單播地址,當后端服務器的單播地址記錄在前端負載均衡器的可用服務器列表時,表示后端服務器就在前端負載均衡器上完成了注冊,該注冊方法具體包括:
前端負載均衡器向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
前端負載均衡器在預設端口監(jiān)聽組播組內(nèi)所有后端服務器響應IGMP general query報文分別單播發(fā)送的宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括發(fā)送宣告報文的后端服務器的單播地址,預設端口為預先指定的前端負載均衡器的非系統(tǒng)端口,由于宣告報文的目的地址字段和目的端口指向前端負載均衡器,因此前端負載均衡器可在預定端口接收到組播組內(nèi)所有后端服務器發(fā)送的宣告報文;
前端負載均衡器解析宣告報文以獲取源地址字段攜帶的后端服務器的單播地址;
在源地址字段攜帶的后端服務器的單播地址沒有記錄在可用服務器列表中時,前端負載均衡器將源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表,從而完成注冊。
通過實施上述實施例,前端負載均衡器可從宣告報文獲取到后端服務的單播地址并將其加入可用服務器列表,從而完成注冊,故在前端負載均衡器上全程無需手動進行配置,可有效提高管理便利性。
在第一方面的一種可能的實現(xiàn)方式中,可用服務器列表中記錄的每一單播地址均對應一心跳計時器,在前端負載均衡器將源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表的步驟之后,該方法還包括:
前端負載均衡器為源地址字段攜帶的后端服務器的單播地址設置心跳計時器并開始計時。
在第一方面的一種可能的實現(xiàn)方式中,該方法還包括:
前端負載均衡器在源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表中時,控制源地址字段攜帶的后端服務器的單播地址對應的心跳計時器重新計時。
在第一方面的一種可能的實現(xiàn)方式中,該方法還包括:
前端負載均衡器在可用服務器列表中記錄的單播地址對應的心跳計時器的計時值超出預定時間段時,控制心跳計時器重新計時,并累計心跳計時器的超時次數(shù),在超時次數(shù)超出預定次數(shù)時,將與心跳計時器對應的單播地址從可用服務器列表中移除。
通過實施上述實施例,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器,故可進一步提升管理的便利性。
在第一方面的一種可能的實現(xiàn)方式中,前端負載均衡器向組播組內(nèi)組播發(fā)送IGMP general query報文的步驟具體包括:
前端負載均衡器在向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文時開始計時;
在前端負載均衡器接收到組播組內(nèi)最先接收到IGMP general query報文的后端服務器響應IGMP general query報文向組播組組播發(fā)送的IGMP membership response報文時,前端負載均衡器根據(jù)IGMP membership response報文確認組播組有效,且在計時值超過預定周期后繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文;
在前端負載均衡器沒有接收到IGMP membership response報文時,前端負載均衡器確認組播組失效,在計時值超過預定周期后停止繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文。
通過實施上述實施例,可保證在組播組有效時,前端負載均衡器可獲取還在組播組內(nèi)的后端服務器發(fā)送的宣告報文,根據(jù)宣告報文獲知組播組內(nèi)的后端服務器的健康狀態(tài),而在組播組失效時,放棄對該組播組進行維護。
在第一方面的一種可能的實現(xiàn)方式中,宣告報文為UDP報文。
第二方面,本申請?zhí)峁┮环N注冊方法,該方法應用于后端服務器,后端服務器與前端負載均衡器設置于同一個組播組內(nèi),同一組播組內(nèi)的前端負載均衡器和后端服務器均設置有相同的組播地址,該方法包括:
后端服務器接收前端負載均衡器向組播組內(nèi)組播發(fā)送的IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
后端服務器響應IGMP general query報文向前端負載均衡器單播發(fā)送宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括后端服務器的單播地址,預設端口為指定的前端負載均衡器的非系統(tǒng)端口。
通過實施上述實施例,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器,故可進一步提升管理的便利性。
在第二方面的一種可能的實現(xiàn)方式中,在后端服務器接收前端負載均衡器周期地向組播組內(nèi)組播發(fā)送的IGMP general query報文的步驟之后,該方法還包括:
后端服務器響應IGMP general query報文向組播組內(nèi)組播發(fā)送IGMP membership response報文,且在向組播組內(nèi)組播發(fā)送IGMP membership response報文之前若接收到組播組內(nèi)另一后端服務器向組播組組播發(fā)送的IGMP membership response報文,則取消向組播組內(nèi)組播發(fā)送IGMP membership response報文。
在第二方面的一種可能的實現(xiàn)方式中,宣告報文為UDP報文。
第三方面,本申請?zhí)峁┮环N前端負載均衡器,前端負載均衡器與至少一個后端服務器設置于一個組播組內(nèi),同一組播組內(nèi)的前端負載均衡器和后端服務器均設置有相同的組播地址,前端負載均衡器設置有可用服務器列表,可用服務器列表用于記錄注冊成功的后端服務器的單播地址,前端負載均衡器包括:
組播地址設置模塊,用于設置與組播組內(nèi)的后端服務器相同的組播地址;
組播查詢發(fā)送模塊,用于向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
單播接收模塊,用于在預設端口監(jiān)聽組播組內(nèi)所有后端服務器響應送IGMP general query報文分別單播發(fā)送的宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括發(fā)送宣告報文的后端服務器的單播地址,預設端口為指定的前端負載均衡器的非系統(tǒng)端口;
報文解析模塊,用于解析宣告報文以獲取源地址字段攜帶的后端服務器的單播地址;
注冊模塊,在源地址字段攜帶的后端服務器的單播地址沒有記錄在可用服務器列表中時,將源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表。
通過實施上述實施例,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器,故可進一步提升管理的便利性。
在第三方面的一種可能的實現(xiàn)方式中,前端負載均衡器還包括心跳計時器和計時器設置模塊,計時器設置模塊,用于為可用服務器列表中記錄的每一所述單播地址均對應設置一心跳計時器,并為源地址字段攜帶的后端服務器的單播地址設置心跳計時器并控制心跳計時器開始計時。
在第三方面的一種可能的實現(xiàn)方式中,注冊模塊還用于:
在判斷到源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表中時,控制源地址字段攜帶的后端服務器的單播地址對應的心跳計時器重新計時。
在第三方面的一種可能的實現(xiàn)方式中,計時器設置模塊還用于:
在可用服務器列表中記錄的單播地址對應的心跳計時器的計時值超出預定時間段時,控制心跳計時器重新計時,并累計心跳計時器的超時次數(shù),在超時次數(shù)超出預定次數(shù)時,將與心跳計時器對應的單播地址從可用服務器列表中移除。
通過實施上述實施例,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器,故可進一步提升管理的便利性。
在第三方面的一種可能的實現(xiàn)方式中,前端負載均衡器還包括組播響應接收模塊,
組播查詢發(fā)送模塊,還用于在向組播組內(nèi)組播發(fā)送IGMP general query報文時開始計時;
組播響應接收模塊,用于接收組播組內(nèi)最先接收到IGMP general query報文的后端服務器響應IGMP general query報文向組播組組播發(fā)送的IGMP membership response報文;
其中,在組播響應接收模塊接收到組播組內(nèi)最先接收到IGMP general query報文的后端服務器響應IGMP general query報文向組播組組播發(fā)送的IGMP membership response報文時,組播查詢發(fā)送模塊根據(jù)IGMP membership response報文確認組播組有效,且在計時值超過預定周期后繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文;在組播響應接收模塊沒有接收到IGMP membership response報文時,組播查詢發(fā)送模塊確認組播組失效,在計時值超過預定周期后停止繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文。
通過實施上述實施例,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器,故可進一步提升管理的便利性。
在第三方面的一種可能的實現(xiàn)方式中,宣告報文為UDP報文。
第四方面,本申請?zhí)峁┮环N后端服務器,包括:
組播地址設置模塊,組播地址設置模塊用于設置與前端負載均衡器相同的組播地址;
組播查詢接收模塊,用于接收前端負載均衡器周期地向組播組內(nèi)組播發(fā)送的IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
單播發(fā)送模塊,用于響應IGMP general query報文向前端負載均衡器單播發(fā)送宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括后端服務器的單播地址,預設端口為組播組預先一致設定的非系統(tǒng)端口。
在第四方面的一種可能的實現(xiàn)方式中,宣告報文為UDP報文。
在第四方面的一種可能的實現(xiàn)方式中,后端服務器還包括組播響應發(fā)送模塊,
組播響應發(fā)送模塊,用于響應IGMP general query報文向組播組內(nèi)組播發(fā)送IGMP membership response報文,且在組播響應發(fā)送發(fā)送模塊向組播組內(nèi)組播發(fā)送IGMP membership response報文之前若組播查詢接收模塊接收到組播組內(nèi)另一后端服務器向組播組組播發(fā)送的IGMP membership response報文,則組播響應發(fā)送模塊取消向組播組內(nèi)組播發(fā)送IGMP membership response報文。
第五方面,本申請?zhí)峁┮环N前端負載均衡器,包括存儲器、處理器、網(wǎng)絡接口和總線,存儲器、網(wǎng)絡接口、處理器分別與總線連接,前端負載均衡器與至少一個后端服務器設置于一個組播組內(nèi),同一組播組內(nèi)的前端負載均衡器和后端服務器均設置有相同的組播地址,存儲器存儲有程序指令和可用服務器列表,可用服務器列表用于記錄注冊成功的后端服務器的單播地址,處理器執(zhí)行存儲器中的程序指令以執(zhí)行步驟:
設置與組播組內(nèi)的后端服務器相同的組播地址;
控制網(wǎng)絡接口向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
控制網(wǎng)絡接口在預設端口監(jiān)聽組播組內(nèi)所有后端服務器響應送IGMP general query報文分別單播發(fā)送的宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括發(fā)送宣告報文的后端服務器的單播地址,預設端口為指定的前端負載均衡器的非系統(tǒng)端口;
解析宣告報文以獲取源地址字段攜帶的后端服務器的單播地址;
在源地址字段攜帶的后端服務器的單播地址沒有記錄在可用服務器列表中時,將源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表。
通過實施上述實施例,前端負載均衡器可從宣告報文獲取到后端服務的單播地址并將其加入可用服務器列表,從而完成注冊,故在前端負載均衡器上全程無需手動進行配置,可有效提高管理便利性。
第六方面,提供一種后端服務器,包括存儲器、處理器、網(wǎng)絡接口和總線,存儲器、網(wǎng)絡接口、處理器分別與總線連接,后端服務器與前端負載均衡器設置于同一個組播組內(nèi),同一組播組內(nèi)的前端負載均衡器和后端服務器均設置有相同的組播地址,,存儲器存儲有程序指令,處理器執(zhí)行存儲器中的程序指令以執(zhí)行步驟:
控制網(wǎng)絡接口接收前端負載均衡器向組播組內(nèi)組播發(fā)送的IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
控制網(wǎng)絡接口響應IGMP general query報文向前端負載均衡器單播發(fā)送宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括后端服務器的單播地址,預設端口為指定的前端負載均衡器的非系統(tǒng)端口。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為根據(jù)本發(fā)明實施例的系統(tǒng)架構示意圖;
圖2是根據(jù)本發(fā)明實施例的版本1的IGMP報文的報文頭的數(shù)據(jù)格式示意圖;
圖3是根據(jù)本發(fā)明實施例的報文交互圖;
圖4是根據(jù)本發(fā)明實施例的一種路由拓撲架構的系統(tǒng)架構示意圖;
圖5是根據(jù)本發(fā)明實施例的另一種路由拓撲架構的系統(tǒng)架構示意圖;
圖6是根據(jù)本發(fā)明實施例的封裝有UDP報文的IP報文的數(shù)據(jù)格式示意圖;
圖7是根據(jù)本發(fā)明實施例的體現(xiàn)心跳計時器與可用服務列表中注冊的單播地址之間的對應關系的示意圖;
圖8是根據(jù)本發(fā)明實施例的前端負載均衡器的裝置結構示意圖;
圖9是根據(jù)本發(fā)明實施例的后端服務器的裝置結構示意圖;
圖10是根據(jù)本發(fā)明實施例的前端負載均衡器的另一裝置結構示意圖;
圖11是根據(jù)本發(fā)明實施例的后端服務器的另一裝置結構示意圖。
具體實施方式
首先請參見圖1,圖1為根據(jù)本發(fā)明實施例的系統(tǒng)架構示意圖,如圖1所示,客戶端111、112、113分別與前端負載均衡器100網(wǎng)絡連接,后端服務器101、102、103分別與前端負載均衡器100網(wǎng)絡連接。
值得注意的是,在本發(fā)明實施例中,客戶端111、112、113具體可通過有線和/或無線網(wǎng)絡分別與前端負載均衡器100網(wǎng)絡連接,后端服務器101、102、103具體可通過有線和/或無線網(wǎng)絡分別與前端負載均衡器100網(wǎng)絡連接。
并且,上述客戶端和后端服務器的數(shù)量僅為示例性,其具體數(shù)量可為單個或復數(shù)個,具體可根據(jù)實際需要設定。
可選地,在上述有線或無線網(wǎng)絡中設置有至少一個組播路由器,組播路由器支持組播功能,以用作路徑計算、報文的組播、轉發(fā)和/或復制。
在圖1中,客戶端111、112或113產(chǎn)生網(wǎng)絡請求并發(fā)送至前端負載均衡器100,前端負載均衡器100根據(jù)后端服務器的注冊情況將該網(wǎng)絡請求轉發(fā)至后端服務器101、102或103進行處理。
即:后端服務器101、102以及103需要先在前端負載均衡器100上進行注冊,前端負載均衡器100才能將客戶端111、112或113產(chǎn)生的請求發(fā)送至對應的后端服務器以進行處理。
具體地,在本發(fā)明實施例中,前端負載均衡器100設置有可用服務器列表,該可用服務器列表記錄了注冊成功的后端服務器的單播地址,只要后端服務器的單播地址記錄在前端負載均衡器的可用服務列表中,前端負載均衡器100就會認為后端服務器在前端負載均衡器注冊成功,從而將客戶端發(fā)出的網(wǎng)絡請求發(fā)送至注冊成功的后端服務器。若后端服務器的單播地址沒有記錄在前端負載均衡器100的可用服務列表中,前端負載均衡器100不會發(fā)送網(wǎng)絡請求至該后端服務器。
因此,本發(fā)明實施例所述的“注冊”是指:將后端服務器的單播地址記錄在前端負載均衡器的可用服務列表中。
在本發(fā)明實施例中,前端負載均衡器100通過對后端服務器所在組播組周期地組播發(fā)送IGMP報文來實現(xiàn)對后端服務器的注冊及注銷,其中IGMP報文可以是現(xiàn)行的版本1、版本2或版本3。
現(xiàn)以版本1的IGMP報文為例進行說明,而版本2和3與版本1類似,于此不作贅述。
參見圖2,圖2是根據(jù)本發(fā)明實施例的版本1的IGMP報文的報文頭的數(shù)據(jù)格式示意圖,如圖2所示,版本1的IGMP報文的報文頭包括8位版本號字段、8位未使用字段、16位校驗和字段、32位組播地址(group address)字段。
在本發(fā)明實施例中,前端負載均衡器100在IGMP general query報文的報文頭版本號字段寫入0x11(0x11表示組播報文的類型為IGMP general query報文,其為組播協(xié)議規(guī)定),32位組播地址字段寫入前端負載均衡器100的單播地址。
組播組內(nèi)的后端服務器接收到IGMP general query報文之后,可以從32位組播地址字段獲取前端負載均衡器100的單播地址,并向前端負載均衡器100的單播地址發(fā)送自身的單播地址,從而完成在前端負載均衡器完成注冊。
為了進一步清楚說明,請參見圖3,圖3是根據(jù)本發(fā)明實施例的報文交互圖。在圖3中以實際的網(wǎng)絡地址標示出組播地址和單播地址,值得注意的是,圖3標出的組播地址和單播地址的具體數(shù)值僅為示例性說明,并不會對本發(fā)明實施例作出限制。
如圖3所示,前端負載均衡器100的組播地址為224.0.1.1,單播地址為192.168.1.100;后端服務器101沒有設置組播地址,單播地址為192.168.1.101;后端服務器102沒有設置組播地址,單播地址為192.168.1.102;后端服務器沒有設置組播地址,單播地址為192.168.1.102;后端服務器103沒有設置組播地址,單播地址為192.168.1.103。
在一些示例中,后端服務器101-103也可設置與224.0.1.1不同的其他組播地址(因此后端服務器101-103與前端負載均衡器100不在一個組播組內(nèi))。
由于后端服務器101、102、103沒有設置組播地址,若需要加入前端負載均衡器100所在組播組,后端服務器101、102、103需各自設置自身組播地址使之與前端負載均衡器100一致。故在步驟1中需在后端服務器101上通過手動或腳本方式配置組播地址為224.0.1.1(與前端負載均衡器100一致)。同樣地,在步驟2中將后端服務器102的組播地址配置為224.0.1.1,在步驟3后端服務器103中將自身組播地址配置為224.0.1.1。
在步驟4至6中,前端負載均衡器100向組播組組播發(fā)送IGMP general query報文并開始計時,值得注意的是,前端負載均衡器100只需向組播組內(nèi)發(fā)送一個IGMP general query報文,該IGMP general query報文通過網(wǎng)絡中的組播路由器進行復制,并分別發(fā)送至組播組內(nèi)每一后端服務器。
在該種實現(xiàn)方式下,由于組播路由器執(zhí)行了復制并分發(fā),故前端負載均衡器100只需發(fā)送一個IGMP general query報文,就可以保證該IGMP general query報文發(fā)送至組播組內(nèi)所有后端服務器101、102、103中,可極大地節(jié)約前端負載均衡器100的上行帶寬。
可選地,前端負載均衡器100可集成組播路由器的功能,復制IGMP general query報文分別發(fā)送至組播組內(nèi)每一后端服務器。
由于組播路由器的功能被前端負載均衡器100集成,因此在該實現(xiàn)方式可應用于沒有設置組播路由器的局域網(wǎng)中。
為了便于理解,請參見圖4和圖5,以對組播路由器執(zhí)行復制并分發(fā)的過程進行介紹,其中圖4是根據(jù)本發(fā)明實施例的一種路由拓撲架構的系統(tǒng)架構示意圖,圖5是根據(jù)本發(fā)明實施例的另一種路由拓撲架構的系統(tǒng)架構示意圖。
在圖4中,前端負載均衡器100向組播組內(nèi)組播發(fā)送一個IGMP general query報文,組播路由器121(該組播路由器121與前端負載均衡器100之間的網(wǎng)絡傳輸時間最短)接收該IGMP general query報文,并復制出三個相同的IGMP general query報文分別發(fā)送至組播組內(nèi)的后端服務器101、102、103。
而在圖5中,前端負載均衡器100向組播組內(nèi)組播發(fā)送一個IGMP general query報文,組播路由器122接收該IGMP general query報文,并復制出二個相同的IGMP general query報文分別發(fā)送至組播組內(nèi)的后端服務器101和組播路由器123,組播路由器123復制兩個相同的IGMP general query報文分別發(fā)送至組播組內(nèi)的后端服務器102和后端服務器103。
值得注意的是,上述圖4和圖5所示僅為本發(fā)明實施例中組播路由器的兩種可實現(xiàn)的連接方式,而本發(fā)明實施例并不受限于上述所示。
由于組播路由器可以復制IGMP general query報文并發(fā)送至組播組內(nèi)的每一個后端服務器,因此可以減少占用前端負載均衡器100的上行帶寬。
而在一些實施例中,前端負載均衡器100也可集成組播路由器的報文復制功能,直接將IGMP general query報文復制并發(fā)送至不同的后端服務器。
并且,在步驟4-6中,前端負載均衡器100向組播組組播發(fā)送IGMP general query報文并開始計時是為了在組播組存活時保證IGMP general query報文能夠周期地發(fā)送(于下文詳細介紹)。
并請繼續(xù)參見圖3,在步驟7中,前端負載均衡器100監(jiān)聽預設端口,該預設端口為指定的前端負載均衡器的非系統(tǒng)端口,如端口2000。
值得注意的是,每一個組播組都可以約定一個非系統(tǒng)端口,前端負載均衡器100和組播組內(nèi)的后端服務器101、102、103均知曉該非系統(tǒng)端口,其通過預先約定來實現(xiàn),不同的組播地址可對應約定不同預設端口,從而促進網(wǎng)絡系統(tǒng)之間的兼容。
在步驟8中,假設組播組內(nèi)的后端服務器101最先接收到IGMP general query報文(假設后端服務器101與前端負載均衡器100之間數(shù)據(jù)傳輸時間最短),基于IGMP協(xié)議本身規(guī)定,后端服務器101需響應IGMP general query報文向組播組組播發(fā)送一個IGMP membership response報文(其數(shù)據(jù)格式如圖2所示,與IGMP general query報文相比,在IGMP報文格式的報文頭版本號字段寫入0x16(0x16表示組播報文的類型為IGMP membership response報報文,其為組播協(xié)議規(guī)定,且組播地址字段為224.0.1.1)。經(jīng)組播路由器(如上圖4或5所示)復制并發(fā)送至組播組內(nèi)的前端負載均衡器100、后端服務器102以及后端服務器103。
后端服務器102以及后端服務器103在接收到前端負載均衡器100向組播組內(nèi)組播發(fā)送的IGMP general query報文之后,同樣需響應IGMP general query報文向組播組組播發(fā)送一個IGMP membership response報文。但是后端服務器102以及后端服務器103在此時進一步接收到后端服務器101向組播組組播發(fā)送的IGMP membership response報文,基于IGMP協(xié)議,后端服務器102以及后端服務器103會抑制向組播組組播發(fā)送IGMP membership response報文,因此后端服務器102以及后端服務器103在向組播組內(nèi)組播發(fā)送IGMP membership response報文之前若接收到組播組內(nèi)另一后端服務器101向組播組組播發(fā)送的IGMP membership response報文,則取消向組播組內(nèi)組播發(fā)送IGMP membership response報文。
步驟8至10是基于IGMP協(xié)議實現(xiàn)IGMP general query報文的回應,后端服務器101通過組播發(fā)送IGMP membership response報文至組播組,可使得前端負載均衡器100獲知該組播組224.0.1.1內(nèi)至少還有一個后端服務器101,獲知該組播組還存活(即有效),從而可繼續(xù)定期向該組播組發(fā)送IGMP general query報文。
具體地,前端負載均衡器100根據(jù)IGMP membership response報文確認組播組有效,在確認組播組有效之后,在計時值(步驟4-6中開始計時)超過預定周期后繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文(見下文的步驟18-19)。
在一些實施例中,當前端負載均衡器100沒有接收到IGMP membership response報文時,說明組播組內(nèi)所有后端服務器均離開組播組,前端負載均衡器100確認組播組失效,則在計時值超過預定周期后停止繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文。
在步驟11中,后端服務器101在發(fā)出步驟8所述的IGMP membership response報文之后,向前端負載均衡器100的預設端口2000發(fā)送宣告報文1,其中宣告報文1的目的地址字段包括前端負載均衡器100的單播地址192.168.1.100,目的端口字段包括預設端口2000,源地址字段包括后端服務器101的單播地址192.168.1.101。
舉例而言,宣告報文可以是UDP報文,該UDP報文封裝在IP報文中,請參見圖6,圖6是根據(jù)本發(fā)明實施例的封裝有UDP報文的IP報文的數(shù)據(jù)格式示意圖。如圖6所示,封裝于IP報文的UDP報文包括源地址字段、目的地址字段、源端口字段、目的端口字段。
在本發(fā)明實施例中,后端服務器101發(fā)出的UDP報文(即宣告報文1)的源地址字段寫入后端服務器101的單播地址192.168.1.101,目的地址字段寫入前端負載均衡器100的單播地址192.168.1.100,目的端口字段寫入預設端口2000。
值得注意的是,由于前端負載均衡器100僅需根據(jù)后端服務器101的單播地址192.168.1.101即可對其進行注冊,而無需知道后端服務器101的源端口,因此后端服務器101發(fā)出的UDP報文的源端口字段可任意設定一非系統(tǒng)端口,本發(fā)明實施例對其不作限制。
由于UDP報文不屬于連接型協(xié)議,無需進行建鏈動作,因而具有資源消耗小,處理速度快的優(yōu)點。
可選地,宣告報文也可以用TCP報文來實現(xiàn),而TCP報文通過三次握手建立連接,雖較UDP報文需時較多,但更為安全可靠。
在步驟12中,前端負載均衡器100在預設端口2000接收到宣告報文1,解析宣告報文1,從宣告報文1的源地址字段獲得后端服務器101的單播地址192.168.1.101,將單播地址192.168.1.101記錄在可用服務器列表40中,并設置一與單播地址192.168.1.101對應的心跳計時器1,控制心跳計時器1開始計時。
在步驟13中,后端服務器102在接收到步驟9所述的IGMP membership response報文之后,向前端負載均衡器100的預設端口2000發(fā)送宣告報文2,其中宣告報文2的目的地址字段包括前端負載均衡器100的單播地址192.168.1.100,目的端口字段包括預設端口2000,源地址字段包括后端服務器102的單播地址192.168.1.102。
在步驟14中,前端負載均衡器100在預設端口2000接收到宣告報文2,解析宣告報文2,從宣告報文2的源地址字段獲得后端服務器102的單播地址192.168.1.102,將單播地址192.168.1.102記錄在可用服務器列表40中,并設置一與單播地址192.168.1.102對應的心跳計時器2,控制心跳計時器2開始計時。
在步驟15中,后端服務器102在接收到步驟10所述的IGMP membership response報文之后,向前端負載均衡器100的預設端口2000發(fā)送宣告報文3,其中宣告報文3的目的地址字段包括前端負載均衡器100的單播地址192.168.1.100,目的端口字段包括預設端口2000,源地址字段包括后端服務器103的單播地址192.168.1.103。
在步驟16中,前端負載均衡器100在預設端口2000接收到宣告報文3,解析宣告報文3,從宣告報文3的源地址字段獲得后端服務器103的單播地址192.168.1.103,將單播地址192.168.1.103記錄在可用服務器列表40中,并設置一與單播地址192.168.1.102對應的心跳計時器3,控制心跳計時器3開始計時。
此時的可用服務器列表40如圖7所示,其中圖7示出心跳計時器與可用服務列表中注冊的單播地址之間的對應關系。
于此,前端負載均衡器100自動獲取到后端服務器101、102、103的單播地址并將其加入可用服務器列表40,從而完成注冊。故在本發(fā)明實施例中,后端服務器101、102、103在本端通過修改自身組播地址來加入前端負載均衡器100所在組播組即可完成注冊,在前端負載均衡器100上全程無需手動進行配置,可有效提高前端負載均衡器100的管理便利性。
在步驟17中,假設后端服務器102需要在前端服務器100中取消注冊,此時只需在后端服務器102通過手動或腳本的配置方式清除后端服務器102的組播地址224.0.1.1(在一些實施例中,也可以配置為與組播地址224.0.1.1不同的其他組播地址),從而退出組播組224.0.1.1。
在步驟18和19中,前端負載均衡器100向組播組組播發(fā)送IGMP general query報文,其中前端負載均衡器100在該IGMP general query報文的32位組播地址字段寫入了前端負載均衡器100的組播地址224.0.1.1,由于后端服務器101和103的組播地址224.0.1.1與前端負載均衡器100一致,因此后端服務器101和103分別接收到IGMP general query報文,而后端服務器102因清除了組播地址,從而退出組播組224.0.1.1,因此接收不到IGMP general query報文。
于此假設后端服務器103最先接收到IGMP general query報文,于是在步驟20中,后端服務器103響應IGMP general query報文向組播組內(nèi)組播發(fā)送IGMP membership response報文,而后端服務器101在步驟21接收到后端服務器103組播發(fā)送的IGMP membership response報文之后,抑制向組播組組播發(fā)送IGMP membership response報文。
故前端負載均衡器100可在接收到后端服務器103組播發(fā)送的IGMP membership response報文之后得知所在組播組224.0.1.1存活。
在步驟22中,后端服務器103向組播組內(nèi)組播發(fā)送IGMP membership response報文之后,發(fā)送宣告報文3至前端負載均衡器100的預設端口2000,其中宣告報文3可與步驟15中所示一致。
在步驟23中,前端負載均衡器100在預設端口2000接收到宣告報文3,解析宣告報文3,從宣告報文3的源地址字段獲得后端服務器103的單播地址192.168.1.103,判斷單播地址192.168.1.103是否記錄在可用服務器列表40中,而由于在步驟16中單播地址192.168.1.103已記錄在可用服務器列表40,因此前端負載均衡器100可判斷到單播地址192.168.1.103已經(jīng)記錄在可用服務器列表40中,此時前端負載均衡器100控制心跳計時器3重新計時。
在步驟24中,后端服務器101接收到后端服務器103向組播組內(nèi)組播發(fā)送的IGMP membership response報文之后,發(fā)送宣告報文1至前端負載均衡器100的預設端口2000,宣告報文1可與步驟11中所示一致。
在步驟25中,前端負載均衡器100在預設端口2000接收到宣告報文1,解析宣告報文1,從宣告報文1的源地址字段獲得后端服務器101的單播地址192.168.1.101,判斷單播地址192.168.1.101是否記錄在可用服務器列表40中,而由于在步驟12中單播地址192.168.1.101已記錄在可用服務器列表40,因此前端負載均衡器100可判斷到單播地址192.168.1.101已經(jīng)記錄在可用服務器列表40中,此時此前端負載均衡器100控制心跳計時器1重新計時。
在步驟26中,前端負載均衡器100判斷心跳計時器1、心跳計時器2、心跳計時器3的計時時間是否超出預定時間段,由于心跳計時器2并沒有清零來重新計時,因此心跳計時器2被判斷為超時。
于此,值得注意的是,在本發(fā)明實施例中,前端負載均衡器100是周期地向組播組內(nèi)組播發(fā)送IGMP general query報文,在步驟4至步驟18之間為一個預定周期(參見步驟8至10),該預定周期設置為比上述的預定時間段長,因此,在一個預定周期內(nèi),沒有重新計時的心跳計時器必然會超出預定時間段。
在步驟26中,更會累計心跳計時器2的超時次數(shù),當多個周期內(nèi)心跳計時器2的超時次數(shù)累計到超出預定數(shù)值時,即可判斷到心跳計時器2對應的后端服務器102是退出該組播組,前端負載均衡器100將心跳計時器2對應的單播地址192.168.1.102從可用服務器列表40中移除。
舉例而言,預定時間段可以是2秒,周期是1秒,超時次數(shù)是10。
在本實施例中,為超時次數(shù)設定預定數(shù)值的原因在于:若后端服務器102并沒有清除組播網(wǎng)絡地址,而是保持留在組播組224.0.1.1中,但是由于網(wǎng)絡不穩(wěn)定,前端負載均衡器100并沒有接收到某幾個周期中由后端服務器102發(fā)出宣告報文2,但若就此判定要注銷后端服務器102則會產(chǎn)生誤判的風險。因此于此對超時次數(shù)設定一預定數(shù)值,在超出預定數(shù)值時再注銷后端服務器102,從而防止誤判的產(chǎn)生。
當然,在網(wǎng)絡完全可靠的情況下,也可以將超時次數(shù)設置為1。
綜上,通過以上方式,本發(fā)明實施例揭示的注冊方法還可以定期監(jiān)控已經(jīng)注冊的后端服務器的實時狀態(tài),自動將退出組播組的后端服務器進行注銷,因此在后端服務器的數(shù)量要進行動態(tài)的擴容或縮容時,無需手動配置前端負載均衡器100,故可進一步提升管理的便利性。
請參見圖8,圖8是根據(jù)本發(fā)明實施例的前端負載均衡器100的裝置結構示意圖,如圖8所示,前端負載均衡器100包括:
組播地址設置模塊201,用于設置與組播組內(nèi)的后端服務器相同的組播地址;
組播查詢發(fā)送模塊202,用于向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器100的單播地址;
單播接收模塊203,用于在預設端口監(jiān)聽組播組內(nèi)所有后端服務器響應送IGMP general query報文分別單播發(fā)送的宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器100的單播地址,目的端口包括預設端口,源地址字段包括發(fā)送宣告報文的后端服務器的單播地址,預設端口為指定的前端負載均衡器100的非系統(tǒng)端口;
報文解析模塊204,用于解析宣告報文以獲取源地址字段攜帶的后端服務器的單播地址;
注冊模塊205,在源地址字段攜帶的后端服務器的單播地址沒有記錄在可用服務器列表40中時,將源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表40。
可選地,前端負載均衡器100還包括心跳計時器和計時器設置模塊206,計時器設置模塊206,用于為可用服務器列表40中記錄的每一所述單播地址均對應設置一心跳計時器,并為源地址字段攜帶的后端服務器的單播地址設置心跳計時器并控制心跳計時器開始計時。
可選地,注冊模塊205還用于:
在判斷到源地址字段攜帶的后端服務器的單播地址記錄在可用服務器列表40中時,控制源地址字段攜帶的后端服務器的單播地址對應的心跳計時器重新計時。
可選地,計時器設置模塊206還用于:
在可用服務器列表40中記錄的單播地址對應的心跳計時器的計時值超出預定時間段時,控制心跳計時器重新計時,并累計心跳計時器的超時次數(shù),在超時次數(shù)超出預定次數(shù)時,將與心跳計時器對應的單播地址從可用服務器列表40中移除。
可選地,前端負載均衡器100還包括組播響應接收模塊207,
組播查詢發(fā)送模塊202,還用于在向組播組內(nèi)組播發(fā)送IGMP general query報文時開始計時;
組播響應接收模塊207,用于接收組播組內(nèi)最先接收到IGMP general query報文的后端服務器響應IGMP general query報文向組播組組播發(fā)送的IGMP membership response報文;
其中,在組播響應接收模塊207接收到組播組內(nèi)最先接收到IGMP general query報文的后端服務器響應IGMP general query報文向組播組組播發(fā)送的IGMP membership response報文時,組播查詢發(fā)送模塊202根據(jù)IGMP membership response報文確認組播組有效,且在計時值超過預定周期后繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文;在組播響應接收模塊207沒有接收到IGMP membership response報文時,組播查詢發(fā)送模塊202確認組播組失效,在計時值超過預定周期后停止繼續(xù)向組播組內(nèi)的后端服務器組播發(fā)送IGMP general query報文。
可選地,宣告報文為UDP報文。
請參見圖9,圖9是根據(jù)本發(fā)明實施例的后端服務器的裝置結構示意圖,如圖9所示,后端服務器300可例如為圖1所示的后端服務器101、102、103中的任一個,后端服務器300包括:
組播地址設置模塊301,用于設置與前端負載均衡器相同的組播地址;
組播查詢接收模塊302,用于接收前端負載均衡器周期地向組播組內(nèi)組播發(fā)送的IGMP general query報文,其中IGMP general query報文的組播地址字段攜帶前端負載均衡器的單播地址;
單播發(fā)送模塊303,用于響應IGMP general query報文向前端負載均衡器單播發(fā)送宣告報文,其中宣告報文的目的地址字段包括前端負載均衡器的單播地址,目的端口包括預設端口,源地址字段包括后端服務器的單播地址,預設端口為組播組預先一致設定的非系統(tǒng)端口。
可選地,宣告報文為UDP報文。
可選地,后端服務器還包括組播響應發(fā)送模塊304,組播響應發(fā)送模塊304用于響應IGMP general query報文向組播組內(nèi)組播發(fā)送IGMP membership response報文,且在組播響應發(fā)送模塊303向組播組內(nèi)組播發(fā)送IGMP membership response報文之前若組播查詢接收模塊302接收到組播組內(nèi)另一后端服務器向組播組組播發(fā)送的IGMP membership response報文,則組播響應發(fā)送模塊304取消向組播組內(nèi)組播發(fā)送IGMP membership response報文。
請參見圖10,圖10是根據(jù)本發(fā)明實施例的前端負載均衡器的另一裝置結構示意圖。如圖10所示,前端負載均衡器100包括存儲器402、處理器401、網(wǎng)絡接口403和總線404,存儲器402、網(wǎng)絡接口403、處理器401分別與總線404連接,存儲器存儲有程序指令和可用服務器列表40(如圖7所示),可用服務器列表40用于記錄注冊成功的后端服務器的單播地址,處理器執(zhí)行存儲器中的程序指令以執(zhí)行圖3所示的前端負載均衡器100所執(zhí)行的步驟。值得注意的是,發(fā)送與接收報文均通過處理執(zhí)行存儲器中的程序指令控制網(wǎng)絡接口403來完成。
請參見圖11,圖11是根據(jù)本發(fā)明實施例的后端服務器的另一裝置結構示意圖,如圖11所示,后端服務器300可以是圖1所示的后端服務器101-103中的任一者,后端服務器300包括存儲器502、處理器501、網(wǎng)絡接口503和總線504,存儲器502、網(wǎng)絡接口503、處理器501分別與總線504連接,存儲器502存儲有程序指令,處理器501執(zhí)行存儲器502中的程序指令以執(zhí)行圖3所示的后端服務器101、102或103所執(zhí)行的步驟。
需說明的是,以上描述的任意裝置實施例都僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結構也可以是多種多樣的,例如模擬電路、數(shù)字電路或專用電路等。但是,對本發(fā)明而言更多情況下軟件程序實現(xiàn)是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
所屬領域的技術人員可以清楚地了解到,上述描述的系統(tǒng)、裝置或單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。