如何自动扩展MySQL服务器?

我运行的网站stream量激增,因为这种情况下,自动缩放解决scheme是非常有利可图的。 目前Web服务器能够水平自动扩展,但瓶颈在MySQL服务器上。

  • 我曾尝试使用Amazon RDS多可用区,但是12 GB数据库需要15分钟才能升级,并且需要几分钟的停机时间。 当我已经知道在某个特定时刻将会发生交通高峰的时候,这已经有了很大的帮助。
  • 我也考虑过Xeround。 这可能是最好的解决scheme,虽然对于这个大小的数据库来说是相当昂贵的。 无论如何,这不是一种select,因为我依法需要数据库在欧盟。
  • 我已经阅读了关于Scalr,但不知道这可能是有益的,如何。
  • 我已经看到,许多云托pipe提供商提供垂直扩展解决scheme,我认为它有0停机时间(不知道这是否真的有可能,据我所知,他们使用Xenpipe理程序)。 这可能是一个解决scheme,但我不知道它是否没有宕机,以及MySQLconfiguration(以及操作系统上的其他许多东西)如何能够在没有停机的情况下升级。
  • 我已经尝试过使用MySQL从服务器,但是根本没有帮助。
  • 我正在使用帮助很多,但这是不够的memcache。 我需要升级是因为写入,而不仅仅是因为读取。

有什么build议么? 先谢谢你

实际上,更简单的解决scheme是尝试将Memcached添加到您的堆栈以节省数据库负载。 这可以大大节省负载,而且比解决快速站立服务器(低难度)的问题简单得多,然后快速地findMySQL同步(难度要高得多)。

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

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

减less数据库写入负载的另一种方法是将一个内存数据存储(如Redis)用于处理频繁更改的数据,如果需要,可以定期将更改写回到主数据库。

你应该考虑使用星型拓扑

这是我正在提议的

  • 一个写大师(又名WM)
  • 一个分销大师 (又名DM)
  • 五(5)读奴隶服务器(又名RSS)

像这样准备拓扑

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

[mysqld] skip-innodb key_buffer_size=1G 

这将导致所有表被创build为MyISAM存储引擎

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

  • 将WM中所有表的模式mysqldump添加到schemadump文件中
  • 将Schemadump文件加载到DM和全部5个RSS中
  • 运行ALTER TABLE tblname ROW_FORMAT=Fixed; 在RSS中的所有表上
  • 运行ALTER TABLE tblname ENGINE=BLACKHOLE; 在DM中的所有表格上
  • 只有mysqldump数据(使用–no-create-info)到一个datadump
  • 在所有5个RSS中加载datadump

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

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

设置结束

这是你的读/写机制的工作原理

  • 你所有的写入(INSERT,UPDATE,DELETE)都发生在WM上
  • SQLlogging在DM的二进制日志中(没有实际的数据驻留在DM中)
  • 每个RSS是DM的读取从机
  • 所有的阅读都发生在RSS上

现在这里是赶上…

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

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

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

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

如果你使用Innodb,你应该考虑由Galerapipe理的Mysql多主人 。 这使得设置mysql多主机更容易,并且应该使您更容易“半”自动缩放。

如果这是您或您公司正在编写的应用程序,则可以考虑转换为应用程序的分片(分区)devise。 但分片可能会变得复杂。 这是一个让你开始的链接 。

我假设你已经“调整”了mysqlconfiguration文件,如在分配的适当的内存等。

这是在你控制的架子上,还是在云端? 12GB是相对于可用磁盘大小而言非常小的数据库。 将其放置在小型SLC SSD的RAID1或RAID10arrays上,写入延迟将消失。

英特尔311系列20GB SLC固态硬盘 (每个120美元)将做得非常出色。

如果数据库较大,则可以通过将数据库移动到ZFS SAN服务器上的iSCSI目标(使用Nexenta,OpenIndiana,FreeNAS或其他任何types的商用服务器硬件构build)并设置类似SSD的镜像以获得类似的壮观结果你的ZIL写入caching。 除了最特殊的情况之外,千兆以太网已经足够移动数据库iSCSIstream量。