如何用多个数据库服务器扩展mySQL(比如说20个数据库服务器)

从MySQL官方开发者网站的文档中可以很清楚地从1 MySQL数据库服务器扩展到4-5服务器: http : //dev.mysql.com/doc/refman/5.1/en/replication-solutions-scaleout.html

从4台服务器扩展到20台服务器怎么样? 我们只是把它作为药膏join? 意思是只有一个主人的19个奴隶? 这意味着无论我们放入多less台数据库服务器,插入速度都是一样的。

有没有更好的方法来扩展MySQL,通过我们放入的服务器越多,读取速度和写入速度就越快。 我们看到这是一个需要,因为这是一个重型交易公司(A Trading网站)

哦,如果可能的话,避免使用SAN存储。 如果需要SAN,不妨将MySQL迁移到Cassandra。

有几个解决scheme。

为了让插入性能对代码影响最小,请查看mysql集群 。 这些远远超出了复制的范围,并且透明地实现了分片。 我相信(但是需要仔细检查)一个mysql集群可以充当主/从复制的主节点。 所以,例如。 您可能有一个4节点集群处理写入复制到十几个从属。

请注意,您可以实现主/主复制 – 您可以有效地将任意数量的节点安排在一个环中 – 这也将为您提供插入性能的好处 – 但是,如此大量的节点,增加了延迟的风险更新的传播。

如果你有一个复杂的模式,那么使用联合存储引擎分割数据可能会带来很大的好处,尽pipe在这种情况下,mysql并不总是优化查询。

你绝对应该看看mysqlproxy或其他抽象层,如果你走下这些路线的大部分。

如果你正在处理那么多的节点,请查看mysql-mmm或ndb集群,但是请注意,如果你使用MySQL集群(ndb),那么你将需要相应地改变你的代码。

MySQL-MMM可以在http://mysql-mmm.org/find,而ndb的东西是来自mysql.com的MySQL Cluster Server的一部分

您可能想要查看分发主文件安装程序。

这将涉及创造一个有三(3)个特征的奴隶(称为分配主人):

  • log-bin已启用
  • log-slave-updates启用
  • 每个数据库(information_schema和mysql除外)都只有BLACKHOLE表

那会有什么好处?

想象这个场景

  • 26个MySQL实例
    • ServerA是写入主
    • ServerB是分发主机
    • ServerC … ServerZ是ServerB的读取从站

以下是在ServerA中执行INSERT时发生的情况

  • ServerA将INSERT的条目logging到其当前二进制日志中
  • ServerB的I / O线程从ServerA的二进制日志中导入INSERT
  • ServerB的I / O线程在其中继日志中loggingINSERT
  • ServerB的SQL线程从其中继日志中读取INSERT
  • ServerB处理SQL
  • ServerB将INSERT的条目logging到其当前二进制日志中
  • ServerB将其二进制日志中的INSERT提供给ServerC … ServerZ的中继日志

这提供了以下好处

  1. ServerA(写入主)不会陷入执行复制任务
  2. ServerB(分发主机)本地不存储数据。 它只提供了将二进制日志条目传递给所有读取从属的通道。 因此,没有重写I / O。

这已经被别人尝试过了。 事实上,我在DBA StackExchange和StackOVerflow中回答了一个问题。 对于愿意做腿部工作的人来说,这是一个可行的select,但是在两个或多个奴隶之间有一个可读的I / O体面传播。

如果你关心高可用性,没有问题。 你有两个select:

选项1

重新安装如下

  • 26个MySQL实例
    • ServerA是Active Write Master
    • ServerB是Passive Write Master
    • ServerC是分发主机
    • ServerD … ServerZ是ServerC的读取从站
    • ServerA和ServerB是循环复制对
    • 数据的备份可以在ServerB中完成

选项2: 使用MySQL和DRBD

通过DRBD和ucarp引入磁盘级冗余

  • 26个MySQL实例
    • ServerA是DRBD Primary,MySQL以Write Master的forms运行
    • ServerB是MySQL Down的DRBD Secondary
    • ServerB提供ServerA的数据卷的磁盘级副本
    • 运行用于指向DRBD主数据库的DB VIP的ucarp
    • ServerC是其主服务器是DRBD主服务器的分发主服务器
    • ServerD … ServerZ是ServerC的读取从站