从发动机堆场中的一个环境访问另一个环境



我们在 Engine Yard 中有几个环境。它们中的每一个都运行相同的应用程序,但处于不同的阶段:生产、暂存等。总共大约有 10 个环境。现在,我们希望每天晚上转储生产数据库,并在其余环境中还原它以获得最新数据。

问题是,一个环境中的实例无法访问其他环境中的实例。有两种连接方式适合我们:

  • 噗嗤。
  • 指定 RDS 主机作为要mysqldump--host参数。RDS 主机采用 environment.random_string.region.rds.amazonaws.com 格式,而不是常规 EC2 主机名。

它们都不是开箱即用的。直接的解决方案是在所有需要访问的服务器上生成 RSA 密钥,并将其添加到应允许访问的所有服务器上authorized_hosts。但是,此解决方案不可扩展:添加或重新创建环境后,我们需要重复该过程。

有没有更好的解决方案?

有一种方法可以在其他实例上设置特殊的备份配置文件,以便您从同一账户内的另一个环境直接访问生产 S3 存储桶。这涉及一些风险,因为它在技术上也允许您的非生产环境编辑生产存储桶的内容。

可能还有其他一些选项,具体取决于配置的具体情况。您最好的选择是与发动机堆场支持团队开具工单,以便我们进一步讨论您的需求。

是否可以仅使用 FTP 或 SFTP 服务设置单独的 HUB 服务器?

  • 打开从所有环境到该 HUB 服务器的入站端口 21/22,以便所有客户端都可以下载数据库转储。
  • 打开入站端口 3306 或其他从中心服务器到 RDS/数据库的数据库端口。
  • 在中心服务器上运行 cron 作业以获取数据库转储,将转储推送到其他环境等。

将您的生产备份到为此目的创建的 S3 存储桶。使用 IAM 角色控制其他环境如何连接到同一存储桶。

由于生产环境的服务器应该是已知的,因此您可以使用脚本将该服务器 mysqldump 到共享 S3 存储桶。完成后,您的其他服务器可以使用正确授权的 IAM 角色从该 S3 存储桶收集数据。

相关内容

最新更新