将文件和服务从一个 aws 实例实时复制到另一个

Copy files and services in real time from one aws instance to another

我有一个名为 primary 的 aws ec2 实例。我有另一个名为 secondary 的 ec2 实例。主实例 IP 链接到域,并包含所有托管代码和服务。我希望能够实时将所有数据(files/deamons/services 等)从主要数据复制到次要数据。

这可以通过 AWS 上的某些服务来完成吗?或者,如果我必须编写代码,我在看什么样的 code/linux 脚本等?

编辑

  1. 我希望辅助实例能够立即 运行 正在复制的系统。一旦检测到故障转移,我会将链接到域的 IP 更改为这台辅助机器。

  2. 目前系统使用数据库存储数据,但我们会将其移动到RDS实例

  3. 系统是linux机器

我查看了 Load Balancer、Auto Scaling 组和 EFS,但它们没有解决我的目的。我查看了 Elastic Bean Stalk,但对于我想要实现的目标来说,它似乎有些矫枉过正。我在这里也可能是错的。非常感谢任何帮助。

传统的高可用性设计是:

  • 数据存储在Amazon RDS中,最好配置为多可用区以防出现故障
  • 对象存储在 Amazon S3
  • 应用程序至少有两个 Amazon EC2 实例,分布在多个可用区 — 最好使用 Auto Scaling
  • 创建
  • 一个负载均衡器在实例前面
  • Amazon Route 53 域名解析到负载均衡器

这样,两个实例都在处理流量(如果您愿意,可以使用两个较小的实例)。负载均衡器执行持续的健康检查。如果实例未通过健康检查,负载均衡器将停止向其发送流量,因此用户受到的影响最小。

如果配置了Auto Scaling,它可以自动替换不健康的实例。这可以通过提供完全配置的 AMI 或通过提供在启动时安装和配置软件的用户数据脚本(或两者的组合)来完成。

执行软件更新时:

  • 更新 Auto Scaling 启动配置,它定义了新实例应该如何启动(例如不同的用户数据或 AMI)
  • 告诉 Auto Scaling 启动新实例,然后终止旧实例 — 这是滚动更新
  • 如果您无法进行滚动更新(由于代码更改),请部署第二个 Auto Scaling 组并进行测试。如果一切正常,将负载均衡器指向新的 Auto Scaling 组,然后终止旧的(几分钟后允许连接耗尽)。

这与 Elastic Beanstalk 提供的非常相似 — 它将为您创建负载均衡器和 Auto Scaling 组,并部署代码更新。

结果是一个高度可用的、有弹性的架构,可以从故障中自动恢复。它还将迫使您使用代码存储库而不是手动更新服务器,从而提高可靠性和可重复性。

参见:AWS Design for Web Application Hosting