自动扩展 MySQL 服务器的方法?

自动扩展 MySQL 服务器的方法?

我运营的网站流量激增,因此自动扩展解决方案在这种情况下非常有利可图。目前,Web 服务器能够水平自动扩展,但瓶颈在 MySQL 服务器上。

  • 我尝试过使用 Amazon RDS Multi-AZ,但 12 GB 数据库升级需要 15 分钟,而且停机时间也只有几分钟。当我已经知道某个特定时刻将发生流量激增时,它就帮了我大忙。
  • 我也考虑过 Xeround。这可能是最好的解决方案,尽管对于这种规模的数据库来说,它相当昂贵。无论如何,这不是一个选择,因为法律上我需要数据库位于欧盟。
  • 我读过有关 Scalr 的文章,但不确定它是否有用以及如何有用。
  • 我看到许多云托管提供商提供垂直扩展解决方案,我认为这种解决方案没有停机时间(不确定这是否真的可行,据我所知他们使用 Xen 虚拟机管理程序)。这可能是一个解决方案,但我想知道它是否没有停机时间,以及 MySQL 配置(以及操作系统上的许多其他东西)如何能够在没有停机时间的情况下升级。
  • 我曾尝试使用 MySQL 从属服务器,但根本没有帮助。
  • 我正在使用 memcache,它很有帮助,但还不够。我需要因为写入而升级,而不仅仅是因为读取。

有什么建议吗?提前谢谢

答案1

实际上,一个更简单的解决方案是尝试将 Memcached 添加到您的堆栈中以节省数据库负载。这可以大大节省负载,并且比尝试解决快速启动服务器的问题(难度低)然后解决快速 MySQL 同步(难度高得多)要简单得多。

http://toblender.com/?s=memcached

为了解决写入过多的问题,最常见的解决方法是向服务器添加内存(更大的工作集可以保存在 RAM 中),将数据库放在更快的磁盘上(SSD 是一个很好的解决方案,但价格昂贵),或者分片(这在增加服务器和复杂性方面成本高昂)。

减少数据库写入负载的另一种方法是加入内存数据存储(如 Redis)来处理经常变化的数据,并在需要时定期将更改写回主数据库。

答案2

您应该考虑使用星型拓扑

以下是我的建议

  • 一位写主 (又名 WM)
  • 分销大师(又名 DM)
  • 五 (5) 个读取从属服务器(又名 RSS)

像这样准备拓扑

步骤 01:使用这些常用选项设置 5 RSS

[mysqld]
skip-innodb
key_buffer_size=1G

这将导致所有表都以 MyISAM 存储引擎的形式加载

步骤 02:设置 DM 和所有 RS 服务器

  • mysqldump 将 WM 中的所有表的架构转储到 schemadump 文件中
  • 将 schemadump 文件加载到 DM 和所有 5 个 RSS
  • tblname ROW_FORMAT=Fixed;在 RSS 中的所有表上运行 ALTER TABLE
  • tblname ENGINE=BLACKHOLE;在 DM 中的所有表上运行 ALTER TABLE
  • mysqldump 仅将数据(使用 --no-create-info)转储到数据转储
  • 在所有 5 个 RSS 中加载数据转储

步骤 03:设置从 DM 到所有 5 个 RSS 的复制

步骤 04:设置从 WM 到 DM 的复制

设置结束

读/写机制的工作原理如下

  • 所有写入(插入、更新、删除)都发生在 WM
  • SQL 记录在 DM 的二进制日志中(DM 中没有实际数据)
  • 每个 RSS 都是 DM 的读取从属
  • 您所有的阅读都发生在 RSS

现在问题来了……

  • 您最初使用 RSS 1-4 进行阅读
  • 使用第 5 个 RSS 来启动其他 RSS
    • service mysql stop在第 5 RSS 上运行
    • 启动另一个 RSS
    • 将第 5 个 RSS 的 /var/lib/mysql 和 /etc/my.cnf 复制到新启动的 RSS
    • service mysql stop在第 5 RSS 上运行
    • service mysql stop在新的 RSS 上运行

您可以使用 RSS #5 反复启动新服务器

附注:请不要将 XEROUND 用于 WM 或 DM,因为它们不支持 InnoDB 或 BLACKHOLE 存储引擎。

我希望这些想法能有所帮助。

答案3

如果你使用 Innodb,你应该考虑Mysql 多主机由管理加莱拉。它使设置 mysql 多主机变得更容易,并且应该使您更容易“半”自动缩放。

如果这是您或您的公司正在编写的应用程序,您可以考虑将应用程序迁移到分片(分区)设计。但分片可能会变得复杂。以下是关联帮助您入门。

我假设您已经“调整”了 mysql 配置文件,如分配适当的内存等。

答案4

这是在你控制的机架中,还是在云端?12GB 是非常相对于可用磁盘的大小,数据库较小。将其放在小型 SLC SSD 的 RAID1 或 RAID10 阵列上,写入延迟就会消失。

英特尔 311 系列 20GB SLC SSD(每人 120 美元)就能出色地完成这项工作。

如果数据库更大,您可以通过将数据库移动到 ZFS SAN 服务器上的 iSCSI 目标(使用 Nexenta、OpenIndiana、FreeNAS 或其他产品在商用服务器硬件上构建)并为您的 ZIL 写入缓存设置类似 SSD 的镜像来获得类似的惊人效果。除了最特殊的情况外,千兆以太网足以移动数据库 iSCSI 流量。

相关内容