2012-06-12 33 views
6

使用Booksleeve Redis的客戶端時,我最近開始舉辦的新Azure的虛擬機我的一個輔助項目。該應用程序使用Redis作爲內存中緩存。在我的本地環境中一切正常,但現在我已經將代碼移到Azure,我看到一些奇怪的例外從Booksleeve出來。Redis的連接錯誤在Azure中的VM

當應用程序第一次啓動時,一切正常。然而,在大約5-10分鐘不活動之後,對應用程序的下一個請求會遇到網絡異常(我現在正在工作,並且沒有關於我的確切錯誤消息,所以我會在我回家時發佈它們,如果人們認爲他們與討論密切相關)這會導致內部MessageQueue關閉,導致每個後續的Enqueue()都會引發異常(「The Queue Is Closed」)。

因此,一些谷歌上搜索後,我發現這個職位的SO:Maintaining an open Redis connection using BookSleeve約DIY連接管理器。如果這是最好的行動方式,我當然可以實現類似的東西。

所以,問題:

  1. 這是正常的RedisConnection到一定量的時間後定期關閉?
  2. 我見過conn.SetKeepAlive()方法,但我嘗試了許多不同的值,沒有一個看起來有所作爲。還有更多嗎?還是我吠叫錯了樹?
  3. 上述處理此場景的最佳方式是來自帖子的連接管理器想法嗎?
  4. 任何人都可以擺脫爲什麼託管我的Redis實例在一個新的Azure虛擬機導致此問題的原因?我也可以確認,如果我對Azure Redis虛擬機運行本地環境,則會遇到此問題。

就像我說的,如果它是不尋常的Redis的連接不活動後死去,我將張貼堆棧跟蹤和異常從我的日誌,當我回家。

謝謝!

UPDATE 迪迪埃中,這可能涉及到的是Azure的使用負載balanacer評論中指出:http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

假設是這樣的話,這將是實現一個連接管理器,可能最好的辦法解決這個愚蠢的問題。我認爲我不應該創建每個工作單位的連接權利?

+0

你有什麼Redis配置文件的超時參數?這是空閒超時(將其設置爲0以避免Redis關閉空閒連接)。 –

+0

超時已被設置爲0。只需再檢查一下。 :( – Eric

+1

它似乎是AzureVM的「功能」...請參閱http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details .aspx –

回答

6

從其他的答案/評論,這聽起來像這是蔚藍的基礎設施關閉插座看起來閒置造成的。您可以只是有一個計時器的地方,定期執行某種操作,但要注意,這是已經建成Booksleeve:當它連接,它會檢查Redis的連接超時是什麼,並配置一個心跳,以防止redis的從關閉插座。你也許可以揹着這個來防止天藍色的關閉插座。例如,在一個redis的-CLI會話:

config set timeout 30 

應該配置的Redis(飛,而不必重新啓動),以具有30秒的連接超時。然後,書架應該自動採取措施確保在30秒之前不久有心跳。請注意,如果成功,您還應該編輯配置文件,以便在下次重新啓動之後應用此設置。

+0

值得指出的是,當設置conn.SetKeepAlive(true)時,您需要在這裏爲Booksleeve設置一個超時> 0的自動Ping()檢查。 因此,在Azure上,您需要將超時設置爲30秒,並且還要conn.SetKeepAlive(true)。 沒有配置超時設置,Booksleeve不會執行ping檢查(即使keepalive = true,當沒有超時設置時,Booksleeve內部的檢查跳過ping)。 這意味着由於不活動,Azure仍會關閉套接字。 – Andrew

+0

如果Redis配置中存在超時,StackExchange.Redis是否具有相同的心臟跳動行爲? – slypete

+1

@slypete是的,但如果沒有超時時間,它也有默認心跳 –

1

Windows Azure中的負載平衡器將關閉後量X連接的時間取決於負載平衡器總連接負載因爲它你會在你的連接得到一個隨機超時。

,因爲我不熟知的Redis連接我無法建議正確但如何實現它一般建議的解決辦法是有心跳脈搏,讓您的會議活着。您是否有機會尋找博客中提出的解決方法,並嘗試在Redis中實施,如果這對您有用?

+0

謝謝Avkash。實際上,我將嘗試在新的Azure預覽中使用虛擬網絡,但不幸的是,我不允許從自定義圖像創建VM並將其添加到Affinity組。顯然這隻允許從快速創建屏幕?我也向虛擬網絡論壇提交了論壇帖子。 – Eric

+0

嗨,Eric,我看到了您的文章,並且能夠幫助您解決VM創建問題,但是MSDN論壇存在一些問題,因此我無法與您聯繫。一旦這是決心,我會聯繫你,看看能做些什麼..謝謝.. – AvkashChauhan

+0

我相信我知道發生了什麼事。顯然,我創建的圖像僅在它開始生活的位置(這是美國西部)可用 - 我在圖像後創建了vlan,現在看起來不可能將圖像從一個位置移動到另一個位置。從性能的角度來看,如果創建一個vlan會明顯更好,你有什麼想法嗎?我的意思是,如果需要在我的應用程序中創建心跳,這並不是太繁瑣。 – Eric