Я запускаю службу, которая должна поддерживать около 4000+ IOPS и поддерживать правильное отставание в реплике
Я использую экземпляры AWS RDS MySQL и имею 2 прочитанных реплики. На моем сервисе наблюдались гигантские спайки с репликами на прочитанной реплике, поэтому я поддерживал связь с AWS в течение недели, пытаясь понять, почему я испытываю отставание. У меня было 6000 IOPS, и мои экземпляры были очень мощными. Они дали мне все основания.
После изменения типов экземпляров, перехода на MySQL 5.6 из 5.5, чтобы использовать многопоточность, и заменяя базовое оборудование, я все равно наблюдал значительное отставание реплики.
В конце концов я решил начать возиться с группами параметров, меняющими мои конфиги, только для прочитанной реплики на все, что я мог найти, что было вовлечено в процесс репликации, и теперь я, наконец, испытываю <= 1 секунду от отставания в реплике.
Вот настройки, которые я изменил, и их значения, которые кажутся успешными (я скопировал группу параметров mysql 5.6 по умолчанию и изменил эти значения, применяя обновленную группу 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
Если у кого-то еще есть какие-либо дополнительные параметры, которые можно было бы изменить на прочитанной реплике или мастер-БД, чтобы получить лучшую производительность репликации, я бы хотел услышать больше.
ОБНОВЛЕНИЕ 7-8-2014
Чтобы воспользоваться многопоточной репликацией 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