2015-10-14 103 views
0

我們使用Redis從AWS ELB後面的我們的Web應用程序(基於pub/sub的)收集事件。 我們正在尋找一種解決方案,使我們能夠爲不同的服務器提供更高的可用性和更高的可用性。我們不希望這兩個服務器位於Redis羣集中,我們的計劃是使用cloudwatch監控它們,並在必要時在它們之間切換。使用Redis behing AWS負載平衡器

我們試着在ELB後面定位兩個Redis服務器,遠程登錄ELB DNS並查看使用'redis-cli monitor'會發生什麼,但我們什麼也沒看到。 (當試圖沒有ELB的情況下,似乎很好)

有什麼建議嗎?

感謝

回答

0

將一對獨立的redis節點放在LB後面可能不是您想要的。 ELB將會嘗試平衡每個實例的連接,將一半一半分成另一半。這意味着一個連接發出的命令可能不會被另一個連接看到。這也意味着沒有數據被共享。因此,客戶端a可以發佈消息,並且客戶端b正在訂閱其他服務器將看不到消息。

對於ELB背後的PUBSUB,你有第二個問題。 ELB將關閉一個空閒連接。所以如果你訂閱了一個不忙的頻道,你的ELB將關閉你的連接。正如我記得的最大你可以使這是60秒,這意味着如果你不發佈消息每隔一分鐘你的客戶將被斷開。

至於多少問題取決於您的客戶端庫,並且坦率地說,根據我的經驗,大多數人不能很好地處理它,因爲他們不知道重新建立連接時需要重新訂閱,這意味着你必須自己編碼。

這就是說如果你的c沒有正確的定點支持,那麼sentinel + redis解決方案將會非常理想。在這種情況下。您的客戶請求主人與哨兵通話,並在連接失敗時重複此過程。這將處理你描述的設置,而不會出現ELB背後的問題。

0

假設你在VPC運行:

  1. 你已經註冊與ELB的EC2實例?
  2. 您是否向ELB添加了正確的安全組設置(允許入站端口23)?
  3. 您是否添加了一個將ELB上的端口23映射到實例上的端口23的ELB偵聽器?
  4. 您是否設置了合理的ELB健康檢查(例如端口23上的TCP),以便ELB認爲EC2實例是健康的?

如果ELB認爲背後的服務器不健康,那麼ELB不會發送任何流量。

+0

1,2,3,4 - >是肯定的。實際完成所有步驟之前,我們無法初始化所有的telnet會話(得到了一個錯誤),ELB看到兩個實例爲在職(健康)。順便說一句 - 不知道爲什麼你說的23端口,當Redis的上6379.監聽當實例的每一個打開一個telnet會話127.0.0.1:6379似乎罰款... – user2928842

+0

奇。對於使用IGW的VPC中ELB背後的單個支持telnet的Amazon Linux實例,這適用於我。聽衆映射和健康檢查是關鍵。 – jarmod

2

我在查找類似問題時遇到了這個問題,但不同意接受的答案。儘管這已經很老了,但希望它能幫助未來的某個人。

對於您的問題,使用DNS故障轉移和Redis複製自動故障切換配置更合適。 DNS故障轉移提供了可用性組(如果您需要這種級別的縮放)並且複製組提供緩存運行時間。

http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html

主動 - 被動故障轉移應提供你與高可用性想要的解決方案:

主動 - 被動故障轉移:當你想 資源的主要組使用此故障轉移配置可用的大部分時間 和你想要的資源的次要組待命,以防 所有的主要資源的不可用。在響應 查詢時,Amazon Route 53僅包含健康的主要資源。 如果所有的主要資源的是不健康的,亞馬遜路線53開始 到包括響應於DNS查詢 只健康二次資源。

設置完DNS後,您將指向Elasticache Redis故障轉移組的URL並在故障轉移操作期間添加多個組以獲得更高的可用性。

但是,您可能需要設置您的應用程序編寫,並從不同的端點讀取最大化架構的可擴展性。

來源:

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Replication.html http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoFailover.html