本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及支持哈希調(diào)度策略的lvs調(diào)度方法、設(shè)備及存儲介質(zhì)。
背景技術(shù):
lvs(即linuxvirtualserver,表示linux虛擬服務(wù)器)的sh(souceaddress,即源地址)調(diào)度方法不支持源地址一致性hash調(diào)度,僅通過普通的hash算法根據(jù)源地址選擇相應(yīng)realserver進(jìn)行調(diào)度。當(dāng)某臺realserver(即主機(jī))宕機(jī)時,需要將realserver從轉(zhuǎn)發(fā)表中刪除,否則將出現(xiàn)無法為部分客戶端提供服務(wù)。當(dāng)新添加realserver時,需要將該realserver加到轉(zhuǎn)發(fā)表中。當(dāng)前的sh調(diào)度方法下,realserver的刪除或者添加會引起大量的session(即會話)漂移。
因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述現(xiàn)有技術(shù)的不足之處,本發(fā)明的目的在于提供支持哈希調(diào)度策略的lvs調(diào)度方法、設(shè)備及存儲介質(zhì),旨在解決現(xiàn)有技術(shù)中采用sh調(diào)度方法時,主機(jī)的刪除或者添加會引起大量的會話漂移的問題。
為了達(dá)到上述目的,本發(fā)明采取了以下技術(shù)方案:
一種支持哈希調(diào)度策略的lvs調(diào)度方法,其中,所述方法包括以下步驟:
獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中;
獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;
獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值;
當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。
所述支持哈希調(diào)度策略的lvs調(diào)度方法,其中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟包括:
獲取多個主機(jī)的ip地址,并以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值;
獲取ipv4的地址個數(shù),并以ipv4的地址個數(shù)的兩倍值作為空間大小設(shè)置一環(huán)形空間;
將第一key值置于所述環(huán)形空間中。
所述支持哈希調(diào)度策略的lvs調(diào)度方法,其中,所述當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包的步驟包括:
當(dāng)多個第一key值中最小值大于第二key值時,則將多個第一key值中最小值記為第一最小key值,并獲取與第一最小key值對應(yīng)主機(jī);
獲取與第一最小key值對應(yīng)主機(jī)的ip地址;
以與第一最小key值對應(yīng)主機(jī)的ip地址作為目的地址,將所述數(shù)據(jù)包發(fā)送至所述目的地址,并由該主機(jī)轉(zhuǎn)發(fā)所述數(shù)據(jù)包。
所述支持哈希調(diào)度策略的lvs調(diào)度方法,其中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟之前還包括:
主機(jī)通過http和反向代理方式與nginx物理服務(wù)器連接;其中,所述nginx物理服務(wù)器為imap/pop3/smtp服務(wù)器。
所述支持哈希調(diào)度策略的lvs調(diào)度方法,其中,所述環(huán)形空間中每一ipv4的地址對應(yīng)一個節(jié)點(diǎn),每一節(jié)點(diǎn)均復(fù)制得到一個對應(yīng)的虛擬節(jié)點(diǎn)。
一種支持哈希調(diào)度策略的lvs調(diào)度設(shè)備,其中,所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備包括處理器、存儲器及通信總線;
所述通信總線用于實(shí)現(xiàn)處理器和存儲器之間的連接通信;
所述處理器用于執(zhí)行存儲器中存儲的支持哈希調(diào)度策略的lvs調(diào)度程序,以實(shí)現(xiàn)以下步驟:
獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中;
獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;
獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值;
當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。
所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備,其中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟中,所述處理器還用于執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序,以實(shí)現(xiàn)以下步驟:
獲取多個主機(jī)的ip地址,并以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值;
獲取ipv4的地址個數(shù),并以ipv4的地址個數(shù)的兩倍值作為空間大小設(shè)置一環(huán)形空間;
將第一key值置于所述環(huán)形空間中。
所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備,其中,所述當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包的步驟中,所述處理器還用于執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序,以實(shí)現(xiàn)以下步驟:
當(dāng)多個第一key值中最小值大于第二key值時,則將多個第一key值中最小值記為第一最小key值,并獲取與第一最小key值對應(yīng)主機(jī);
獲取與第一最小key值對應(yīng)主機(jī)的ip地址;
以與第一最小key值對應(yīng)主機(jī)的ip地址作為目的地址,將所述數(shù)據(jù)包發(fā)送至所述目的地址,并由該主機(jī)轉(zhuǎn)發(fā)所述數(shù)據(jù)包。
所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備,其中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟之前還包括:
主機(jī)通過http和反向代理方式與nginx物理服務(wù)器連接;其中,所述nginx物理服務(wù)器為imap/pop3/smtp服務(wù)器。
一種存儲介質(zhì),其中,所述存儲介質(zhì)存儲有一個或者多個程序,所述一個或者多個程序可被一個或者多個處理器執(zhí)行,以實(shí)現(xiàn)所述的支持哈希調(diào)度策略的lvs調(diào)度方法的步驟。
有益效果:本發(fā)明提供的支持哈希調(diào)度策略的lvs調(diào)度方法、設(shè)備及存儲介質(zhì),當(dāng)有某個主機(jī)連接到nginx物理服務(wù)器上時,調(diào)度到相鄰hash節(jié)點(diǎn)上的連接漂移到加入的主機(jī);當(dāng)有某個主機(jī)退出時,調(diào)度到其他主機(jī)的會話不會漂移,只有調(diào)度到退出的主機(jī)上的會話會重新分布,實(shí)現(xiàn)了降低會話漂移,提升負(fù)載均衡服務(wù)質(zhì)量。
附圖說明
圖1為本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度方法較佳實(shí)施例的流程圖。
圖2為本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度方法中步驟s100的流程圖。
圖3為本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度方法較佳實(shí)施例中步驟s400的流程圖。
圖4為本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度程序較佳實(shí)施例的運(yùn)行環(huán)境示意圖。
圖5為本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度程序較佳實(shí)施例的功能模塊圖。
具體實(shí)施方式
本發(fā)明提供支持哈希調(diào)度策略的lvs調(diào)度方法、設(shè)備及存儲介質(zhì),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下參照附圖并舉實(shí)施例對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
請參閱圖1,是本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度方法較佳實(shí)施例的流程圖。如圖1所示,所述支持哈希調(diào)度策略的lvs調(diào)度方法,包括以下步驟:
步驟s100、獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中。
本實(shí)施例中,獲取了主機(jī)的ip地址后,并不是與現(xiàn)有sh調(diào)度方法一樣先根據(jù)源地址選擇相應(yīng)主機(jī)進(jìn)行調(diào)度,而是先對主機(jī)的ip地址進(jìn)行哈希運(yùn)算,得到第一key值。例如有4臺主機(jī),分別記為主機(jī)1、主機(jī)2、主機(jī)3和主機(jī)4,其中主機(jī)1的ip地址為192.168.1.100,主機(jī)2的ip地址為192.168.1.101,主機(jī)3的ip地址為192.168.1.102,主機(jī)4的ip地址為192.168.1.104;分別對3臺主機(jī)的ip地址進(jìn)行哈希運(yùn)算,并得到對應(yīng)的第一key值,具體的hash(“192.168.1.100”)=key1、hash(“192.168.1.101”)=key2、hash(“192.168.1.102”)=key3、hash(“192.168.1.103”)=key4,得到的key1、key2、key3和key4都為第一key值;將上述key1、key2、key3和key4都映射到一個環(huán)形空間中,然后以順時針的方向計(jì)算將所有的第一key值存儲到離自己最近的主機(jī)中。
可以看出,第一key值與主機(jī)處于同一個哈??臻g中。在這樣的部署環(huán)境中,哈希環(huán)是不會更改的,只要算出了對象的hash值就能快速的定位到對應(yīng)的機(jī)器中,這樣就能找到對象真正的存儲位置了。
步驟s200、獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;
同樣的,本實(shí)施例中,在獲取了數(shù)據(jù)包的源地址之后,直接對數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算,即進(jìn)行hash(packet.source_ip)的運(yùn)算,得到第二key值。獲取的第二key值并不是部署到環(huán)形空間(即哈希環(huán))中,而是作為一個尋址用的中間值。
步驟s300、獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值。
在本實(shí)施例中,先獲取環(huán)形空間中所存儲多個第一key值中最小值,即進(jìn)行min{hash(realserver.ip)}的運(yùn)算,當(dāng)?shù)玫搅薽in{hash(realserver.ip)}后與hash(packet.source_ip)(即第二key值)進(jìn)行比較,這一比較結(jié)果決定了目的地址的選定方向。
步驟s400、當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。
在步驟s400中,若判斷了多個第一key值中最小值大于第二key值時,則獲取min{hash(realserver.ip)}對應(yīng)的主機(jī),并以該主機(jī)對應(yīng)的ip地址作為目的地址,數(shù)據(jù)包根據(jù)該目的地址向此處發(fā)送。這樣,實(shí)現(xiàn)了當(dāng)有某個主機(jī)連接到nginx物理服務(wù)器上時,調(diào)度到相鄰hash節(jié)點(diǎn)上的連接漂移到加入的主機(jī),不會引發(fā)大量的會話漂移,提升負(fù)載均衡服務(wù)質(zhì)量。
優(yōu)選的,如圖2所示,所述步驟s100包括:
步驟s101、獲取多個主機(jī)的ip地址,并以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值;
步驟s102、獲取ipv4的地址個數(shù),并以ipv4的地址個數(shù)的兩倍值作為空間大小設(shè)置一環(huán)形空間;
步驟s103、將第一key值置于所述環(huán)形空間中。
在步驟s101中,所獲取的主機(jī)個數(shù)可能為0,也可能是大于0的正整數(shù)。當(dāng)有至少一個主機(jī)與nginx物理服務(wù)器連接時,則獲取每一主機(jī)的ip地址,并將每一主機(jī)的ip地址都進(jìn)行哈希運(yùn)算得到第一key值。這樣,多個主機(jī)的ip地址經(jīng)哈希運(yùn)算得到的key值均不一樣,也就是每個key值都是唯一的,確保了后面的尋址不會出錯。
在步驟s102中,為了確保環(huán)形空間中有足夠的節(jié)點(diǎn),需至少保證環(huán)形空間的大小是ipv4的地址個數(shù)的兩倍。這與現(xiàn)有技術(shù)中采用sh調(diào)度時采用232-1的環(huán)形空間相比,節(jié)省了很多空間大小,以最小的空間大小滿足了調(diào)度的基本需求。本實(shí)施中選擇ipv4的地址個數(shù)的兩倍值作為環(huán)形空間的空間大小,是因?yàn)槟壳爸鳈C(jī)的ip地址格式是ipv4。顯然,當(dāng)主機(jī)的ip地址為ipv6的格式,同樣可以選擇ipv6的地址個數(shù)的兩倍值作為環(huán)形空間的空間大小。
而在步驟s103中,當(dāng)有多個第一key值需置于所述環(huán)形空間中時,是按照第一key值得到的先后順序,按照順時針方向依次插入所述環(huán)形空間。
普通的sh調(diào)度方法中,采用的是hash求余算法,其最為不妥的地方就是在有機(jī)器的添加或者刪除之后會照成大量的對象存儲位置失效,這樣就大大的不滿足單調(diào)性了?;诓襟Es101-s103的所采用的基于一致性哈希算法的處理方式,與普通的sh調(diào)度方法相比,能有效滿足單獨(dú)性。
以上面4臺主機(jī)的例子繼續(xù)舉例說明。如果按照順時針的方向,將key1存儲到哈希環(huán)中的node1,將key3存儲到哈希環(huán)中的node2,將key2和key4存儲到哈希環(huán)中的node3,如果node2出現(xiàn)故障被刪除了,那么按照順時針遷移的方法,object3將會被遷移到node3中,這樣僅僅是object3的映射位置發(fā)生了變化,其它的對象沒有任何的改動。
如果往集群中添加一個新的節(jié)點(diǎn)node4,通過對應(yīng)的哈希算法得到key4,并映射到哈希環(huán)中。通過按順時針遷移的規(guī)則,那么object2被遷移到了node4中,其它對象還保持這原有的存儲位置。通過對節(jié)點(diǎn)的添加和刪除的分析,一致性哈希算法在保持了單調(diào)性的同時,還是數(shù)據(jù)的遷移達(dá)到了最小,這樣的算法對分布式集群來說是非常合適的,避免了大量數(shù)據(jù)遷移,減小了服務(wù)器的的壓力。
優(yōu)選的,如圖3所示,所示步驟s400包括:
步驟s401、當(dāng)多個第一key值中最小值大于第二key值時,則將多個第一key值中最小值記為第一最小key值,并獲取與第一最小key值對應(yīng)主機(jī);
步驟s402、獲取與第一最小key值對應(yīng)主機(jī)的ip地址;
步驟s403、以與第一最小key值對應(yīng)主機(jī)的ip地址作為目的地址,將所述數(shù)據(jù)包發(fā)送至所述目的地址,并由該主機(jī)轉(zhuǎn)發(fā)所述數(shù)據(jù)包。
優(yōu)選的,在所述支持哈希調(diào)度策略的lvs調(diào)度方法中,所述步驟s100之前還包括:
步驟s10、主機(jī)通過http和反向代理方式與nginx物理服務(wù)器連接;其中,所述nginx物理服務(wù)器為imap/pop3/smtp服務(wù)器。
更具體的,所述步驟s10包括:
1)nginx物理服務(wù)器(即高性能的http和反向代理服務(wù)器)中的lxc1-lxc8分別使用vf1-vf8連接至pf1-1,lxc1-lxc8還分別使用vf1-vf8連接只pf1-2;lxc9-lxc16分別使用vf1-vf8連接至pf2-1,lxc9-lxc16還分別使用vf1-vf8連接只pf2-2;其中pf1-1和pf2-1為vlanexternal接口(即外部虛擬局域網(wǎng)接口)、pf1-2、pf2-2均為vlaninternal接口(即內(nèi)部虛擬局域網(wǎng)接口)
2)nginx物理服務(wù)器與ipsv(即ip虛擬服務(wù)器)通過后端服務(wù)器負(fù)載均衡器ipvs-dr連接;
3、)ipsv通過realip與tor建立bgppeer,并發(fā)布vip的主機(jī)路由,形成ecmp(即等價路由)后與cxp交換機(jī)連接,cxp交換機(jī)接收來自外網(wǎng)客戶端的連接請求。通過上述方式,來實(shí)現(xiàn)lvs負(fù)載均衡。
優(yōu)選的,在所述支持哈希調(diào)度策略的lvs調(diào)度方法中,所述環(huán)形空間中每一ipv4的地址對應(yīng)一個節(jié)點(diǎn),每一節(jié)點(diǎn)均復(fù)制得到一個對應(yīng)的虛擬節(jié)點(diǎn)。在一致性哈希算法中,為了盡可能的滿足平衡性,其引入了虛擬節(jié)點(diǎn)?!疤摂M節(jié)點(diǎn)”(virtualnode)是實(shí)際節(jié)點(diǎn)(機(jī)器)在hash空間的復(fù)制(replica),一實(shí)際個節(jié)點(diǎn)(機(jī)器)對應(yīng)了若干個“虛擬節(jié)點(diǎn)”,這個對應(yīng)個數(shù)也成為“復(fù)制個數(shù)”,“虛擬節(jié)點(diǎn)”在hash空間中以hash值排列。通過虛擬節(jié)點(diǎn)的引入,對象的分布就比較均衡了。虛擬節(jié)點(diǎn)的hash計(jì)算可以采用對應(yīng)節(jié)點(diǎn)的ip地址加數(shù)字后綴的方式。例如假設(shè)node1的ip地址為192.168.1.100。引入“虛擬節(jié)點(diǎn)”前,計(jì)算cachea的hash值:hash(“192.168.1.100”);
引入“虛擬節(jié)點(diǎn)”后,計(jì)算“虛擬節(jié)”點(diǎn)node1-1和node1-2的hash值:hash(“192.168.1.100#1”);//node1-1,hash(“192.168.1.100#2”);//node1-2。
可見,本發(fā)明所述的支持哈希調(diào)度策略的lvs調(diào)度方法中,當(dāng)有某個主機(jī)連接到nginx物理服務(wù)器上時,調(diào)度到相鄰hash節(jié)點(diǎn)上的連接漂移到加入的主機(jī);當(dāng)有某個主機(jī)退出時,調(diào)度到其他主機(jī)的會話不會漂移,只有調(diào)度到退出的主機(jī)上的會話會重新分布,實(shí)現(xiàn)了降低會話漂移,提升負(fù)載均衡服務(wù)質(zhì)量。
基于上述支持哈希調(diào)度策略的lvs調(diào)度方法,本發(fā)明還提供了一種支持哈希調(diào)度策略的lvs調(diào)度設(shè)備。如圖4所示,所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備包括處理器11、存儲器12及通信總線;
所述通信總線用于實(shí)現(xiàn)處理器和存儲器之間的連接通信;
所述處理器用于執(zhí)行存儲器中存儲的支持哈希調(diào)度策略的lvs調(diào)度程序,以實(shí)現(xiàn)以下步驟:
獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中;
獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;
獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值;
當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。
在本實(shí)施例中,所述的支持哈希調(diào)度策略的lvs調(diào)度程序10安裝并運(yùn)行于電子裝置1中。所述電子裝置1可以是桌上型計(jì)算機(jī)、筆記本、掌上電腦及服務(wù)器等計(jì)算設(shè)備。該電子裝置1可包括,但不僅限于,存儲器11、處理器12及顯示器13。圖4僅示出了具有組件11-13的電子裝置1,但是應(yīng)理解的是,并不要求實(shí)施所有示出的組件,可以替代的實(shí)施更多或者更少的組件。
所述存儲器11在一些實(shí)施例中可以是所述電子裝置1的內(nèi)部存儲單元,例如該電子裝置1的硬盤或內(nèi)存。所述存儲器11在另一些實(shí)施例中也可以是所述電子裝置1的外部存儲設(shè)備,例如所述電子裝置1上配備的插接式硬盤,智能存儲卡(smartmediacard,smc),安全數(shù)字(securedigital,sd)卡,閃存卡(flashcard)等。進(jìn)一步地,所述存儲器11還可以既包括所述電子裝置1的內(nèi)部存儲單元也包括外部存儲設(shè)備。所述存儲器11用于存儲安裝于所述電子裝置1的應(yīng)用軟件及各類數(shù)據(jù),例如所述支持哈希調(diào)度策略的lvs調(diào)度程序的程序代碼等。所述存儲器11還可以用于暫時地存儲已經(jīng)輸出或者將要輸出的數(shù)據(jù)。
所述處理器12在一些實(shí)施例中可以是一中央處理器(centralprocessingunit,cpu),微處理器或其他數(shù)據(jù)處理芯片,用于運(yùn)行所述存儲器11中存儲的程序代碼或處理數(shù)據(jù),例如執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序10等。
所述顯示器13在一些實(shí)施例中可以是led顯示器、液晶顯示器、觸控式液晶顯示器以及oled(organiclight-emittingdiode,有機(jī)發(fā)光二極管)觸摸器等。所述顯示器13用于顯示在所述電子裝置1中處理的信息以及用于顯示可視化的用戶界面,例如應(yīng)用菜單界面、應(yīng)用圖標(biāo)界面等。所述電子裝置1的部件11-13通過系統(tǒng)總線相互通信。
進(jìn)一步的,在所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟中,所述處理器還用于執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序10,以實(shí)現(xiàn)以下步驟:
獲取多個主機(jī)的ip地址,并以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值;
獲取ipv4的地址個數(shù),并以ipv4的地址個數(shù)的兩倍值作為空間大小設(shè)置一環(huán)形空間;
將第一key值置于所述環(huán)形空間中。
進(jìn)一步的,在所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備中,所述當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包的步驟中,所述處理器還用于執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序10,以實(shí)現(xiàn)以下步驟:
當(dāng)多個第一key值中最小值大于第二key值時,則將多個第一key值中最小值記為第一最小key值,并獲取與第一最小key值對應(yīng)主機(jī);
獲取與第一最小key值對應(yīng)主機(jī)的ip地址;
以與第一最小key值對應(yīng)主機(jī)的ip地址作為目的地址,將所述數(shù)據(jù)包發(fā)送至所述目的地址,并由該主機(jī)轉(zhuǎn)發(fā)所述數(shù)據(jù)包。
進(jìn)一步的,在所述支持哈希調(diào)度策略的lvs調(diào)度設(shè)備中,所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟之前,所述處理器還用于執(zhí)行所述支持哈希調(diào)度策略的lvs調(diào)度程序10,以實(shí)現(xiàn)以下步驟:
主機(jī)通過http和反向代理方式與nginx物理服務(wù)器連接;其中,所述nginx物理服務(wù)器為imap/pop3/smtp服務(wù)器。
請參閱圖5,是本發(fā)明安裝支持哈希調(diào)度策略的lvs調(diào)度程序10較佳實(shí)施例的功能模塊圖。在本實(shí)施例中,所述的支持哈希調(diào)度策略的lvs調(diào)度程序10包括至少一個計(jì)算機(jī)程序指令段,該計(jì)算機(jī)程序指令段基于各部分實(shí)現(xiàn)的功能不同,可以分成一個或多個模塊,所述一個或者多個模塊被存儲于所述存儲器11中,并由一個或多個處理器(本實(shí)施例為所述處理器12)所執(zhí)行,以完成本申請各實(shí)施例的支持哈希調(diào)度策略的lvs調(diào)度方法。例如,在圖5中,所述的支持哈希調(diào)度策略的lvs調(diào)度程序10包括第一獲取模塊21、第二獲取模塊22、判斷模塊23及目的地址獲取模塊24;其中,第一獲取模塊21,用于獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中;第二獲取模塊22,用于獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;判斷模塊23,用于獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值;目的地址獲取模塊24,用于當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。
這些模塊由處理器12執(zhí)行,從而實(shí)現(xiàn)以下步驟:
獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中;
獲取數(shù)據(jù)包的源地址,并以數(shù)據(jù)包的源地址進(jìn)行哈希運(yùn)算得到第二key值;
獲取環(huán)形空間中所存儲多個第一key值中最小值,并判斷多個第一key值中最小值是否大于第二key值;
當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包。具體實(shí)現(xiàn)與前面的實(shí)施例相同,在此不再贅述。
所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟包括:
獲取多個主機(jī)的ip地址,并以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值;
獲取ipv4的地址個數(shù),并以ipv4的地址個數(shù)的兩倍值作為空間大小設(shè)置一環(huán)形空間;
將第一key值置于所述環(huán)形空間中。具體實(shí)現(xiàn)與前面的實(shí)施例相同,在此不再贅述。
所述當(dāng)多個第一key值中最小值大于第二key值時,則以多個第一key值中最小值對應(yīng)的主機(jī)作為目的地址發(fā)送所述數(shù)據(jù)包的步驟包括:
當(dāng)多個第一key值中最小值大于第二key值時,則將多個第一key值中最小值記為第一最小key值,并獲取與第一最小key值對應(yīng)主機(jī);
獲取與第一最小key值對應(yīng)主機(jī)的ip地址;
以與第一最小key值對應(yīng)主機(jī)的ip地址作為目的地址,將所述數(shù)據(jù)包發(fā)送至所述目的地址,并由該主機(jī)轉(zhuǎn)發(fā)所述數(shù)據(jù)包。具體實(shí)現(xiàn)與前面的實(shí)施例相同,在此不再贅述。
所述獲取多個主機(jī)的ip地址,以每一主機(jī)的ip地址一一進(jìn)行哈希運(yùn)算得到對應(yīng)的第一key值,將第一key值置于指定大小的環(huán)形空間中的步驟之前還包括:
主機(jī)通過http和反向代理方式與nginx物理服務(wù)器連接;其中,所述nginx物理服務(wù)器為imap/pop3/smtp服務(wù)器。具體實(shí)現(xiàn)與前面的實(shí)施例相同,在此不再贅述。
所述環(huán)形空間中每一ipv4的地址對應(yīng)一個節(jié)點(diǎn),每一節(jié)點(diǎn)均復(fù)制得到一個對應(yīng)的虛擬節(jié)點(diǎn)。具體實(shí)現(xiàn)與前面的實(shí)施例相同,在此不再贅述。
基于上述支持哈希調(diào)度策略的lvs調(diào)度方法,本發(fā)明還提供了一種存儲介質(zhì)(及計(jì)算機(jī)可讀存儲介質(zhì))。所述存儲介質(zhì)存儲有一個或者多個程序,所述一個或者多個程序可被一個或者多個處理器執(zhí)行,以實(shí)現(xiàn)所述的支持哈希調(diào)度策略的lvs調(diào)度方法的步驟。
綜上所述,本發(fā)明所提供的支持哈希調(diào)度策略的lvs調(diào)度方法、設(shè)備及存儲介質(zhì),當(dāng)有某個主機(jī)連接到nginx物理服務(wù)器上時,調(diào)度到相鄰hash節(jié)點(diǎn)上的連接漂移到加入的主機(jī);當(dāng)有某個主機(jī)退出時,調(diào)度到其他主機(jī)的會話不會漂移,只有調(diào)度到退出的主機(jī)上的會話會重新分布,實(shí)現(xiàn)了降低會話漂移,提升負(fù)載均衡服務(wù)質(zhì)量。
可以理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)本發(fā)明的技術(shù)方案及本發(fā)明構(gòu)思加以等同替換或改變,而所有這些改變或替換都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。