欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種實現(xiàn)Redis集群高可用的方法及系統(tǒng)的制作方法

文檔序號:10572761閱讀:603來源:國知局
一種實現(xiàn)Redis集群高可用的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開一種實現(xiàn)Redis集群高可用的方法及系統(tǒng),所述集群包括中間件、至少兩個與所述中間件連接的代理節(jié)點,與所述代理節(jié)點連接的Redis服務器,該方法包括:所述中間件為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路;所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路;所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值;若是,則所述中間件將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信,用以解決傳統(tǒng)的Redis集群無法自動隔離掉故障代理節(jié)點的問題。
【專利說明】
一種實現(xiàn)Red i s集群高可用的方法及系統(tǒng)
技術領域
[0001]本發(fā)明涉及通信技術領域,尤其涉及一種實現(xiàn)Redis集群高可用的方法及系統(tǒng)。
【背景技術】
[0002]目前web應用系統(tǒng)為了解決高并發(fā)帶來的性能問題,都會在web應用系統(tǒng)與數(shù)據(jù)庫之間采取緩存層,使用最為廣泛的就是RediS(RediS本質(zhì)上是一個鍵-值類型的內(nèi)存數(shù)據(jù)庫KRedis作為軟件和傳統(tǒng)數(shù)據(jù)庫之間的緩沖層,操作命令簡單,在保證了數(shù)據(jù)有效性的情況下,同時也保證了高性能。
[0003]傳統(tǒng)的Redis集群如圖1所示,包括:中間件、代理節(jié)點和服務器,其中,Redis集群中至少包含兩臺代理節(jié)點、三臺主服務器和三臺從服務器,中間件發(fā)起的每個工作線程隨機直連一臺代理節(jié)點,而代理節(jié)點再與主服務器連接,每個代理節(jié)點之間連接的主服務器相同,這種方式可以有效地實現(xiàn)負載均衡,但是在任意一個代理節(jié)點發(fā)生故障時,傳統(tǒng)的集群并不能及時地隔離掉故障代理節(jié)點,因此導致在人工隔離故障代理節(jié)點前存在部分中間件發(fā)出的請求處理失敗,可見,傳統(tǒng)的Redis集群無法自動隔離掉故障代理節(jié)點,影響了正常地業(yè)務處理請求。

【發(fā)明內(nèi)容】

[0004]本發(fā)明實施例提供一種實現(xiàn)Redis集群高可用的方法及系統(tǒng),用以解決傳統(tǒng)的Redis集群無法自動隔離掉故障代理節(jié)點的問題。
[0005]本發(fā)明方法包括一種實現(xiàn)Redis集群高可用的方法,所述集群包括中間件、至少兩個與所述中間件連接的代理節(jié)點,與所述代理節(jié)點連接的Redis服務器,該方法包括:所述中間件為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路;
[0006]所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路;
[0007]所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值;
[0008]若是,則所述中間件將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。
[0009]基于同樣地發(fā)明構思,本發(fā)明實施例進一步地提供一種實現(xiàn)Redis集群高可用的系統(tǒng),所述系統(tǒng)包括中間件、至少兩個與所述中間件連接的代理節(jié)點,與所述代理節(jié)點連接的Redis服務器,所述中間件包括:
[0010]連接池生成單元,用于為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路;
[0011]偵測單元,用于通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路;
[0012]判斷單元,用于確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值;
[0013]若是,處理單元,用于將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。
[0014]本發(fā)明實施例中間件建立與所述每個代理節(jié)點通信的連接池,其中,所述連接池中包含所述中間件與所述每個代理節(jié)點通信的各條連接鏈路,一方面,中間件通過發(fā)起偵測線程偵測所述連接池中的連接鏈路,并將標記發(fā)生故障的連接鏈路,當所述中間件確定對應任意一個代理節(jié)點被標記的連接鏈路條數(shù)大于設定閾值時,將對應的代理節(jié)點確定為故障代理節(jié)點并隔離,以使所述中間件停止與所述故障代理節(jié)點的通信。也就是說,對于任意一個代理節(jié)點來說,若中間件主動檢測到與該代理節(jié)點對應連接的設定數(shù)量的連接鏈路均失效,則證明該代理節(jié)點發(fā)生故障,因此主動將該代理節(jié)點定義為故障代理節(jié)點,停止與該故障代理節(jié)點的通信,從而實現(xiàn)了自動隔離故障節(jié)點的功能,保證了中間件與代理節(jié)點之間的業(yè)務處理不受影響。
【附圖說明】
[0015]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1為現(xiàn)有技術提供的一種Redis集群架構;
[0017]圖2為本發(fā)明實施例提供一種實現(xiàn)Redis集群高可用的方法流程示意圖;
[0018]圖3為本發(fā)明實施例提供一種偵測線程和正常工作線程的處理過程;
[0019]圖4為本發(fā)明實施例提供一種代理節(jié)點進行主從切換的過程;
[0020]圖5為本發(fā)明實施例還提供一種實現(xiàn)Redis集群高可用的系統(tǒng)。
【具體實施方式】
[0021]為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明作進一步地詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
[0022]參見圖2所示,本發(fā)明實施例提供一種實現(xiàn)Redis集群高可用的方法流程示意圖,具體地實現(xiàn)方法包括:
[0023]步驟SlOl,所述中間件為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路。
[0024]步驟S102,所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路。
[0025]步驟S103,所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值。
[0026]步驟S104,若是,則將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。
[0027]因為中間件與代理節(jié)點之間是通過各條連接鏈路進行通信的,當代理節(jié)點發(fā)生故障,與該代理節(jié)點連接的各條連接鏈路是無法進行正常通信的,所以本發(fā)明實施例通過監(jiān)測每個代理節(jié)點對應的連接池中連接鏈路的運行狀態(tài),當發(fā)現(xiàn)某一個代理節(jié)點對應的連接池中有大部分的連接鏈路都發(fā)生故障了,或者說當發(fā)現(xiàn)全部都發(fā)生故障了,則證明該代理節(jié)點是故障代理節(jié)點,否則,如果只是某幾條鏈路發(fā)生故障,很可能是因為暫時的網(wǎng)絡不穩(wěn)定等原因造成的,因此仍然認定該代理節(jié)點是正常的。
[0028]在步驟S104之后,本發(fā)明實施例進一步地幀測連接池中的被標記的連接鏈路是否恢復正常,若發(fā)現(xiàn)對應同一個代理節(jié)點的被標記的連接鏈路有設定數(shù)量恢復正常了,或者全部恢復正常了,則認為該代理節(jié)點恢復正常,將該代理節(jié)點從故障狀態(tài)修復為正常狀態(tài),即恢復通信。
[0029]進一步地,所述標記發(fā)生故障的連接鏈路之后,還包括:
[0030]將被標記的連接鏈路從所述連接池轉(zhuǎn)移至預設的不可用服務鏈表中;
[0031]所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值,包括:所述中間件確定所述不可用服務鏈表中對應同一代理節(jié)點的連接鏈路條數(shù)是否大于設定閾值。
[0032]也就是說,預先建立一個不可用服務鏈表,該鏈表用于存儲被標記的連接鏈路,通過判斷不可用服務鏈表中對應同一代理節(jié)點的連接鏈路個數(shù)確定故障代理節(jié)點。需要說明的是,每條連接鏈路均具有標識屬于哪個代理節(jié)點的屬性,所以在不可用服務鏈表中的故障連接鏈路是可以通過這樣屬性確定屬于哪個代理節(jié)點的。
[0033]進一步地,所述中間件通過所述偵測線程偵測所述不可用服務鏈表中的連接鏈路是否恢復正常;
[0034]若是,則所述中間件將恢復正常的連接鏈路從所述不可用服務鏈表轉(zhuǎn)移至所述恢復正常的連接鏈路對應的連接池中;
[0035]當所述故障代理節(jié)點對應的恢復正常的連接鏈路大于設定閾值時,所述中間件恢復所述故障代理節(jié)點的通信。
[0036]上述過程指的是中間件的偵測線程監(jiān)測不可用服務鏈表中的連接鏈路是否恢復正常,若發(fā)現(xiàn)連接鏈路恢復正常,則可以將該部分恢復正常的連接鏈路從不可用服務鏈表轉(zhuǎn)移至連接池中,若對應同一個故障代理節(jié)點,有設定數(shù)量個的連接鏈路被轉(zhuǎn)移至連接池中,則說明該故障代理節(jié)點恢復正常,因此將該代理節(jié)點從故障狀態(tài)修復為正常狀態(tài),即恢復通?目O
[0037]需要說明的是,上述監(jiān)測不可用服務鏈表中的連接鏈路是否恢復正常的過程與偵測每個代理節(jié)點的連接池中的連接鏈路是否發(fā)生故障的過程可以是先后進行的,也可以同時進行的,具體選擇根據(jù)實際需要確定。另外,中間件判斷對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值,該設定閾值與上文判斷有設定數(shù)量個的連接鏈路被轉(zhuǎn)移至連接池中的設定數(shù)量,可以是相同的,也可以是不同的,設定閾值的大小和設定數(shù)量的大小是在具體應用場景下的的經(jīng)驗值。
[0038]進一步地,所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,包括:
[0039]所述中間件運行偵測線程,所述偵測線程執(zhí)行如下動作:
[0040]從所述連接池中輪詢獲取每條連接鏈路;
[0041 ]針對獲取的每條連接鏈路,向每條連接鏈路發(fā)起心跳檢測;
[0042]若心跳檢測成功,則確定所述連接鏈路正常,否則將所述連接鏈路確定為發(fā)生故障的連接鏈路。
[0043]假設說對應一個代理節(jié)點的連接池中有100條連接鏈路,偵測線程周期性從所述連接池中輪詢獲取每條連接鏈路,向連接池中連接鏈路發(fā)送心跳檢測,當收到心跳檢測的響應時,證明該條連接鏈路是可以正常通信的,否則,則說明該條連接鏈路不能正常相同心跳報文,因此是發(fā)生故障的連接鏈路。
[0044]考慮到所述中間件的偵測線程在工作的同時,也在運行讀寫請求的工作線程,所以,本發(fā)明實施例進一步地,所述中間件接收應用發(fā)送的讀寫請求;
[0045]所述中間件根據(jù)各代理節(jié)點的工作狀態(tài),確定所述讀寫請求對應的代理節(jié)點;
[0046]利用所述所述代理節(jié)點的連接池中的連接鏈路將所述讀寫請求發(fā)送給所述對應的代理節(jié)點;
[0047]若發(fā)送失敗,則所述讀寫請求對應的連接鏈路從所述連接池中轉(zhuǎn)移至預設的不可用服務鏈表中。
[0048]也就是說,中間件收到應用程序發(fā)來的讀寫請求,首先確定本條讀寫請求對應的哪個代理節(jié)點,當確定好代理節(jié)點之后,因為所述中間件為各代理節(jié)點設置有連接池,每個連接池中包括多個連接鏈路;因此利用所述連接池中所述代理節(jié)點的連接鏈路將所述讀寫請求發(fā)送給所述對應的代理節(jié)點,當發(fā)生失敗時,證明該條連接鏈路屬于故障的連接鏈路,因此將它轉(zhuǎn)移至不可用服務鏈表中,然后再從連接池中獲取其它的連接鏈路再次發(fā)送所述讀寫請求,這樣就可以在工作線程處理任務的同時也對連接鏈路的運行狀態(tài)進行偵測,也保證了讀寫請求可以被正常的發(fā)送。
[0049]如圖3所示,示例性地描述了偵測線程和正常工作線程的處理過程,步驟如下:
[0050]步驟S201,中間件為每個代理節(jié)點建立對應的連接池,連接池中包含若干個連接鏈路。
[0051 ]步驟S202,中間件發(fā)起一個偵測線程,該線程首先從連接池中獲取每條連接鏈路,向每條連接鏈路發(fā)送心跳報文,若沒有響應,則把該條連接鏈路插入到不可用服務鏈表中;同時偵測線程監(jiān)測不可用服務鏈表中的連接鏈路是否恢復正常,若是,則把不可用服務鏈表中該條恢復正常的連接鏈路從鏈表轉(zhuǎn)移至連接池中。
[0052]步驟S203,中間件運行工作線程處理來自應用程序的讀寫請求時,每條工作線程在處理每條連接鏈路的同時,判斷該條連接鏈路是否發(fā)送請求成功,若不成功,則把該條連接鏈路轉(zhuǎn)移至不可用服務鏈表中。
[0053]進一步地,所述Redi s服務器包括Redi s主服務器和Redi s從服務器;該方法還包括:
[0054]針對連接同一個Redis主服務器的各代理節(jié)點,所述各代理節(jié)點向共同連接的主服務器發(fā)送心跳檢測;
[0055]若心跳檢測失敗,則從所述各代理節(jié)點中確定第一代理節(jié)點進行主從服務器的切換,所述第一代理節(jié)點為所述各代理節(jié)點中的任意一個;
[0056]當所述第一代理節(jié)點的Redis主服務器和Redis從服務器切換成功之后,所述第一代理節(jié)點將切換之后的Redis主服務器的IP地址通知至連接所述主服務器的其余的代理節(jié)點,以使所述其余的代理節(jié)點完成主從切換。
[0057]因為共同工作的代理節(jié)點之間連接的主服務的IP地址是完全相同的,所以要進行主從切換時,可以先選擇一個代理節(jié)點進行主從服務器的切換,然后再將切換之后的主服務器的IP地址通知給其它的代理節(jié)點。
[0058]進一步地,所述當切換成功之后,包括:所述各代理節(jié)點更新各自的內(nèi)存參數(shù)和配置文件的配置信息,其中,所述內(nèi)存參數(shù)包含的主服務器和從服務器的屬性信息與所述配置文件的配置信息中主服務器和從服務器的屬性信息一致。其中,所述主服務器和從服務器的屬性信息包括:主服務器的IP地址、主服務器的端口信息、從服務器的IP地址、從服務器的端口信息。
[0059]因為現(xiàn)有的代理節(jié)點對服務端的高可用一般采用Sentinel+腳本的方式,Sentinel需要單獨部署,即需要在代理節(jié)點之外單獨啟動一個線程,在檢測到主服務器節(jié)點發(fā)生故障時,采用事件的方式通知腳本,由腳本負責更新代理的配置文件并重啟該代理節(jié)點??梢娺@種主從切換方式,代理節(jié)點不得不進行重啟的操作,為了解決這一問題,本發(fā)明實施例通過在代理節(jié)點的內(nèi)部集成監(jiān)聽和腳本事件通知的功能,即不需要再代理節(jié)點之外再啟用一個線程,只是運行代理節(jié)點的線程就可以完成腳本和監(jiān)聽的功能,具體地,如圖4所示,假設有兩個代理節(jié)點在同時工作,兩個代理節(jié)點均連接同一個主服務器,當主服務器發(fā)生故障時,通過上述方法進行主從切換的具體過程如下:
[0060]步驟S301,代理節(jié)點I和代理節(jié)點2均周期性地向該主服務器發(fā)送心跳報文
[0061 ] 步驟S302,若代理節(jié)點I和代理節(jié)點2均多次沒有收到響應,則選擇代理節(jié)點2進行優(yōu)先進行主從切換。
[0062]步驟S303,代理節(jié)點2進行主從切換,將從服務器更新為主服務器。
[0063]步驟S304,代理節(jié)點2將修改之后的主服務器的IP地址和端口號通知給代理節(jié)點I,代理節(jié)點I收到通知之后將該IP地址對應的服務器更新為主服務器。
[0064]步驟S305,代理節(jié)點2更新配置文件和該地阿里節(jié)點內(nèi)部的內(nèi)存參數(shù),即更新主服務器的IP地址和主服務器的端口信息。
[0065]步驟S306,代理節(jié)點I也更新配置文件和該地阿里節(jié)點內(nèi)部的內(nèi)存參數(shù),即更新主服務器的IP地址和主服務器的端口信息。
[0066]基于相同的技術構思,本發(fā)明實施例還提供一種實現(xiàn)Redis集群高可用的系統(tǒng),該系統(tǒng)可執(zhí)行上述方法實施例。本發(fā)明實施例提供的系統(tǒng)如圖5所示,包括:連接池生成單元501、偵測單元502、判斷單元503、處理單元504,其中,所述中間件包括:
[0067]連接池生成單元501,用于為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路;
[0068]偵測單元502,用于通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路;
[0069]判斷單元503,用于確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值;
[0070]若是,處理單元504,用于將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。
[0071]進一步地,所述偵測單元502還用于將被標記的連接鏈路從所述連接池轉(zhuǎn)移至預設的不可用服務鏈表中;
[0072]所述判斷單元503還用于:確定所述不可用服務鏈表中對應同一代理節(jié)點的連接鏈路條數(shù)是否大于設定閾值。
[0073]所述偵測單元502還用于:通過所述偵測線程偵測所述不可用服務鏈表中的連接鏈路是否恢復正常;
[0074]若是,所述處理單元504還用于:將恢復正常的連接鏈路從所述不可用服務鏈表轉(zhuǎn)移至所述恢復正常的連接鏈路對應的連接池中;所述判斷單元503還用于判斷當所述故障代理節(jié)點對應的恢復正常的連接鏈路大于設定閾值時,所述處理單元504恢復所述故障代理節(jié)點的通信。
[0075]進一步地,所述偵測單元502具體用于:運行偵測線程,所述偵測線程執(zhí)行如下動作:
[0076]從所述連接池中輪詢獲取每條連接鏈路;
[0077]針對獲取的每條連接鏈路,向每條連接鏈路發(fā)起心跳檢測;
[0078]若心跳檢測成功,則確定所述連接鏈路正常,否則將所述連接鏈路確定為發(fā)生故障的連接鏈路。
[0079]進一步地,對于所述中間件來說,還包括:讀寫處理單元505:用于接收應用發(fā)送的讀寫請求;
[0080]所述處理單元504還用于:根據(jù)各代理節(jié)點的工作狀態(tài),確定所述讀寫請求對應的代理節(jié)點;利用所述讀寫請求對應的代理節(jié)點的連接池中的連接鏈路將所述讀寫請求發(fā)送給對應的代理節(jié)點;若發(fā)送失敗,則將所述讀寫請求對應的連接鏈路從所述讀寫請求對應的代理節(jié)點的連接池中轉(zhuǎn)移至預設的不可用服務鏈表中。
[0081]進一步地,所述Redis服務器包括Redis主服務器和Redis從服務器;該系統(tǒng)還包括:
[0082]針對連接同一個Redis主服務器的各代理節(jié)點,所述代理節(jié)點向共同連接的主服務器發(fā)送心跳檢測;
[0083]若各代理節(jié)點心跳檢測失敗,則代理節(jié)點的主從切換單元506從所述各代理節(jié)點中確定第一代理節(jié)點進行主從服務器的切換,所述第一代理節(jié)點為所述各代理節(jié)點中的任意一個;
[0084]當所述第一代理節(jié)點的Redis主服務器和Redis從服務器切換成功之后,將切換之后的Redis主服務器的IP地址通知至連接所述主服務器的其余的代理節(jié)點,以使所述其余的代理節(jié)點完成主從切換。
[0085]進一步地,還包括配置更新單元507,用于更新各代理節(jié)點的內(nèi)存參數(shù)和配置文件的配置信息,其中,所述內(nèi)存參數(shù)包含的主服務器和從服務器的屬性信息與所述配置文件的配置信息中主服務器和從服務器的屬性信息一致。
[0086]其中,所述主服務器和從服務器的屬性信息包括:主服務器的IP地址、主服務器的端口信息、從服務器的IP地址、從服務器的端口信息。
[0087]綜上所述,本發(fā)明實施例中間件建立與所述每個代理節(jié)點通信的連接池,其中,所述連接池中包含所述中間件與所述每個代理節(jié)點通信的各條連接鏈路,一方面,中間件通過發(fā)起偵測線程偵測所述連接池中的連接鏈路,并將發(fā)生故障的連接鏈路從所述連接池轉(zhuǎn)移至預設的不可用服務鏈表中,當所述中間件確定所述不可用服務鏈表中對應任意一個代理節(jié)點的連接鏈路條數(shù)大于設定閾值時,將對應的代理節(jié)點確定為故障代理節(jié)點并隔離,以使所述中間件停止與所述故障代理節(jié)點的通信。也就是說,對于任意一個代理節(jié)點來說,若中間件主動檢測到與該代理節(jié)點對應連接的設定數(shù)量的連接鏈路均失效,則證明該代理節(jié)點發(fā)生故障,因此主動將該代理節(jié)點定義為故障代理節(jié)點,隔離掉與該故障代理節(jié)點的通信。從而實現(xiàn)了自動隔離故障節(jié)點的功能,保證了中間件與代理節(jié)點之間的業(yè)務處理不受影響。同時中間件的偵測線程還檢測不可用服務鏈表中的連接鏈路是否恢復正常,將恢復正常的連接鏈路轉(zhuǎn)移至連接池中。另外,代理節(jié)點內(nèi)部通過集成腳本和監(jiān)聽的功能,使得主從切換的過程更加便捷,不需要在切換之后再重啟代理節(jié)點,提高了系統(tǒng)運行的效率。
[0088]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0089]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0090]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0091]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內(nèi)的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
[0092]顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【主權項】
1.一種實現(xiàn)RediS集群高可用的方法,其特征在于,所述集群包括中間件、至少兩個與所述中間件連接的代理節(jié)點,與所述代理節(jié)點連接的Redis服務器,該方法包括: 所述中間件為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路; 所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路; 所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值;若是,則所述中間件將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。2.如權利要求1所述的方法,其特征在于,所述標記發(fā)生故障的連接鏈路之后,還包括: 所述中間件將被標記的連接鏈路從所述連接池轉(zhuǎn)移至預設的不可用服務鏈表中; 所述中間件確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值,包括: 所述中間件確定所述不可用服務鏈表中對應同一代理節(jié)點的連接鏈路條數(shù)是否大于設定閾值。3.如權利要求2所述的方法,其特征在于,還包括: 所述中間件通過所述偵測線程偵測所述不可用服務鏈表中的連接鏈路是否恢復正常;若是,則所述中間件將恢復正常的連接鏈路從所述不可用服務鏈表轉(zhuǎn)移至所述恢復正常的連接鏈路對應的連接池中; 當所述故障代理節(jié)點對應的恢復正常的連接鏈路大于設定閾值時,所述中間件恢復所述故障代理節(jié)點的通信。4.權利要求1所述的方法,其特征在于,所述中間件通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,包括: 所述中間件運行偵測線程,所述偵測線程執(zhí)行如下動作: 從所述連接池中輪詢獲取每條連接鏈路; 針對獲取的每條連接鏈路,向每條連接鏈路發(fā)起心跳檢測; 若心跳檢測成功,則確定所述連接鏈路正常,否則將所述連接鏈路確定為發(fā)生故障的連接鏈路。5.如權利要求1所述的方法,其特征在于,還包括: 所述中間件接收應用發(fā)送的讀寫請求; 所述中間件根據(jù)各代理節(jié)點的工作狀態(tài),確定所述讀寫請求對應的代理節(jié)點; 利用所述代理節(jié)點的連接池中的連接鏈路將所述讀寫請求發(fā)送給所述對應的代理節(jié)占.V , 若發(fā)送失敗,則所述中間件將所述讀寫請求對應的連接鏈路從所述連接池中轉(zhuǎn)移至預設的不可用服務鏈表中。6.如權利要求1?4所述的方法,其特征在于,所述Redis服務器包括Redis主服務器和Redis從服務器; 該方法還包括: 針對連接同一個Redis主服務器的各代理節(jié)點,所述各代理節(jié)點向共同連接的主服務器發(fā)送心跳檢測; 若心跳檢測失敗,則從所述各代理節(jié)點中確定第一代理節(jié)點進行主從服務器的切換,所述第一代理節(jié)點為所述各代理節(jié)點中的任意一個; 當所述第一代理節(jié)點的Redis主服務器和Redis從服務器切換成功之后,所述第一代理節(jié)點將切換之后的Redis主服務器的IP地址通知至連接所述主服務器的其余的代理節(jié)點,以使所述其余的代理節(jié)點完成主從切換。7.如權利要求6所述的方法,其特征在于,所述當切換成功之后,包括: 所述各代理節(jié)點更新各自的內(nèi)存參數(shù)和配置文件的配置信息,其中,所述內(nèi)存參數(shù)包含的主服務器和從服務器的屬性信息與所述配置文件的配置信息中主服務器和從服務器的屬性信息一致。8.如權利要求7所述的方法,其特征在于,所述主服務器和從服務器的屬性信息包括:主服務器的IP地址、主服務器的端口信息、從服務器的IP地址、從服務器的端口信息。9.一種實現(xiàn)Redis集群高可用的系統(tǒng),其特征在于,所述系統(tǒng)包括中間件、至少兩個與所述中間件連接的代理節(jié)點,與所述代理節(jié)點連接的Redi s服務器,所述中間件包括: 連接池生成單元,用于為每個代理節(jié)點建立用于通信的連接池,其中,每個代理節(jié)點的連接池中配置了中間件與代理節(jié)點間的多條連接鏈路; 偵測單元,用于通過發(fā)起偵測線程偵測每個代理節(jié)點的連接池中的連接鏈路,并標記發(fā)生故障的連接鏈路; 判斷單元,用于確定對應同一代理節(jié)點的被標記的連接鏈路的條數(shù)是否大于設定閾值; 若是,處理單元,用于將對應的同一代理節(jié)點確定為故障代理節(jié)點,并停止與所述故障代理節(jié)點的通信。10.如權利要求9所述的系統(tǒng),其特征在于,所述偵測單元還用于將被標記的連接鏈路從所述連接池轉(zhuǎn)移至預設的不可用服務鏈表中; 所述判斷單元還用于:確定所述不可用服務鏈表中對應同一代理節(jié)點的連接鏈路條數(shù)是否大于設定閾值。11.如權利要求10所述的系統(tǒng),其特征在于,所述偵測單元還用于:通過所述偵測線程偵測所述不可用服務鏈表中的連接鏈路是否恢復正常; 若是,所述處理單元還用于:將恢復正常的連接鏈路從所述不可用服務鏈表轉(zhuǎn)移至所述恢復正常的連接鏈路對應的連接池中; 所述判斷單元還用于判斷當所述故障代理節(jié)點對應的恢復正常的連接鏈路大于設定閾值時,所述處理單元恢復所述故障代理節(jié)點的通信。12.權利要求9所述的系統(tǒng),其特征在于,所述偵測單元具體用于:運行偵測線程,所述偵測線程執(zhí)行如下動作: 從所述連接池中輪詢獲取每條連接鏈路; 針對獲取的每條連接鏈路,向每條連接鏈路發(fā)起心跳檢測; 若心跳檢測成功,則確定所述連接鏈路正常,否則將所述連接鏈路確定為發(fā)生故障的連接鏈路。13.如權利要求9所述的系統(tǒng),其特征在于,還包括:讀寫請求處理單元:用于接收應用發(fā)送的讀寫請求; 所述處理單元還用于:根據(jù)各代理節(jié)點的工作狀態(tài),確定所述讀寫請求對應的代理節(jié)點;利用所述讀寫請求對應的代理節(jié)點的連接池中的連接鏈路將所述讀寫請求發(fā)送給對應的代理節(jié)點;若發(fā)送失敗,則將所述讀寫請求對應的連接鏈路從所述讀寫請求對應的代理節(jié)點的連接池中轉(zhuǎn)移至預設的不可用服務鏈表中。14.如權利要求9?13所述的系統(tǒng),其特征在于,所述Redis服務器包括Redis主服務器和Redis從服務器; 針對連接同一個Redis主服務器的各代理節(jié)點,各代理節(jié)點向共同連接的主服務器發(fā)送心跳檢測; 所述代理節(jié)點還包括: 若各代理節(jié)點心跳檢測失敗,主從切換單元,用于從所述各代理節(jié)點中確定第一代理節(jié)點進行主從服務器的切換,所述第一代理節(jié)點為所述各代理節(jié)點中的任意一個;當所述第一代理節(jié)點的Redis主服務器和Redis從服務器切換成功之后,將切換之后的Redis主服務器的IP地址通知至連接所述主服務器的其余的代理節(jié)點,以使所述其余的代理節(jié)點完成主從切換。15.如權利要求14所述的系統(tǒng),其特征在于,還包括配置更新單元,用于更新各代理節(jié)點的內(nèi)存參數(shù)和配置文件的配置信息,其中,所述內(nèi)存參數(shù)包含的主服務器和從服務器的屬性信息與所述配置文件的配置信息中主服務器和從服務器的屬性信息一致。16.如權利要求15所述的系統(tǒng),其特征在于,所述主服務器和從服務器的屬性信息包括:主服務器的IP地址、主服務器的端口信息、從服務器的IP地址、從服務器的端口信息。
【文檔編號】H04L29/08GK105933407SQ201610248471
【公開日】2016年9月7日
【申請日】2016年4月20日
【發(fā)明人】李代立, 唐旭東, 陳卓
【申請人】中國銀聯(lián)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
盖州市| 濮阳县| 沂南县| 合江县| 武城县| 兴国县| 长岭县| 宁安市| 宁蒗| 遂宁市| 全椒县| 红安县| 太康县| 微博| 连山| 汉川市| 河源市| 韩城市| 嵊州市| 沅江市| 虹口区| 苍山县| 衡东县| 新蔡县| 女性| 雷山县| 楚雄市| 山丹县| 秦安县| 镇雄县| 阆中市| 万安县| 河曲县| 乃东县| 林口县| 金平| 景宁| 胶州市| 辽宁省| 珠海市| 新乐市|