2012-04-24 133 views
3

我們有1位Redis主。和那個主人的兩個奴隸。從站也用作WebServer。我們使用Redis進行PHP會話。我們使用Round Robin DNS進行負載平衡。所以這意味着請求在「隨機」服務器點擊。使用複製時避免中斷 - Redis

我應該如何配置像PHP會話這樣的東西,以不破壞用戶體驗。例如,我有每10秒redis的複製期。用戶登錄和會話已創建。幾秒鐘後,用戶請求新頁面並擊中其他服務器。但在該服務器Redis尚未複製。

在這種情況下,如果數據在這件事上至關重要,該怎麼辦?我們在redis中也有非關鍵數據,所以我們不想將複製週期設置爲非常短的時間,並使負載掌握。

實際上這隻適用於Redis。我還不知道,也許我們會遇到與MySQL相同的問題。

回答

4

例如我有redis的複製週期中的每個10秒

我想你指的是設置repl-ping-slave-period - 這是用於從主一個ping到從所述時間間隔確認鏈接已啓動。

Redis沒有複製期。主機儘快向從機發送命令。奴隸仍然可能會滯後,但這種滯後並不是因爲您指定的10秒設置。

您可以在本地進行驗證。打開一個telnet會話,連接到本地主機6379(或任何你的主人)。輸入sync。主服務器將首先發送一個轉儲文件,然後在您修改主服務器上的數據時向您發送命令。你還會每10秒鐘看一次ping。

我該如何配置像PHP會話這樣的東西來不破壞用戶體驗?

它最好有一個專用的服務器,用於Redis主站和從站。不要在裝有Web服務器的機器上安裝Redis。

所有3個網絡服務器都應該直接連接到Redis master。如果由於某種原因主服務器出現故障,網絡服務器應切換到從服務器。

你如何從主從切換?現在,你必須手動完成。 Salvatore一直在談論Redis-Sentinel,它可以解決這個問題,但是現在這種解決方案並不存在。

幾個人已經實現了自動執行故障轉移的解決方案,但對於這樣一個小的設置,我建議使用監視腳本並手動執行故障轉移。