本公開涉及分布式緩存技術領域,特別涉及一種分布式緩存的故障處理方法及裝置。
背景技術:
隨著互聯(lián)網(wǎng)流量的日益增大,單臺緩存服務器面臨大規(guī)模數(shù)據(jù)訪問時,常常造成負荷過重而導致過高的響應延遲的缺陷,現(xiàn)有的解決方案中大都采用分布式緩存技術來實現(xiàn)大規(guī)模的數(shù)據(jù)緩存和訪問。分布式緩存技術通過一致性哈希算法將數(shù)據(jù)相對均衡的分布于多個緩存服務器中,而redis(鍵-值類型的存儲系統(tǒng))作為一種分布式緩存存儲系統(tǒng),由于數(shù)據(jù)的高效同步和簡單的操作命令,得到了廣泛的使用。
目前,redis一般裝設有主緩存服務器和從緩存服務器。主緩存服務器中的redis緩存實例主要負責讀寫操作,而從緩存服務器中的redis緩存實例只對通過主緩存服務器中redis緩存實例讀寫的數(shù)據(jù)進行備份操作,這對于主緩存服務器而言,存在著較大壓力。
當主緩存服務器因故障宕機時,無法實現(xiàn)主從緩存服務器的自動切換,只能依靠人工干預,而在維護人員不在現(xiàn)場等特殊情況時則造成業(yè)務停滯,從而無法實現(xiàn)redis緩存實例的高可用性,大大降低了redis的抗風險能力。
技術實現(xiàn)要素:
為了解決相關技術中存在的無法實現(xiàn)redis緩存實例的高可用性,redis緩存的抗風險能力較低的問題,本公開提供了一種分布式緩存的故障處理方法及裝置。
一種分布式緩存的故障處理方法,其特征在于,所述方法包括:
監(jiān)控分布式緩存中運行的主緩存實例,得到故障的主緩存實例;
將所述主緩存實例的從緩存實例替代所述故障的主緩存實例,相應更新所述從緩存實例和故障的主緩存實例之間的主從狀態(tài);
監(jiān)聽所述主從狀態(tài)的更新,根據(jù)所述主從狀態(tài)的更新修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址。
一種分布式緩存的故障處理裝置,其特征在于,所述裝置包括:
故障監(jiān)控模塊,用于監(jiān)控分布式緩存中運行的主緩存實例,得到故障的主緩存實例;
故障處理模塊,用于將所述主緩存實例的從緩存實例替代所述故障的主緩存實例,相應更新所述從緩存實例和故障的主緩存實例之間的主從狀態(tài);
代理配置修改模塊,用于監(jiān)聽所述主從狀態(tài)的更新,根據(jù)所述主從狀態(tài)的更新修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址。
本公開的實施例提供的技術方案可以包括以下有益效果:
分布式緩存的運行中,監(jiān)控運行的主緩存實例,得到故障的主緩存實例,將從緩存實例替代故障的主緩存實例,相應更新從緩存實例和故障的主緩存實例之間的主從狀態(tài),監(jiān)聽主從狀態(tài)的更新,根據(jù)主從狀態(tài)的更新修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址,從而使得后續(xù)所進行的數(shù)據(jù)讀取是通過修改后的服務地址實現(xiàn)的,進而即便主緩存實現(xiàn)出現(xiàn)故障也不會對緩存數(shù)據(jù)的讀寫造成影響,在主緩存實例出現(xiàn)故障時,自動將從緩存實例替代出現(xiàn)故障的主緩存實例,實現(xiàn)了緩存實例的高可用性,大大提高了redis的抗風險能力。
應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性的,并不能限制本公開。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并于說明書一起用于解釋本發(fā)明的原理。
圖1是根據(jù)一示例性實施例示出的一種分布式緩存的故障處理方法的流程圖;
圖2是圖1對應實施例的監(jiān)控分布式緩存中運行的主緩存實例,得到故障的主緩存實例步驟的流程圖;
圖3是圖1對應實施例的觸發(fā)故障處理操作,使主緩存實例的從緩存實例替代故障的主緩存實例,相應更新從緩存實例和故障的主緩存實例之間的主從狀態(tài)步驟的流程圖;
圖4是圖3對應實施例的根據(jù)所述從緩存實例信息選定從緩存實例步驟的流程圖;
圖5是圖4對應實施例的在所述正常從緩存實例集合中,選定從緩存實例步驟的流程圖;
圖6是分布式緩存的故障處理的一個具體應用場景圖;
圖7是根據(jù)一示例性實施例示出的一種分布式緩存的故障處理裝置的框圖;
圖8是圖7對應實施例示出的故障監(jiān)控模塊的框圖;
圖9是圖7對應實施例示出的故障處理模塊的框圖;
圖10是圖9對應實施例示出的從緩存選定子模塊的框圖;
圖11是圖10對應實施例示出的選定單元的框圖。
具體實施方式
這里將詳細地對示例性實施例執(zhí)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
圖1是根據(jù)一示例性實施例示出的一種分布式緩存的故障處理方法的流程圖。如圖1所示,該分布式緩存的故障處理方法可以包括以下步驟。
在步驟S110中,監(jiān)控分布式緩存中運行的主緩存實例,得到故障的主緩存實例。
分布式緩存部署于機器中,通過機器中運行的實例來實現(xiàn)分布式緩存的主緩存實例。在一示例性實施例中,所指的機器為緩存服務器,一個或者多個緩存服務器形成用以實現(xiàn)數(shù)據(jù)緩存的服務器框架。
主緩存實例是運行于緩存服務器中的redis進程。通過主緩存實例實現(xiàn)對緩存數(shù)據(jù)的讀寫操作。
在主緩存實例的運行過程中,可能因存在故障導致該主緩存實例停止運行,進而影響對應的緩存數(shù)據(jù)的讀寫操作。此時,通過部署于機器中的主從監(jiān)控哨兵對緩存服務器中所有的主緩存實例進行監(jiān)控,在主緩存實例出現(xiàn)故障時自動進行維護,以便緩存數(shù)據(jù)的讀寫順利進行。
主從監(jiān)控哨兵是根據(jù)主從監(jiān)控哨兵的狀態(tài)數(shù)據(jù)對各主緩存實例進行監(jiān)控的,狀態(tài)數(shù)據(jù)中包含各個主緩存實例信息及對應的從緩存實例信息。根據(jù)狀態(tài)數(shù)據(jù),主從監(jiān)控哨兵對主緩存實例進行監(jiān)控。
在步驟S120中,主緩存實例的從緩存實例替代故障的主緩存實例,相應更新從緩存實例和故障的主緩存實例之間的主從狀態(tài)。
緩存服務器中,還運行著與主緩存實例對應的從緩存實例,從緩存實例用于對主緩存實例處理的數(shù)據(jù)進行備份操作。
當某個主緩存實例出現(xiàn)故障時,主從監(jiān)控哨兵就會使該故障的主緩存實例的從緩存實例替代該故障的從緩存實例,即將從緩存實例變更為新的主緩存實例,將故障的主緩存實例變更為從緩存實例,隨之更新主從監(jiān)控哨兵的狀態(tài)數(shù)據(jù)。
例如,緩存服務器中,主緩存實例為緩存實例A,緩存實例A地從緩存實例為緩存實例a,當監(jiān)控到緩存實例A出現(xiàn)故障時,主從監(jiān)控哨兵就會使緩存實例a替代緩存實例A,將緩存實例a由從緩存實例變更為主緩存實例,將緩存實例A由主緩存實例變更為從緩存實例。
在步驟S130中,監(jiān)聽主從狀態(tài)的更新,根據(jù)主從狀態(tài)的更新修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址。
首先需要進行說明的是,存儲了代理配置的緩存出口代理被部署于一機器中,該機器將作為與緩存服務器進行數(shù)據(jù)交互的接口。
代理配置是緩存出口代理中的配置文件,代理配置中的服務地址為指向緩存服務器中緩存數(shù)據(jù)的地址,根據(jù)代理配置中的服務地址,實現(xiàn)對緩存數(shù)據(jù)的讀寫操作。
進一步的,還在機器中部署了代理監(jiān)控客戶端,代理監(jiān)控客戶端用于進行主從監(jiān)控哨兵的監(jiān)控和代理配置的更新。
具體的,主從監(jiān)控哨兵對主緩存實例和從緩存實例的主從狀態(tài)進行變更后,代理監(jiān)控客戶端監(jiān)聽到主從監(jiān)控哨兵的變更操作,就會相應地修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址,進而通過新的服務地址指向的主緩存實例進行緩存數(shù)據(jù)的讀寫操作。
通過如上所述的方法,在主緩存實例出現(xiàn)故障時,能夠自動采用對應的從緩存實例替代該故障的主緩存實例,實現(xiàn)了緩存實例的高可用性,大大提高了redis的抗風險能力。
圖2是根據(jù)一示例性實施例示出的對步驟S110的細節(jié)的描述。該步驟S110可以包括以下步驟。
在步驟S111中,根據(jù)預置的時間間隔向主緩存實例發(fā)送信息請求。
信息請求是主從監(jiān)控哨兵向主緩存實例發(fā)送的請求信號,信息請求用于獲取主緩存實例的配置信息。主緩存實例接收到主從監(jiān)控哨兵發(fā)送的信息請求后,將對該信息請求進行響應,向主從監(jiān)控哨兵進行回復,回復內(nèi)容包括主緩存實例自身的配置信息及對應的從緩存實例信息。
時間間隔是預先設定的,例如,時間間隔預先設置為10秒,則主從監(jiān)控哨兵每隔10秒向主緩存實例發(fā)送信息請求。
在步驟S112中,接收主緩存實例對信息請求的回復,根據(jù)回復識別故障的主緩存實例。
正常運行的主緩存實例接收到信息請求后,對該信息請求進行回復,回復內(nèi)容包括該主緩存實例自身的配置信息和對應的從緩存實例信息。主從監(jiān)控哨兵根據(jù)從緩存實例信息,更新自身的狀態(tài)數(shù)據(jù)。
主從監(jiān)控哨兵根據(jù)主緩存實例對信息請求的回復情況,對主緩存實例是否存在故障進行識別。
優(yōu)選的,對于一主緩存實例,有多個主從監(jiān)控哨兵對主緩存實例進行監(jiān)控,多個主從監(jiān)控哨兵向主緩存實例發(fā)送信息請求。
當其中一個主從監(jiān)控哨兵沒有接收到某個主緩存實例的回復時,就會詢問其他的主從監(jiān)控哨兵,如果沒有接收到某個主緩存實例回復的主從監(jiān)控哨兵數(shù)量達到預設的數(shù)量時,就會認為該主緩存實例出現(xiàn)故障。以此類推,通過此過程便實現(xiàn)了多個主緩存實例的監(jiān)控。
例如,對主緩存實例進行監(jiān)控的主從監(jiān)控哨兵有3個,分別為主從監(jiān)控哨兵1、主從監(jiān)控哨兵2和主從監(jiān)控哨兵3。當有2個或以上的主從監(jiān)控哨兵沒有接收到主緩存實例的回復時,就認為該主緩存實例出現(xiàn)故障。主從監(jiān)控哨兵1、主從監(jiān)控哨兵2和主從監(jiān)控哨兵3分別向主緩存實例A發(fā)送信息請求,主從監(jiān)控哨兵2沒有接收到主緩存實例A的回復時,向主從監(jiān)控哨兵1和主從監(jiān)控哨兵3進行詢問。最后發(fā)現(xiàn),只有主從監(jiān)控哨兵3接收到緩存實例A的回復,主從監(jiān)控哨兵1和主從監(jiān)控哨兵2沒有接收到主緩存實例A的回復,則認為主緩存實例A出現(xiàn)故障。
也可以根據(jù)預設時間期間內(nèi),主緩存實例沒有對主從監(jiān)控哨兵進行回復,則認為主緩存實例存在故障,還可以是其他的故障標準。
例如,主從監(jiān)控哨兵對主緩存實例A進行監(jiān)控的,主從監(jiān)控哨兵每隔10秒向主緩存實例A發(fā)送信息請求,若超過30秒沒有接收到主緩存實例A的回復,則認為主緩存實例A出現(xiàn)故障。
通過如上所述的方法,向各主緩存實例發(fā)送信息請求,根據(jù)主緩存實例對信息請求的回復,自動識別故障的主緩存實例,為自動進行主從實例的切換提供了方便。
圖3是根據(jù)一示例性實施例示出的對步驟S120的細節(jié)的描述。該步驟S120可以包括以下步驟。
在步驟S121中,獲取為故障的主緩存實例預設的從緩存實例信息。
主緩存實例的從緩存實例信息是通過主緩存實例對信息請求的回復內(nèi)容進行獲取的。
主緩存實例對信息請求的回復內(nèi)容中,包括該主緩存實例自身的配置信息,以及對應的從緩存實例信息。
在步驟S122中,根據(jù)從緩存實例信息選定從緩存實例。
一個主緩存實例對應的從緩存實例可以是一個,也可以是多個。
當一個主緩存實例只有一個對應的從緩存實例時,直接確定該從緩存實例,以便進行主從緩存實例變更;當一個主緩存實例存在多個對應的從緩存實例時,需選定從緩存實例,以便進行主從緩存實例變更。
在步驟S123中,將選定的從緩存實例替代故障的主緩存實例,相應更新選定的從緩存實例和故障的主緩存實例之間的主從狀態(tài)。
將選定的從緩存實例作為新的主緩存實例,而故障的主緩存實例作為從緩存實例。在故障解除恢復運行后,故障的主緩存實例作為新的主緩存實例的從緩存實例進行數(shù)據(jù)備份。
例如,主緩存實例為緩存實例A,從緩存實例為緩存實例a,當緩存實例A出現(xiàn)故障而進行主從緩存實例變更后,緩存實例a成為新的主緩存實例,而緩存實例A成為緩存實例a的從緩存實例,在緩存實例A故障解除恢復運行后,作為緩存實例A的從緩存實例,執(zhí)行為緩存實例a處理的數(shù)據(jù)的備份操作。
通過如上所述的方法,根據(jù)主緩存實例的回復內(nèi)容,可以自動獲取與該主緩存實例對應的從緩存實例信息,并在主緩存實例出現(xiàn)故障時,選定從緩存實例與該故障的主緩存實例進行主從切換,實現(xiàn)了緩存實例的高可用性,大大提高了redis的抗風險能力。
圖4是根據(jù)一示例性實施例示出的對步驟S122的細節(jié)的描述。該步驟122可以包括以下步驟。
在步驟S1221中,根據(jù)從緩存實例信息確定故障的主緩存實例對應的從緩存實例。
根據(jù)故障的主緩存實例的從緩存實例信息,獲取到與該故障的主緩存實例對應的從緩存實例。
當根據(jù)從緩存實例信息,對應的從緩存實例只有一個時,將該從緩存實例作為替換故障的主緩存實例的從緩存實例;當根據(jù)從緩存實例信息,對應的從緩存實例有多個時,將從這多個從緩存實例中選定從緩存實例,以便對故障的主緩存實例進行替換。
在步驟S1222中,向從緩存實例發(fā)送信息請求。
主從監(jiān)控哨兵向故障的主緩存實例的從緩存實例發(fā)送信息請求,信息請求用于獲取從緩存實例對主從監(jiān)控哨兵的回復內(nèi)容,以便獲知從緩存實例的工作信息。
在步驟S1223中,接收從緩存實例對信息請求的回復,根據(jù)回復在從緩存實例中排除異常的從緩存實例,形成正常從緩存實例集合。
異常的從緩存實例可以為出現(xiàn)故障的從緩存實例。主從監(jiān)控哨兵向故障的主緩存實例的多個從緩存實例發(fā)送信息請求,從緩存實例對主從監(jiān)控哨兵進行回復,回復內(nèi)容包括從緩存實例自身的配置信息及備份的數(shù)據(jù)信息。當接收到某個從緩存實例回復內(nèi)容的主從監(jiān)控哨兵沒有達到預設的數(shù)量,則認為該從緩存實例出現(xiàn)故障。
異常的從緩存實例也可以為數(shù)據(jù)備份異常的從緩存實例。當主從監(jiān)控哨兵接收到某個從緩存實例的回復內(nèi)容,獲取到該從緩存實例備份數(shù)據(jù)的最后更新時間超過預設的時間范圍,則認為該從緩存實例數(shù)據(jù)備份出現(xiàn)異常。
例如,預設的時間范圍為50秒,從緩存實例1備份數(shù)據(jù)的最后更新時間里離當前時間間隔為51秒,則認為從緩存實例1備份數(shù)據(jù)出現(xiàn)異常。
排除異常的從緩存實例后,故障的主緩存實例的從緩存實例中其它可用于主從緩存實例變更的從緩存實例形成正常的從緩存實例集合。
在步驟S1224中,在正常從緩存實例集合中選定從緩存實例。
正常從緩存實例集合中從緩存實例都是正常運行的從緩存實例,可以根據(jù)從緩存實例對應的優(yōu)先級,選定從緩存實例,用于替代故障的主緩存實例。也可以根據(jù)從緩存實例的ID數(shù)字大小,還可以根據(jù)其它的選定方式,選定從緩存實例。
通過如上所述的方法,在主緩存實例出現(xiàn)故障時,自動在該故障的主緩存實例的從緩存實例中排除出現(xiàn)異常的從緩存實例,避免出現(xiàn)將異常的從緩存實例變更為主緩存實例的情況,提高了主緩存實例出現(xiàn)故障時進行故障處理的效率。
圖5是根據(jù)一示例性實施例示出的對步驟S1224的細節(jié)的描述。該步驟S1224可以包括以下步驟。
在步驟S12241中,獲取正常從緩存實例集合中從緩存實例對應的優(yōu)先級。
正常從緩存實例集合中從緩存實例對應的優(yōu)先級是進行自定義設置的,可以設置對各從緩存實例進行自定義順位排序,也可以設置按照從緩存實例進行備份數(shù)據(jù)更新的時間排序,還可以是其他的優(yōu)先級設置,還可以對各種優(yōu)先級類別的優(yōu)先順序進行排序,在此不做限定。
在步驟S12242中,根據(jù)優(yōu)先級在正常從緩存實例集合中選定從緩存實例。
根據(jù)優(yōu)先級設置,選定排位最前的從緩存實例,作為主從緩存實例變更的從緩存實例。
通過如上所述的方法,在主緩存實例出現(xiàn)故障時,根據(jù)對應的優(yōu)先級設置自動從故障的主緩存實例各從緩存實例中選定出一個從緩存實例,避免出現(xiàn)故障的主緩存實例存在多個從緩存實例時而無法選定的情況,提高了主緩存實例出現(xiàn)故障時進行主從緩存實例切換的效率。
下面結合一個具體的應用場景來詳細闡述如上的分布式緩存的故障處理方法。
具體的,如圖6所示,主從監(jiān)控哨兵200對主緩存實例進行監(jiān)控,當監(jiān)控到某個主緩存實例出現(xiàn)故障時,就將其對應的從緩存實例替代該故障的主緩存實例,當代理監(jiān)控客戶端300檢測到主從監(jiān)控哨兵200的主從實例替換操作,就對緩存出口代理100中的代理配置文件進行更新,修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址,進而即便主緩存實現(xiàn)出現(xiàn)故障也不會對緩存數(shù)據(jù)的讀寫造成影響。從而當主緩存實例出現(xiàn)故障時,自動采用選定出從緩存實例替換該故障主緩存實例,實現(xiàn)了緩存實例的高可用性,提高了redis的抗風險能力。
下述為本公開裝置實施例,可以用于執(zhí)行本上述分布式緩存的故障處理方法實施例。對于本公開裝置實施例中未披露的細節(jié),請參照本公開分布式緩存的故障處理方法實施例。
圖7是根據(jù)一示例性實施例示出的一種分布式緩存的故障處理裝置的框圖,如圖7所示,該分布式緩存的故障處理裝置包括但不限于:故障監(jiān)控模塊110、故障處理模塊120以及代理配置修改模塊130。
故障監(jiān)控模塊110,用于監(jiān)控分布式緩存中運行的主緩存實例,得到故障的主緩存實例。
故障處理模塊120,將主緩存實例的從緩存實例替代故障的主緩存實例,相應更新從緩存實例和故障的主緩存實例之間的主從狀態(tài)。
代理配置修改模塊130,用于監(jiān)聽主從狀態(tài)的更新,根據(jù)主從狀態(tài)的更新修改代理配置中進行緩存數(shù)據(jù)訪問的服務地址。
上述裝置中各個模塊的功能和作用的實現(xiàn)過程具體詳見上述分布式緩存的故障處理方法中對應步驟的實現(xiàn)過程,在此不再贅述。
可選的,如圖8所示,故障監(jiān)控模塊110包括但不限于:信息請求發(fā)送子模塊111和故障判定子模塊112。
信息請求發(fā)送子模塊111,用于根據(jù)預置的時間間隔向主緩存實例發(fā)送信息請求。
故障識別子模塊112,用于接收主緩存實例對信息請求的回復,根據(jù)回復識別故障的主緩存實例。
可選的,如圖9所示,故障處理模塊120包括但不限于:從緩存獲取子模塊121、從緩存選定子模塊122和主從更新子模塊123。
從緩存獲取子模塊121,用于獲取為故障的主緩存實例設定的從緩存實例信息。
從緩存選定子模塊122,用于根據(jù)從緩存實例信息選定從緩存實例。
主從更新子模塊123,用于將選定的從緩存實例替代故障的主緩存實例,相應更新選定的從緩存實例和故障的主緩存實例之間的主從狀態(tài)。
可選的,如圖10所示,從緩存選定子模塊122包括但不限于:從緩存獲取單元1221、請求發(fā)送單元1222、異常排除單元1223和選定單元1224。
從緩存獲取單元1221,用于根據(jù)從緩存實例信息確定故障的主緩存實例的從緩存實例。
請求發(fā)送單元1222,用于向從緩存實例發(fā)送信息請求。
異常排除單元1223,用于接收從緩存實例對信息請求的回復,根據(jù)回復在從緩存實例中排除異常的從緩存實例,形成正常從緩存實例集合。
選定單元1224,用于在正常從緩存實例集合中,選定從緩存實例。
可選的,如圖11所示,選定單元1224包括但不限于:優(yōu)先級獲取子單元12241和從緩存選定子單元12242。
優(yōu)先級獲取子單元12241,用于獲取正常從緩存實例集合中從緩存實例對應的優(yōu)先級。
從緩存選定子單元12242,用于根據(jù)優(yōu)先級在正常從緩存實例集合中選定從緩存實例。
應當理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍執(zhí)行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制。