繁体   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