2016-04-15 58 views
0

我在開發環境中配置了多可用區RDS mysql實例,沒有隻讀副本,我正在通過重新啓動數據庫實例來測試多可用區RDS故障切換。在AWS中實現讀寫查詢可用性多種可用性RDS

下面是我的觀察:在RDS故障轉移,客戶端應用程序將不會丟失連接,但同時也將不能訪問數據庫,以及一旦故障轉移完成後,客戶端將能夠訪問數據庫。

更新1:上面的觀察是錯誤的。我剛纔觀察到的是,故障切換完成後,我得到低於錯誤並導致連接終止。

ERROR 2003 (HY000): Can't connect to MySQL server on 'rds-test.czswqpewzqas.---------.amazonaws.com' (110) 

因此,簡而言之,我的查詢在重新啓動多可用區mysql實例時失敗。 有沒有人有任何想法,我在這裏失蹤。

更新 - 實現讀取可用性:現在我已經創建了一個讀取副本的多AZ MySQL實例,並在得到上述的錯誤,重新定向「選擇查詢」來讀副本實例。

因此,使用Read副本我能夠實現讀取可用性。這是否正確?想知道是否有其他方法可以做到這一點。

另外,我該如何實現可用空間 in多可達RDS?

+0

您尚未指出您正在使用的語言,框架和數據庫池。證明在出現錯誤之前,您的代碼已經完成了全新的DNS查找,因爲IP在故障轉移期間發生了更改。 [忽略其他問題,它們不是給定問題的一部分](https://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts)。 – tedder42

回答

1

您的觀察結果是正確的。在故障轉移期間,TCP連接丟失,故障轉移到輔助數據庫的時間以及切換DNS中的IP地址。

它是由應用程序

A /嘗試使用指數退避重新連接。重新連接將在幾分鐘內完成。

b /決定故障轉移期間的行爲方式。

讀事務(SELECT)可以切換到只讀副本。現代JDBC和ODBC驅動程序能夠自行處理只讀副本,只需提供副本的IP地址/ DNS名稱列表即可。驅動程序將自動應用負載平衡。無需更改代碼。

寫入事務處理起來比較複雜,所有應用程序都沒有單一的答案。正確答案取決於您的應用程序&業務需求。

某些客戶決定阻止所有寫入操作,並向最終用戶返回錯誤消息,要求他們在幾分鐘後再次嘗試。

某些客戶在SQS隊列中排隊寫入事務。當主數據庫再次可用時,他們開發隊列讀取器應用程序來刷新未決事務。 (取決於工作負載,S3或DynamoDB也可以用於此)。當然,在故障切換期間和故障切換後的短時間內,您的數據將不一致,這是刷新所有未完成寫入所需的時間。

請隨時對現實世界中使用的其他策略發表評論。