2014-03-26 74 views
13

我運行的服務需要能夠支持大約4000+ IOPS,並保持副本滯後< = 1秒才能正常工作。AWS RDS MySQL只讀副本滯後問題

我正在使用AWS RDS MySQL實例並擁有2個只讀副本。我的服務在複製副本上遇到了巨大的副本滯後高峯,因此我在一週內與AWS支持人員聯繫,試圖瞭解爲什麼我遇到了延遲問題 - 我配置了6000 IOPS,並且實例功能非常強大。他們給了我各種各樣的理由。

更改實例類型後,從5.5升級到MySQL 5.6以利用多線程,並且它們替換了底層硬件,但我仍然會隨機地看到顯着的副本滯後。

最終,我決定開始修改參數組,改變我的配置只讀副本的任何我能找到的參與複製過程,現在我最終還是經歷了1秒鐘的複製滯後。

這裏是我改變了設置和似乎是成功的它們的值(我複製了默認的MySQL 5.6 PARAM組和改變這些值應用更新paramater組只讀副本):

innodb_flush_log_at_trx_commit=0 
sync_binlog=0 
sync_master_info=0 
sync_relay_log=0 
sync_relay_log_info=0 

請閱讀有關這些理解修改的影響: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 

如果其他人有任何其他參數可以在只讀副本或主數據庫上修改以獲得最佳複製性能,我很想聽聽更多。

UPDATE 2014年7月8日

要採取的Mysql的優勢5.6多線程複製我設置:

slave_parallel_workers=5 (Set it to the number of read replica DBs you have running) 

我發現這個在這個位置:

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

+0

您能澄清一下「確保您的只讀副本實例> =主實例」 - 您的意思是根據實例類嗎? – greggles

+0

是的,確保實例類至少是相同的,如果不是更大 –

回答

3

Mysql複製按順序執行單個數據庫上的所有事務,並且master - 可以將e並行執行這些事務。

您可能在單個DA上執行了大部分更新,這就是不允許您獲得多線程複製的優勢。

檢查副本服務器上的iostat。大多數情況下,這些問題是由於計算機上的IO高。

爲了減小機器上的IO - 有,你可以做一些額外的變化:

  • 增加innodb_buffer_pool_size - 這是你應該從改變默認的第一件事。如果這個實例只運行mysql--你可以在這裏分配大約80%的可用內存。

  • 也驗證以下參數:

    log_slave_updates = false 
    binlog_format = STATEMENT 
    

    (如果您有混合或行binlog_format配置 - 確認您瞭解什麼呢,從這裏http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

  • 意味着如果你有很多的數據正在改變幾次 - 增加

    innodb_max_dirty_pages_pct到90或95%可以值得檢查