我正在做一些研究,以确定如何以最低成本最好地创建用于部署 rails/mysql web 应用程序的高可用性解决方案。
我想到了一个可能性,并正在寻求对它的反馈和其他想法或可能性。
我希望我的主要生产实例是共置服务器。这大大增加了我每美元托管所能获得的功率,同时仍然拥有相当安全可靠的托管环境。我找到了几家符合要求的本地公司。我并不擅长这方面,但我可以构建和机架服务器,而且我是一个称职的管理员,所以我可以不用很多更好的托管服务。
我不想购买具有相同规格的完整灾难恢复/故障转移实例 - 一方面,它应该位于不同的区域,这意味着它必须是专用的或虚拟的,因为我无法进入数据中心;因此比我的同地实例贵得多,而且很可能不会被使用。
因此我的想法是使用 EC2 进行故障转移,并让实例处于离线状态,直到需要它们为止。因此故障转移不会立即发生,但新服务器将在几分钟内启动。不过,我仍然需要一些实例始终在线,以充当 MySQL 复制从属目标。
不过,我不确定管理故障转移的最佳方法是什么。我有几个想法:一个是使用佐胺它可以用于端口测试和故障转移,但当然它只能在 DNS 级别进行,这意味着在人们的 DNS 缓存过期之前仍然会出现中断。
因此我的想法是安装一个可以运行 HAProxy 的低端 EC2 实例。默认配置是此实例的弹性 IP,该实例代理我的同地服务器。如果实际故障转移发生在同地应用服务器或 HAProxy 上,则有几种不同的方法可以几乎立即自动执行故障转移。
当然,缺点是这会为每个请求创建一个额外的跳转。而且,我最终会通过 EC2 投入大量带宽,这引出了一个问题:为什么不从一开始就使用它们呢,因为带宽占了我估计的托管成本的很大一部分。
我的计划有问题吗?还有其他想法吗?
答案1
我认为 AWS 允许您设置自己的负载均衡器 (ELB),这还允许您设置自动规则,以根据负载需求启动更多 AMI 实例(然后再次关闭它们)。
虽然我一直在研究它,但我还没有亲自实现过。我确实找到了这个关于设置负载平衡 LAMP 堆栈的精彩指南: http://www.lindstromconsulting.com/node/7(自撰写本文以来,AWS 布局发生了一些变化,但仍然非常有用)。
(编辑:链接已移动,现在我来看:http://bit.ly/aaasX2)