如何镜像 MySQL 数据库?

如何镜像 MySQL 数据库?

我为一个网站运行了两台负载平衡服务器,我希望数据库能够同步。查询可以在两台服务器中的任意一台上运行,因为它们都是生产站点,因此复制不能只向一种方向进行。

它不必是实时的,只要相当准确,以便人们在切换到不同的服务器时不会注意到差异。

答案1

正如其他人提到的,你谈论的是多主复制。有几种开源工具,例如马特吉特或者帮助实现多主复制,但即使有了这些,你仍然会自食其果。

我会确保您确实需要同步(即即时)进行写入。如果您可以忍受用户在网站上执行操作和在数据库中插入或更新数据之间有几秒钟到一分钟的延迟,我会考虑设置某种离线日志记录过程。例如,无论您在哪里有插入/更新语句,都应将写入文件的内容(或者如果您无法承受写入磁盘的冲击,则写入内存数据库)并让某个进程/守护进程位于您的 Web 头上,读取日志文件,并将适当的数据写入单个主服务器;然后将其复制到另一台负载平衡机器。

尽管如此,我仍然认为这是值得的,因为我从来没有主动维护过多主复制。

答案2

此链接是关于主主复制,也称为循环副本。如果您没有写入量很大的数据库,则此方法应用起来很简单,而且效果很好。

答案3

我也会尝试不使用循环复制。

如果可能的话,使用标准复制,在两个节点上分发只读查询,并将读/写查询分发到主节点。适用于维基百科,可能也适用于您 :)

另一种方法是设置双节点主动-被动设置(drbd 和一些集群)。在应用程序上更简单(它只会看到一个要连接的 mysql 服务器),如果您不习惯这种东西,则需要在 HA 方面多加注意。您不会获得拥有两个不同的数据库服务器的性能奖励。

要做出选择,您需要确定您的主要兴趣是降低停机时间(标准复制或主动/被动集群)还是实现更好的性能(标准复制、循环复制等......)以及您的限制是什么(您可以修改应用程序吗,您可以修改多少,所需的性能,允许的预算等......)

为了从硬件中获得更好的性能(或者只是为了弥补采用主动/被动方式时的性能不足),请不要忘记 memcached 和类似的东西。

答案4

为什么不把事情简化一点呢?让两个前端使用相同的后端,然后使用 DRBD 和 Heartbeat 之类的东西来确保您的数据库不会成为单点故障。双主复制几乎总是以悲剧收场。

相关内容