我在 ec2ubuntu 上问过类似的问题,但后来意识到这更像是一个通用服务器可扩展性/冗余问题。
基本上,我有一个运行 Ubuntu AMI 的 Amazon EC2 实例。它安装了一个基本的 LAMP 堆栈,充当数据库/Web 服务器。
现在,我想知道以某种程度的冗余进行设置的最佳方式是什么,基本上就是如果实例死机,我们可以启动一个新实例,安装相同的 EBS 卷,然后就可以高高兴兴地出发了。在等待新实例启动时,可能会有一些最短的停机时间。以后,我们可能希望使其更具弹性,并让它向上扩展以应对新的负载。
有人建议我可以使用 ELB(弹性负载平衡)和自动缩放来设置类似的东西(这仅适用于替换实例),但是,我不确定它如何在仅一个服务器实例的情况下工作?
此外,是否有任何不依赖于 ELB / Autoscaling 的替代解决方案,或者这是我对此设置的最佳选择?(据我所知,scalr 和 Rightscale 是围绕池设计的 - 我只想要一个相当低调的设置,并且我愿意在等待替换实例启动时容忍几分钟的停机时间。)
欢呼吧,维克多
答案1
我想说你需要另外两台机器。
第一个是负载均衡器,它将调用重定向到最佳服务器(负载均衡器将处理该任务)
第二台机器是与当前机器具有完全相同规格的第二台机器。
当然,在任何时候您都可以简单地插入一个新的 Web 服务器并将其添加到负载均衡器上的机器列表中,现在您将拥有三台机器的设置和使用,具体取决于它们的负载。等等。
如果要确保一切顺利,您可以选择第三台服务器作为您的数据库服务器,并且两个 Web 服务器都将写入和读取此单个数据库服务器。将来,您可以从该新数据库服务器轻松添加复制的数据库基础架构。
可能有点难以理解,但理论上这种设置对以后很有用
答案2
重要的是要有可以检测实例何时死亡并重新启动的程序。我认为 EC2 内部没有任何东西可以做到这一点,因此您需要一些外部程序来处理它。如果有人在某个地方运行服务来监控您的站点并在 EC2 实例出现问题时停止/启动它,我不会感到惊讶,但我一时还不知道有什么办法。
答案3
您需要一个外部实体来为您处理此事。我只是不知道有哪项服务可以为单机设置做到这一点,因为单机有点儿首先是你的等式中的缺陷。:)
我确信您知道您可以自动化 EC2 设置,例如使用少量用户数据、正确的 AMI(例如安装了 chef-solo)等——所以这是最简单的部分。
最后,问题是您是否更适合使用其他提供商。例如,slicehost 实例可能适合您。或者两个。一个用于应用程序,一个用于数据库。“实例可能消失”的情况也更少。虽然我不得不补充一点,但这种情况确实很少发生。(但我也见过。)
答案4
一个真正便宜的解决方案可能是在共享网络托管上使用 cron 作业,例如 bluehost 等。您可以编写一个每 5 分钟左右运行一次的脚本,并执行如下操作:
- 是否有合适的实例正在运行?(例如,使用 ec2-describe-instances)
- 它在运行吗?例如对主机名执行“curl”,并检查它是否返回有意义的内容
- 如果对以上两个问题的答案都是否定的,则在必要时终止旧实例并启动一个新实例
当然,您的共享虚拟主机和您的实例都可能同时瘫痪 :-P