我正在考虑为我的数据库设置主从复制。从服务器将用于冗余,也可能用作报告服务器。然而,我遇到的最大问题之一是我们的数据中心已经用尽了电力。因此,添加另一台物理服务器不是一种选择。
就 cpu 而言,我们现有的数据库服务器的利用率相当低(在四核上的平均负载从未真正超过 1)。所以主要的想法是折腾一些新驱动器并将内存加倍(从 8GB 到 16)并在同一台物理机器上运行第二个 mysql 实例。每个实例都有单独的数据库磁盘。
这个想法有什么问题吗?
编辑(更多信息):我(幸运的是)从来没有发生过任何糟糕的事情来关闭服务器,但我正在努力提前计划。我们当然有可以恢复的每晚备份。但我认为,如果主服务器的驱动器发生故障(如果整台机器出现故障,显然不会),将冗余数据放在单独的磁盘上会提供更快的解决方案。
至于报告方面,我们要报告的任何表格都是 MyIsam。因此,对正在写入的同一个表进行昂贵的读取可能会使服务器陷入困境。我的假设是,只要我们向主服务器投入足够的 RAM(因为 cpu 负载还不是问题),有一个从服务器来报告就不会影响主服务器。
为了系统可靠性和数据安全方面的冗余,在与主设备相同的机器上运行从设备不会为您提供任何(或接近)。如果发生足以让主人倒下的坏事,它也可能会倒下奴隶。
对于纯粹出于访问权限的原因隔离用户,一个好的 RDBMS 将提供更有效的方法来做到这一点。
在同一台机器上运行两个数据库将需要更多的 RAM 才能以相同的效率运行,因为两个数据库将竞争空间以保持它们不同的缓冲区和缓存。如果从设备的数据文件位于与主设备不同的物理驱动器上,则通过 IO 负载隔离可能会带来性能优势。在这种情况下,您可以运行复杂的报告,这些报告需要对从属设备进行多次磁盘读取,而无需与主设备竞争驱动器 IO 带宽。
编辑:正如 DTest 在下面的评论中提到的,从属数据库的另一个可能的好处(即使在与主数据库相同的驱动器上)是从属数据库中复杂的长时间运行的查询,否则可能会导致日常锁定问题- 主服务器上的日运行查询更安全。尽管您最好将从属设备放在不同的驱动器上,因为此类重要查询可能会导致 IO 争用问题。
我不清楚这如何解决您的问题。没有冗余,因为它位于相同的物理硬件、相同的操作系统内核、相同的 MySQL 二进制文件、可能不同的磁盘但位于相同的存储控制器等上。报告数据库的原因是从 OLTP 数据库中卸载查询,并且作为都在同一个套件上,额外的力量来自哪里?或者您还想从这个设置中获得什么?
一个可以想象的用途可能是以某种方式隔离用户,但同样,我认为可以使用
GRANT
.这确实被认为是不明智的,你只是想利用更多的核心吗?新设计考虑的目标是什么?
(作为答案发布而不是评论以保持对话线程集中)
这可能是一把双刃剑
您可以在与主服务器相同的服务器上运行多个 mysql 实例作为只读从属服务器,前提是每个 MySQL 实例驻留在不同的磁盘上。仅当您运行不利用多核 (CPU) 的旧版本 MySQL 时,才需要这样做。最新版本的 MySQL 可以调整为实际使用多个 CPU,从而无需通过运行多个 MySQL 实例来访问多个内核。
同时,这也是一个非常糟糕的主意。我的许多客户这样做是为了节省购买裸机或 VM 服务器的费用。服务器负载的任何峰值都可能影响所有正在运行的 MySQL 实例,因为任何一个 MySQL 实例中的查询错误、查询缓慢、连接过多、内存使用过多、服务器内存不足、缓存抖动等等。这也增加了应用程序的复杂性,因为必须通过它们的端口号访问不同的 MySQL 实例,而且你也会受到 TCP/IP 的支配。
我会在不同的服务器上交叉复制,即 A 在 B 上的从属服务器和 B 在 A 上的从属服务器。我们在服务器上运行多个实例并且没有问题,因为我们的 MySQL 服务器没有容量。故障转移到正在运行的服务器比从备份恢复要快得多。