我想升级我的服务器,因为高 mysql 负载导致速度缓慢 + 每当数据库上运行备份进程时,数据库就无法访问,所以我想找个解决方案。我当前的服务器是 Opteron 2212,配备 8GB RAM。
我的网络主机建议使用配置较低的服务器(Phenom Hexacore,8GB RAM),但需要 3 台服务器 + 负载均衡器……他们说,这将有助于应对流量很大的情况下的情况,并且当其中一台服务器出现故障时,还会有一台备用服务器。
进一步询问后,他们说不会设置 mysql 复制,因为他们会为此收取额外费用,但仍然可以配置一个满足我需求的设置。
我不太确定,如果我有 3 台这样的服务器,并且没有 mysql 复制,我的升级目的是否能实现...他们不太清楚如何设置。您认为这是否是一个好的解决方案,我可以向他们提出什么建议?
答案1
他们想从你身上赚更多的钱,就这么简单。
首先要说的是:备份会导致数据库无法访问?要么是您的备份解决方案非常差,要么是您的服务器上存在严重的 I/O 问题。最有可能是 I/O。我首先会考虑修复这个问题。如果您使用的是 VPS,那么您的主机可能能够为您分配原始 LUN 映射,而不是在共享的抽象 LUN 上为您提供虚拟磁盘。
如果他们不打算设置 MySQL 复制,那么您要么自己动手,要么为此向您收取一大笔费用。我不熟悉 MySQL 复制(只熟悉 MSSQL),但我猜这不是一项简单的任务,需要由知道他们在做什么的人来执行。如果您不打算复制 SQL 服务器,只复制 Web 服务器,那么我看不出这对您的网站有什么帮助。
第三,您没有向我们提供有关数据库的任何详细信息,因此这只是一个猜测,但也许您可以在数据库内部进行优化。 Opteron 2212 和 8Gb RAM 不是一个慢速系统。我们有 400 个并发用户,每天 18 小时在我们的门户网站上处理超过 500,000 个请求,导致 30Gb 数据库上有数千万个查询,它在具有类似规格的机器上运行良好。精心设计的索引可以为您节省大量金钱、时间和麻烦。
我认为在决定采用负载平衡路径之前,首先还有很多其他途径需要考虑,特别是如果您要集群 SQL 服务器。不过有一点他们说对了 - 如果一台服务器出现故障,您确实可以立即进行故障转移(如果您的负载平衡器配置正确),但即使您没有故障转移,您也有备份(因此是第一点),所以这可能不是世界末日。
答案2
虽然我很欣赏远见者的看法并相信它确实有价值,我认为他们唯一的动机可能不仅仅是从你身上赚钱。
听起来,这可能提供接近理想的解决方案,或者至少比您现在实施的解决方案更专业。然而,它可能仍然过于复杂,无法满足您的需求。这在一定程度上是一个业务问题。额外的费用是否合理?
高负载需要进行大量研究。从修辞角度来说……是读取查询吗?可以优化吗?您的架构是否已优化?如果是写入查询,您可能需要扩大或缩小规模。否则,您可以考虑存档不再需要的数据。
备份 MySQL 数据库的常见解决方案是使用从属副本,然后对其进行快照,这样可以防止数据库锁定。虽然 I/O 争用是一个可能的原因,但使用 mysqldump 或 mysqlhotcopy 通常会引入某种程度的锁定。其他解决方案包括备份软件。您的备份解决方案很可能还有很大的改进空间。
虽然他们提出的方案肯定比你现在的方案更接近理想,也更好,但是否合理则由你来决定。通过改善你现在的方案,你很可能可以获得更高的性价比,减少经常性开支,因为这将巩固你未来发展的基础。
答案3
您应该能够在该机器上运行备份而无需锁定数据库。我会看看其他备份选项。您现在使用什么?
除非您的并发用户负载是问题所在,否则负载平衡器+服务器会给您带来更多问题,而不是解决方案。根据您的数据库使用情况(哪种 I/O?主要是读取?主要是写入?),有几种方法可以优化您的数据库。MySQL 复制设置起来并不困难,但我不认为这是解决您问题的方法。
答案4
您提到了 Web 应用程序的大量写入,您确定是 65:35 吗?如果您的 MySQL 负载很高,那么您的问题将无法通过扩展服务器数量来解决,因为您无法轻松地分配数据库写入,除非(通常)对代码进行大量修改。
您有以下几种选择:
按照其他答案的建议,优化数据库。这意味着,确保所有数据都已正确编入索引。
在 Web 服务器上缓存结果。这有不同的策略,其中最简单的一种是将生成的 HTML 写入一个文件,如果缓存未失效,则读取并输出该文件。另一种是将 PHP 对象序列化为文件。阅读适用于您的平台(我猜是 PHP?)的不同缓存技术。
使用其他备份解决方案。如果您只使用 MyISAM 表,请查看 mysqlhotcopy。通常是 MyISAM 表给您带来麻烦,因为备份时有完整的表锁定。
从另一台机器上的从属数据库进行备份,但提供商却告诉您他们无法执行此操作?在我看来,这似乎不称职。