2016-10-01 152 views
0

我們有一個基於PHP的Web服務器,託管在Amazon EC2上的AMI上。此Web服務器使用在另一個RDS Amazon實例上運行的MySQL服務器。這兩個設置完美運作。我們試圖通過將設置放在負載均衡器後面來擴展設置,並隨着負載的升降而旋轉新的實例。亞馬遜擴展Web服務器的數據庫服務器

我們能夠實現啓動新的Web服務器實例。所有這些Web服務器連接到一個數據庫,因此似乎都運行良好。然而在這個過程中,數據庫服務器成爲瓶頸。我們希望將數據庫服務器擴展出來。 Web服務器和數據庫服務器將成對擴展,顯然數據庫服務器將同步。目前尚不清楚如何實現這一目標,任何幫助或參考或教程都會有很大的幫助。

我在互聯網上搜索並通過亞馬遜文檔閱讀,但都畫空白。

坦率地說,我也不知道這是一個SO相關的問題還是SU或ServerFault站點問題。否則,請保持寬容。

回答

1

擴展數據庫服務器比擴展Web服務器要複雜得多。您需要創建只讀副本實例,RDS非常簡單。只讀副本與主數據庫實例保持同步。但是,顧名思義,只讀副本是隻讀數據庫實例。任何插入/更新/刪除命令都需要返回到主數據庫服務器。

這意味着您無法使用簡單的負載平衡來分配負載。負載均衡器需要檢查每個SQL請求並瞭解哪些命令可以轉到哪些服務器。亞馬遜的Elastic Load Balancer不具備這一功能。如果您搜索「MySQL負載平衡器」,您可以找到許多關於設置HAProxy等軟件的文章和教程,以智能地分佈跨MySQL集羣實例的負載。

或者,您可以編寫應用程序以瞭解可用的不同數據庫服務器,並在將查詢發送到其中一個只讀副本服務器時將更新發送到主服務器。在你的場景中,我可以看到一種情況,每次啓動Web服務器時,還會啓動該Web服務器用於查詢的MySQL只讀副本。


請注意,由於您在Amazon RDS上使用MySQL,因此您應該仔細查看Amazon的Aurora數據庫。它與MySQL兼容,因此您不必更改一行代碼,並且它通常比MySQL執行得更好。如果你切換到Aurora,你可能會發現你的數據庫沒有那麼多的瓶頸。

Amazon也支持Aurora recently added load balancing。有了這個新功能,您仍然有一個用於更新的主數據庫,但是現在您只需跟蹤一個只讀副本端點,該端點將在所有隻讀副本實例之間分配查詢負載。

+0

非常感謝Mark,該應用程序的目標是擁有100,000個用戶,並且可以擴展100倍。因此,擴大數據庫服務器是唯一的解決方案,因爲如果使用中小型實例,它最終將成爲瓶頸,並且在負載減小時會變得過於昂貴且昂貴。 – Narayanan