如何实现跨数据中心的冗余?

如何实现跨数据中心的冗余?

我有一台内置大量硬件冗余的 LAMP 服务器。我并不担心服务器不可用。但我担心的是服务器所在数据中心的潜在网络问题。我希望在另一个数据中心有另一台服务器以实现冗余。负载平衡不是我关心的问题。

话虽如此,我对以下两点还是比较不清楚:

  1. 如何在两个地理位置不同的数据中心拥有两台具有完全相同数据(包括文件和 MySQL 数据库)的服务器。
  2. 如何确保在第一个数据中心出现网络或服务器故障的情况下,进入一个数据中心的所有流量都自动传输到另一个数据库。

如能就如何解决上述两个问题提供任何指导,我们将不胜感激。

答案1

您的问题有很多部分!

对于 MySQL,您需要有两台服务器相互复制,这样如果其中一台是活动主服务器,另一台将获得其数据。您可以通过检查副本的复制比主服务器慢多少秒来监控它们是否获得相同的数据。您应该只写入活动主服务器,否则当它们都使用 auto_increment 值时,您可能会最终导致数据库崩溃。

对于文件,您可能需要定期运行 rsync 来来回回传播更改。仅监视它们是否具有相同的文件可能就足够了 - 有多种方法可以做到这一点。

您的第二个问题更加棘手。假设主数据中心突然离线。备份数据中心如何知道该怎么做?通常需要手动组件来决定是否发生故障以及是否故障转移到备份。要让客户端进程自动移动到备份,通常需要第三个站点,该站点要么能够代理与活动数据中心的连接,要么提供快速的 DNS 名称切换。我推荐前者,因为使用 DNS 进行数据中心故障转移需要较低的 TTL 值。

答案2

对于第一个问题,可以使用mysql master-master配置,参见:http://www.neocodesoftware.com/replication/ 作为示例。请注意,自动增量偏移量用于避免两个服务器之间的表中的主键发生冲突。

使用 rsync 在服务器之间复制文件,并使用 --delete 标志避免在服务器之间重新同步已删除的文件。

对于第二个问题,我不太确定,因为如果您可以做一个负载平衡代理来检测一台服务器是否出现故障,那么可能会更容易。但如果服务器位于不相关的数据中心,这可能会造成双倍的带宽成本。否则,也许您可​​以将 DNS 条目指向两个 IP,以便客户端尝试这两个 IP

相关内容