AWS RDS MySQL只读副本滞后问题

Zac*_*med 14 mysql database-replication amazon-web-services amazon-rds

我运行的服务需要能够支持大约4000+ IOPS并保持副本延迟<= 1秒才能正常运行.

我正在使用AWS RDS MySQL实例并拥有2个只读副本.我的服务在阅读副本上遇到了巨大的副本延迟峰值,所以我与AWS支持人员联系了一个星期,试图理解为什么我遇到了延迟 - 我有6000个IOPS配置,我的实例非常强大.他们给了我各种理由.

在更改实例类型后,从5.5升级到MySQL 5.6以利用多线程,并且它们替换了底层硬件,我仍然看到了随机的重复延迟.

最终我决定开始修改参数组,改变我的配置,只读取复制过程中涉及的任何我可以找到的复制品,现在终于遇到<= 1秒的复制延迟.

以下是我更改的设置及其看似成功的值(我复制了默认的mysql 5.6 param组并更改了这些值,将更新的参数组应用于只读的副本):

innodb_flush_log_at_trx_commit=0
sync_binlog=0
sync_master_info=0
sync_relay_log=0
sync_relay_log_info=0
Run Code Online (Sandbox Code Playgroud)

请阅读以下每个内容以了解修改的影响:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

其他事项,以确保你照顾:

Convert any MyISAM tables to InnoDB
Upgrade from MySQL < 5.6 to MySQL >= 5.6
Ensure that your provisioned IOPS are > the combined read/write IOPS you require
Ensure that your read replica instances are >= master instance
Run Code Online (Sandbox Code Playgroud)

如果其他人有任何其他参数可以在只读副本或主数据库上修改,以获得最佳的复制性能,我很乐意听到更多.

更新于2014年8月7日至8日

为了利用我设置的Mysql 5.6多线程复制:

slave_parallel_workers=5 (Set it to the number of read replica DBs you have running)
Run Code Online (Sandbox Code Playgroud)

我在这里发现了这个:

https://blogs.oracle.com/MySQL/entry/benchmarking_mysql_replication_with_multi

Tat*_*ata 5

Mysql 复制按顺序执行单个数据库上的所有事务,而 master - 可以并行执行这些事务。

您可能在单个 DA 上执行了大部分更新,这就是不允许您获得多线程复制优势的原因。

检查iostat您的副本服务器上的 。大多数情况下,这些问题是由于机器上的高 IO 造成的。

为了减少机器上的 IO - 您可以进行一些额外的更改:

  • 增加innodb_buffer_pool_size- 这是您应该从默认值更改的第一件事。如果此实例仅运行 mysql - 您可以在此处分配大约 80% 的可用内存。

  • 还要验证以下参数:

     log_slave_updates = false
     binlog_format = STATEMENT
    
    Run Code Online (Sandbox Code Playgroud)

    (如果您配置了 MIXED 或 ROW binlog_format - 从这里验证您是否理解这意味着什么http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

  • 如果您有大量数据被多次更改 - 增加

    innodb_max_dirty_pages_pct 到 90% 或 95% 可能值得检查。