2017-03-14 48 views
0

我認爲我的Redis和Web應用程序部署環境出現問題。Redis副本句柄失敗的連接字符串

如果有人可以查看我的配置並處理我覺得棘手的情況,我將不勝感激。


Redis的配置:

我有多個Redis的副本配置,一個作爲主設備和其他的作爲從。比方說,爲簡化:

  • server1的:配置爲主控
  • 服務器2〜serverN:配置爲從屬,參照server1的

Redis的定點(S)可以或可以不存在在該結構,因爲我不能保證至少會有服務器。

在我的情況下,只有server1保證存在,服務器2到N沒有。


Web應用程序部署環境:

我也有使用兩個連接字符串,一個用於主,另一個奴隸的一個部署.NET Web應用程序(一個或多個)。 Web服務使用

連接字符串應該是這樣的:

  • 「server1的,密碼= myredispassword」 爲Redis的主
  • 「serverN,密碼= myredispassword」 爲Redis的奴隸

當然,如果一個Web應用程序有一個serverN的從屬連接,那麼serverN保證存在。


問題情境(和問題):

現在,我認爲這將有可能遇到這樣的情況,那裏是一個墮落的Redis的副本(主或從),和我的web應用程序是指到通過連接字符串倒下的Redis副本。

我認爲在這種情況下,Web應用程序將停止運行,並說終端無法訪問。

是否有可能優雅地處理不可達的端點副本到可訪問的另一個端點副本?爲了做到這一點,我需要配置Redis哨兵嗎?或者你甚至會說我嘗試訪問或處理Redis連接的方法不正確?預先感謝您的意見。

+0

所以與主連接字符串的應用程序執行只寫和其他與奴隸的連接字符串只服務讀取? – Astro

+0

@Astro Umm,應用程序具有主從連接,但使用主連接字符串進行寫入,並使用從服務器的連接字符串進行讀取。我認爲這是使用複製的預期行爲?我想知道會發生什麼(如果我需要處理這種情況),當奴隸停下來,應用程序嘗試讀取,或者主控關閉,應用程序嘗試寫入。 – Shavakan

+0

在這兩種情況下,它應該失敗..因爲它不知道如果到一個端點的一個連接失敗時連接到哪裏。這通常是使用哨兵登錄 – Astro

回答

1

使用redis sentinel可以更好地掌握這種情況。您的應用程序連接到Redis的定點端點其中:

  1. 提供自動故障轉移,當主設備發生故障的從屬節點之一將自動提升爲母校。

  2. 配置提供程序: Sentinel充當配置提供程序。使用哨兵連接字符串決定主節點和從節點。它還需要謹慎地將讀取請求轉發給從設備並寫入主設備。

您的應用程序連接到端點象下面這樣: IP: 端口:即26379

確保驅動程序嘗試使用定點端點故障轉移時發生連接新選舉的Master。

必須可以從應用程序服務器訪問redis和sentinel端口。

+0

謝謝澄清! – Shavakan

相關問題