![使用 EC2 上的 MySQL 提供高可用性和故障转移](https://linux22.com/image/507545/%E4%BD%BF%E7%94%A8%20EC2%20%E4%B8%8A%E7%9A%84%20MySQL%20%E6%8F%90%E4%BE%9B%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7%E5%92%8C%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB.png)
我想要一个在 Amazon EC2 实例上运行的高可用性 MySQL 系统,具有自动故障转移功能。
解决这个问题的标准方法是问题心跳 + DRBD,但我发现很多帖子都表明 DRBD 在 EC2 上不起作用,尽管没有一个帖子说明具体原因。显然,在虚拟化环境中,串行心跳或不同的网络是不可能的。将不同的服务器放在不同的可用区中也很好,但我们正在陷入更难的问题那里。
人们对“云”中的高正常运行时间解决方案有何看法?
笔记:这个问题是在多可用区的 RDS 发布之前提出的,对于当今的现代 IT 专业人士来说,这是很好的自动答案。:)
答案1
我认为您确实想要一个最近添加到 AWS 的多区域 RDS 设置。
更多详情请阅读: http://aws.typepad.com/aws/2010/05/amazon-rds-multi-az-deployment.html
如果您不询问 AWS,我建议您设置包括 DRBD 的设置。这将确保两个服务器始终保持同步。但我几乎 100% 确定这在 AWS 上还不可能实现。
一般来说,我会小心处理快照等 - 它不是灵丹妙药!在 AWS 上需要很长时间。实例存储本身 a) 一点也不快,b) 不持久!即使使用 EBS,它也不是很快,您仍然需要停止 i/o 才能获得一致的快照。
答案2
便宜又简单的选择 - 自己在 EC2 中的不同数据中心安装 mysql,并在它们之间设置主/主复制。将每个数据中心的前端 Web 服务器指向那些复制的 mysql 服务器。在每个位置的前端 Web 服务器之间设置自动 DNS 故障转移,如果主站点上的内容健康检查失败 - 它会自动将客户端流量重定向到另一个数据中心的复制站点 - 直到您修复主站点并且健康检查再次开始通过 - 然后流量将自动回退到主站点。我一直这样做 - 即使在不同的供应商之间,即 EC2 和 Linode。它工作得很好,客户端流量故障转移在不到 1 分钟的时间内完成。您可以从以下位置获得自动 DNS 故障转移dnshat.com便宜。
答案3
答案4
自己动手的选项是将 MySQL 安装到 EBS 卷,使用弹性 IP 或动态 DNS 在发生故障时切换您所指向的服务器。
您需要一个外部服务器来监控心跳,然后卸载 EBS 卷,重新安装到您的备份服务器,然后重新映射 IP 或更改 DNS。如果您担心文件系统本身,那么您必须这样做lvm 快照或者其他方法来获取您的数据副本,然后您也可以将它们备份到 S3 或 EBS 卷。
我喜欢将数据放在 EBS 卷本身上,因为您可以获取它的 EBS 快照进行备份,而无需参与 lvm 的内容(如果这听起来让您感到害怕的话)。
另外值得注意的是,亚马逊有一个企业 MySQL 包我没用过,但可能是更好的选择。他们的支持合同价格通常相当合理。