在同一台物理服务器上运行复制是否明智?


13

我正在考虑为我的数据库设置主从复制。从属服务器将用于冗余,可能还用于报告服务器。但是,我遇到的最大问题之一是,我们已经在数据中心实现了最大的供电能力。因此,添加另一台物理服务器不是一个选择。

就cpu而言,我们现有的数据库服务器未得到充分利用(四核的平均负载从未真正超过1)。因此,最主要的想法是投入一些新的驱动器,并将内存增加一倍(从8GB到16),并在同一台物理计算机上运行另一个mysql实例。每个实例将具有用于数据库的单独磁盘。

这个想法有什么问题吗?

编辑(更多信息):幸运的是,我从未发生过任何严重的事情来关闭服务器,但是我正在尝试提前计划。我们当然有每晚可以从中恢复的备份。但是我认为,如果主服务器的驱动器发生故障(如果整个计算机都熄灭,显然不会),那么将冗余数据存储在单独的磁盘上将提供更快的解决方案。

至于报告方面,我们要报告的任何表都是MyIsam。因此,对要写入的同一表进行昂贵的读取可能会使服务器瘫痪。我的假设是有一个从属服务器进行报告不会影响主服务器,只要我们向其提供足够的内存即可(因为cpu负载尚未成为问题)。

Answers:


11

从系统可靠性和数据安全性方面考虑,为了实现冗余,在与主服务器相同的机器上运行一个从服务器不会提供任何帮助(或接近)。如果发生了足以使主机崩溃的严重故障,则也可能会使从机崩溃。

出于访问权限的原因,出于纯粹隔离用户的考虑,一个好的RDBMS将提供更有效的方法。

在同一台计算机上运行两个数据库将需要更多的RAM才能以相同的效率运行,因为两个数据库将争夺空间以保持它们的各种缓冲区和高速缓存。如果从设备的数据文件与主设备不在同一物理驱动器上,则通过IO负载隔离可能会带来性能优势。在这种情况下,您可以运行复杂的报告,这些报告需要针对从属服务器读取许多磁盘,而不必与主服务器争夺驱动器IO带宽。

编辑:正如DTest在下面的评论中提到的,从数据库的另一个可能的好处(即使与主数据库在同一驱动器上)是从数据库中复杂的长期运行查询,否则可能导致一天到一天的锁定问题。主服务器上的运行日查询更安全。尽管最好还是将从属服务器放在不同的驱动器上,因为如此重要的查询可能会导致IO争用问题。


1
我的想法是,当向主服务器写入数据时(对于复杂的报告),从服务器将无法与myIsam上的表锁竞争。
德里克·唐尼

@DTest:那肯定是一个可能的奖励,是(+1)。对于其他表类型,当复杂的报表查询可能请求大锁(例如表锁)时,也是如此。我将在答案中添加注释,这样,如果出现更多注释,则不太可能显示剪切表格。
David Spillett

7

我不清楚这如何解决您的问题。因为它位于相同的物理硬件,相同的OS内核,相同的MySQL二进制文件,也许是不同的磁盘但位于同一存储控制器上,所以没有冗余。报告数据库的原因是从OLTP数据库中卸载查询,并且全部都在同一套件上,额外的动力从何而来?还是您尝试从此设置中获取其他东西?

一种可能的用途是也许以某种方式隔离用户,但是我再次认为可以使用完成GRANT


为我的问题添加了更多注释。用户的隔离并不是我要完成的任务
Derek Downey

2

确实认为这是不明智的,您是否只是想利用更多的内核?新设计考虑的目标是什么?

(发布为答案而非评论,以使会话话题保持专注)


提供了一些防止驱动器故障的保护措施,同时提供了一个用于处理复杂报告的服务器,该服务器不会降低生产站点访问主服务器的速度。
德里克·唐尼

他们将使用相同的磁盘控制器,还是除了新的主轴之外还能够安装新的磁盘控制器?
jcolebrand

1
我刚遇到这个。我注意到您提到要利用多核的修辞问题。我实际上是在您说完这两个月后在我的回答中讨论过的。为您的见解+1。顺便说一句,这是一个关于多次运行MySQL的不错的视频:youtu.be/5uKBg9prA1A
RolandoMySQLDBA 2011年

顺便说一句,我的雇主有一位客户,我为其安排了这种架构。一台计算机上有三个读取从属服务器(全部在MyISAM中),而主服务器均为InnoDB。
RolandoMySQLDBA 2011年

1

这可以是一把双刃剑

您可以将mysql的多个实例作为只读从属服务器与主服务器在同一服务器上运行,前提是每个MySQL实例都位于不同的磁盘上。仅当您运行的旧版MySQL不利用多核(CPU)时,才需要这样做。可以将MySQL的最新版本调整为实际使用多个CPU,从而不必通过运行多个MySQL实例来访问多个内核。

同时,这也是一个非常糟糕的主意。我的许多客户都这样做是为了节省购买裸机或VM服务器的钱。在任何一个MySQL实例中,由于错误查询,查询慢,连接过多,内存使用过多,服务器内存不足,高速缓存抖动等原因,服务器负载的任何峰值都会影响所有正在运行的MySQL实例。由于必须通过端口号访问不同的MySQL实例,这也增加了应用程序的复杂性,而且您也将受TCP / IP的支配。


0

我不愿在另一台服务器上进行复制,即A在B上的从属服务器,而B在A上的从属服务器。我们在服务器上运行多个实例,并且没有问题,因为我们的MySQL服务器容量不足。故障转移到运行中的服务器比从备份还原要快得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.