我运行的服务需要能够支持大约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)