Снимок тома EBS, используемого для репликации - PullRequest
2 голосов
/ 03 января 2012

Я настраиваю экземпляр EC2 с MySQL на томе EBS и настраиваю другой экземпляр, который действует как подчиненный для репликации. Настройка репликации была в порядке. Мой вопрос о том, чтобы сделать снимки этих томов. Я заметил, что таблицы должны быть заблокированы для процесса снимка, который может причинить неудобства пользователям. Итак, моя идея - оставить экземпляр «Мастер» в покое и сделать снимок экземпляра, выступающего в роли раба. Это хорошая идея? Есть ли кто-нибудь с подобной настройкой и может направить меня в правильном направлении?

Кроме того, для создания снимка ведомого экземпляра потребуется блокировка таблиц. Означает ли это, что репликация сломается?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 03 января 2012

Хотя при запуске моментального снимка рекомендуется заблокировать базу данных и заморозить файловую систему, фактический вызов API для создания моментального снимка занимает доли секунды, поэтому база данных и файловая система не блокируются / не блокируютсяна долго.

Тем не менее, есть пара других соображений, которые вы не упомянули:

  1. Когда вы пытаетесь создать блокировку для базы данных, может потребоватьсядождитесь завершения других операторов, прежде чем будет предоставлена ​​блокировка.В течение этого времени ваша ожидающая блокировка может еще больше подождать, пока вы не получите и не снимете блокировку.Это может вызвать прерывания в потоке операторов в производственной базе данных.

  2. После того, как вы инициируете создание снимка, ваше приложение / база данных могут свободно использовать файловую систему на томе,но если у вас есть много записей, вы можете испытать высокий iowait, иногда достаточно, чтобы создать заметное замедление вашего приложения.Причина этого заключается в том, что фоновый процесс моментального снимка должен скопировать блок на S3, прежде чем он разрешит запись в этот блок на активном томе.

Я решаю первую проблему, запрашиваяблокировка и тайм-аут, если он не предоставляется быстро.Затем я немного подожду и продолжаю попытки, пока не получу блокировку.Подходящие тайм-ауты и задержка повторных попыток могут различаться для разных нагрузок на базу данных.

Я решаю вторую проблему, выполняя частые, согласованные снимки на ведомом, а не на главном, как вы предложили.Я все еще рекомендую делать случайные моментальные снимки с мастером просто для повышения его внутренней прочности (глубокое свойство EBS), но эти моментальные снимки не нужно выполнять с блокировкой или замораживанием, поскольку вы не собираетесь использовать их для резервного копирования.

Я также рекомендую использовать файловую систему, которая поддерживает сброс и замораживание (XFS).В противном случае вы создаете моментальный снимок заблокированных таблиц в MySQL, которые еще могут не иметь всех своих блоков на томе EBS, или другие части файловой системы могут быть изменены и несовместимы в моментальном снимке.

Если вам интересноЯ опубликовал программное обеспечение с открытым исходным кодом, которое использует лучшие рекомендации, которые я собрал, в отношении создания согласованных снимков EBS с MySQL и XFS (оба необязательных).

http://alestic.com/2009/09/ec2-consistent-snapshot

Чтобы ответить на ваш последний вопрос, блокировка таблиц в мастере не нарушит репликацию.В моем программном обеспечении для создания моментальных снимков я также очищаю таблицы с помощью блокировки чтения, чтобы убедиться, что на диске выполняется моментальный снимок, и добавляю ключевое слово «LOCAL», чтобы сброс не реплицировался ни на какие потенциальные ведомые устройства.

0 голосов
/ 20 ноября 2012

Вы определенно можете сделать снимок ведомого.

Из вашего описания не похоже, что ведомое устройство используется оперативно.

Если это так, то самый безопасныйметод получения надежного моментального снимка тома:

  1. Остановка сервера mysql на подчиненном
  2. запуск моментального снимка (либо через консоль AWS, либо из командной строки)
  3. Когда снимок будет завершен, перезапустите mysqld на подчиненном сервере
...