7

我计划将我的 Web 应用程序部署到 EC2。我有几个网络服务器实例。我有 1 个主数据库实例。我有 1 个故障转移数据库实例。当主数据库实例发生故障时,我需要一种策略将 Web 服务器重定向到故障转移数据库实例 IP。

我希望我可以在我的连接字符串中使用弹性 IP。但是,网络服务器无法访问/ping 弹性 IP。我有几个蛮力的想法来解决这个问题。但是,我试图找到最优雅的解决方案。

我正在使用所有 .Net 和 SQL Server。我的连接字符串是加密的。

是否有人有使用某种形式的自动化或 DNS 配置对 EC2 中的数据库实例进行故障转移的策略?

请告诉我。

4

5 回答 5

1

http://alestic.com/2009/06/ec2-elastic-ip-internal

告诉您如何使用弹性 IP 公共 DNS。

于 2009-12-19T20:52:21.597 回答
0

没有使用过 EC2,但您肯定需要:

(a) 将您的前端置于您定义的某些自定义维护模式,同时切换 IP;并让前端执行所需的步骤来管理与先前服务器关闭和新服务器在进入和离开您的自定义维护模式时出现相关的潜在数据完整性和数据丢失问题

或者,对于零停机时间系统:

(b) 从头开始​​在对象/关系和事务级别设计系统,以支持零停机故障转移。这不是您可以快速连接到任何应用程序的东西。

(c) 使用一些数据库支持进行自动故障转移。我不知道 SQL Server 对适合您的应用程序的故障转移支持是否存在或是否适合此处。我建议在问题中添加“sql-server”标签以开始搜索合适的受众。

如果弹性 IP 不起作用(至少可以说这听起来很奇怪——您不应该与 EC2 讨论这个问题吗),您可能必须能够在告诉前端的同时指示您的前端使用哪个新数据库 IP它从维护模式进入正常模式。

于 2009-12-19T15:37:20.870 回答
0

如果您愿意花一点额外的钱,请查看Rightscale 的工具;他们构建了自定义服务器映像和支持工具来处理数据库故障转移(以及许多其他事情)。 这个链接解释了如何用 MySQL 来做这件事,所以即使它不使用 SQL Server,也希望能向你展示一些原则。

于 2009-12-21T17:07:23.463 回答
0

我一直认为连接字符串中存在这种可能性

这是从How to add Failover Partner to a connection string in VB.NET中获取的(但尚未测试):

如果您使用 ADO.NET 或 SQL Native Client 连接到正在镜像的数据库,则您的应用程序可以利用驱动程序在发生数据库镜像故障转移时自动重定向连接的能力。您必须在连接字符串中指定初始主体服务器和数据库以及故障转移伙伴服务器。

Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
Initial Catalog=myDataBase;Integrated Security=True;

当然还有许多其他方法可以使用数据库镜像来编写连接字符串,这只是指出故障转移功能的一个示例。您可以将其与其他可用的连接字符串选项结合使用。

于 2010-12-09T00:18:30.757 回答
0

为了拓宽 gareth 的答案,云管理软件通常会解决这类问题。RightScale 是其中之一,但您可以尝试 enStratus 或Scalr(免责声明:我在 Scalr 工作)。这些工具提供故障转移解决方案,例如:

  • 备份:您可以安排包含数据的 EBS 卷的自动快照
  • 容错数据库:在发生故障时,将一个slave提升为master,如果故障的master和新的master在同一个AZ,或者是卷的快照,则会切换挂载的存储

如果您想构建自己的解决方案,您可以复制我们在 Scalr 使用的下面详述的过程:

  • 同一个AZ有slave吗?如果是这样,请升级它,切换 EBS 卷(仅限于单个 AZ),切换您可能拥有的任何 ElasticIP,重新配置剩余从属的复制。
  • 如果没有,是否在另一个 AZ 中完全复制了从站?如果是这样,推广它,然后执行上述操作。
  • 如果同一个 AZ 中没有 slave,并且另一个 AZ 中没有完全复制的 slave,则从 master 的卷创建一个快照,并使用该快照在运行 slave 的 AZ 中创建一个新卷。然后进行上述操作。
于 2012-03-26T23:35:18.113 回答