Подтвердить что ты не робот

AWS RDS MySQL Read Replica Lag Issues

Я запускаю службу, которая должна поддерживать около 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

4b9b3361

Ответ 1

Репликация Mysql выполняет все транзакции в одной базе данных по порядку, а master - может выполнять эти транзакции параллельно.

Вероятно, у вас есть большинство обновлений, выполненных на одном DA, и это то, что не позволяет вам использовать многопоточную репликацию.

Проверьте iostat на сервере реплики. В большинстве случаев эта проблема возникает из-за высокого IO на машине.

Чтобы уменьшить IO на машине - есть несколько дополнительных изменений, которые вы можете сделать:

  • Увеличить innodb_buffer_pool_size - это первое, что вам нужно изменить по умолчанию. Если этот экземпляр работает только с mysql - вы можете выделить около 80% вашей доступной памяти здесь.

  • Проверьте также следующие параметры:

     log_slave_updates = false
     binlog_format = STATEMENT
    

    (если вы настроили MIXED или ROW binlog_format - убедитесь, что вы понимаете, что это значит отсюда http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

  • Если у вас много данных, которые меняются несколько раз - увеличение

    innodb_max_dirty_pages_pct до 90 или 95% можно проверить.