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
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% 可能值得检查。
| 归档时间: |
|
| 查看次数: |
8908 次 |
| 最近记录: |