3

考虑一个相当大的网站(2M+ 浏览量/m,大量用户),它有 2 台前端服务器:一台在美国,一台在欧洲。两个专用 URL 将访问者带到一台服务器上,一个是法语,另一个是英语。两个站点共享完全相同的数据。

什么是最具成本效益的解决方案?(我公司使用的数据库:MySQL)

1/ Amazon EC2(美国)上的单个主服务器,前端服务器上的从属服务器?

  • 优点:没有master-master rep,这意味着没有数据与自动增量冲突和唯一列重复的风险等。

  • 缺点:滞后!在欧洲写东西在美国不会有太多的滞后吗?另一个缺点可能是在主人死亡的情况下缺乏快速的肮脏解决方案。那么在与前端相同的服务器上拥有从属呢?

2/ 两个 Amazon EC2 实例,一个在美国,一个在欧洲,充当主-主复制服务器。在每个前端加上两个奴隶?

  • Adv:数据的速度和安全性。当然没有负载均衡器,但是做一个 hack 来将 master 切换到另一个似乎是微不足道的。

  • Drwbcks:价格。以及数据库损坏的风险

3/ 还有其他解决方案吗?

由于这是我第一次在 2 大洲使用服务器,我非常感谢您向您学习该领域的经验,包括 MySQL 与否,包括 EC2 与否。

谢谢马歇尔

4

4 回答 4

3

像往常一样,我要说的取决于你的应用程序,它如何使用数据库等。你需要问自己:

  • 如果您使用的是现成的软件,那么其他人在这种情况下做了什么?
  • 应用程序是否需要在整个数据集上运行,或者您可以分区吗?
  • 您的应用程序是为处理多主复制而构建的吗(通常意味着使用自动增量 pk)
  • 更新/删除冲突的可能性有多大?费用是多少?
  • 什么是读:写比率?写作的本质是什么?它们通常是更新还是追加操作?

我假设法国服务器在欧洲,而英语服务器在美国?如果您可以对数据进行分区,以便法语站点使用一个数据库,而英语站点使用另一个数据库,那么您会更好。即使两个站点都访问两个数据库,因为您不必担心冲突。您甚至可以在每个主服务器上运行两个 mysql 实例并为两者进行多主复制。

如果您不能分区,我可能会选择#2,但我会将其中一台机器指定为“真正的”主机并将所有写入发送给它,以帮助避免数据破坏。这种方式很容易在紧要关头切换。

如果您对成本敏感,并且无论如何都要在前端服务器上运行副本,那么只需在前端服务器上运行主数据库即可。你以后总是可以把它拉下来。副本通常比具有相同读取负载的主节点具有更高的 CPU/IO 成本:它们必须以串行方式执行写入,这确实会搞砸事情。

另外,不要为您的数据库使用 m1.small 实例。或者至少关注你的表现。m1.smalls 的供电明显不足,如果您观看top,您会注意到您的 CPU 时间的很大一部分被管理程序窃取了。我推荐 c1.medium 的。

于 2009-01-10T15:27:47.343 回答
2

永远不要使用主-主复制。没有解决冲突的机制。如果您尝试同时写入两个 master(或者在一个 master 赶上您之前写入另一个 master 的更改之前写入一个 master),那么您最终会遇到一个损坏的复制场景。服务不会停止,它们只会越来越远,使和解变得不可能。

如果没有精心设计的监控来检查它是否工作正常,请不要使用 MySQL 复制。不要假设因为您最初已正确配置它,它会继续工作或保持同步。

DO 有一个有据可查、经过充分测试的程序来恢复从站不同步或停止。从头开始安装新的从站有一个类似的记录过程。

如果您关心正确或最新的数据,您的应用程序可能需要足够的智能才能知道从站不同步或停止,并且不应该使用它。您需要从您的监控中获得某种反馈来执行此操作。

如果你有一个奴隶,比如说美国,而你的主人在欧洲,那通常会给你你期望的延迟量,即比它们位于同一位置的延迟大约 150 毫秒。

在 MySQL 中,从属服务器在主服务器完成查询之前不会启动查询,因此它总是会落后于更新所需的时间长度。

此外,slave 是单线程的,因此单个“硬”更新查询将延迟所有后续查询。

如果你在多线程写入负载上努力推动你的主人,假设你的奴隶有相同的硬件,他们不太可能跟上。

于 2009-01-11T07:41:13.947 回答
1

我们正在研究一个类似的场景——在亚马逊东海岸本周两次完全断网之后——这意味着甚至没有在多个区域进行复制,并且使用 RDB 实例让我们保持可用。

但是 DRB 不允许从东到西甚至进入欧洲。

我们现在正在审查东西方甚至欧洲 Master Master 的方法,其中一个 master 仅作为故障转移,通过 dnsmadeeasy 进行故障转移,响应速度非常快。

优点:快速可靠的故障转移,停机时间短,无需复杂的故障转移功能管理。

缺点:一个额外的系统在不使用的情况下运行 - 但与使用 RDB 相比,它并不昂贵

DRB 由 Amazon 很好地管理,包括时间点恢复等——所有这些都因离开它而丢失。但它仅限于一个区域内的复制,并且该区域可以完全切断,这一事实使其成为问题。作为 RDB 备份的替代方案,我们正在寻找 Zmanda 开源工具来处理备份管理。尚未测试,但基于我们所有的故障转移、数据库和硬件,所以这看起来是最简单的,因此也是最有前途的高可用性方法。

于 2011-08-11T02:44:41.733 回答
0

这个问题很老,但现在存在解决方案:Galera。它执行 MySQL (InnoDB) 复制,并且也适用于 WAN。http://codership.com/

于 2011-09-07T22:49:53.483 回答