簡體   English   中英

AWS EB:負載平衡和容器化數據庫

[英]AWS EB: load balancing and containerized database

我有一個在 EBS 實例上與 Docker 一起運行的 Rails 應用程序。 這是一個多容器應用程序,所以我的 Rails 應用程序有一個容器,我的 PostgreSQL 數據庫有另一個容器。

由於每月價格昂貴,我避免將 RDS 用於我的數據庫。

到目前為止,它在開發環境中運行良好,但我想知道這種用於生產的架構,因為我不確定一些事情:

  • 如果我的負載均衡器創建了一個新實例,是否意味着創建了另一個數據庫容器? 在這種情況下,是否會有 2 個不同的數據源不同步?

  • 我在我的 Web 應用程序容器中運行一個 cron 腳本,它每小時備份一次我的數據庫。 如果 2 個實例因為負載均衡器而啟動,腳本是否會執行兩次?

我實際上是負載平衡的真正初學者,因此將不勝感激任何提示! 謝謝閱讀

AWS 負載均衡器本身不包含任何其他實例,因此如果您只是在 EC2 實例前面放置一個 ELB 或 ALB 以使其可從外部訪問,則不會發生任何變化。

                           +-----------------------------+
R53: myapp.example.com     | EC2                         |
          +-----+          | +-------+    +------------+ |
--------> | ELB | -------> | | Rails | -> | PostgreSQL | |
          +-----+          | +-------+    +------------+ |
                           +-----------------------------+

如果您確實想運行應用程序容器的多個副本(用於冗余、擴展、升級),那么它們必須共享一個數據庫。 這可能意味着不要通過 Docker Compose 啟動數據庫並在config/database.yml文件中指向它。 你必須決定它在哪里運行; 由於數據庫與應用程序有不同的要求,在較小的實例上運行它但使用本地磁盤可能是有意義的。

                           +-------+
R53: myapp.example.com +-> | EC2   | --+   +------------+
          +-----+      |   | Rails |   |   | EC2        |
--------> | ELB | -----+   +-------+   +-> | PostgreSQL |
          +-----+      |   +-------+   |   +------------+
                       |   | EC2   |   |
                       +-> | Rails | --+
                           +-------+

假設您尚未使用最小的實例大小,您可以通過選擇較小的實例來降低成本。 如果您之前需要一個 4 核 m5.xlarge 用於此設置,您可以將其拆分為兩個 2 核 m5.large 實例。 最后一張圖看起來也與基於 RDS 的設置非常相似; 關鍵的權衡是您是想向亞馬遜支付更多費用,還是花自己的時間安裝數據庫和管理快照。

您必須確保像 cron 作業這樣的事情只執行一次(或者如果它們運行多次,它們不會相互干擾)。 Docker 和 AWS 都沒有直接幫助解決這個問題。

如果您願意投資學習 Kubernetes,在 EKS 下運行它可以幫助解決這里的一些問題。 您可以使用本地 Kubernetes 概念,如 LoadBalancer 類型服務、StatefulSets 來運行數據庫,以及 Kubernetes CronJobs 以確保它們只運行一次。 這與您可能在 Docker Compose 中所做的設置截然不同,但您可以使用 Docker Desktop Kubernetes 或單節點 Kubernetes 安裝(如 minikube 或 kind)在本地進行試驗。

                           +-----------------------------+
                           | EKS                         |
   LoadBalancer Service    |                             |
          +.....+          | Deployment     StatefulSet  |
--------> : ELB : -------> |   Rails    -->   PostgreSQL |
          +.....+          |   Rails                     |
                           |                             |
                           | CronJob                     |
                           +-----------------------------+
                           |    EC2   |  EC2   |   EC2   |
                           +-----------------------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM