LVM+MongoDB. Снижение скорости создания резервной копии
До недавнего времени мы делали резервные копии в монго, архивируя снимок LVM на скрытом ВТОРОМ сервере с RAID10 на дисках SAS.
В настоящее время операция по созданию моментального снимка с тома с 500 ГБ данных на нем занимает много времени.
Конечный архив составляет около 100 Гб, а после создания первых 35 Гб в течение 30 минут скорость диска невероятно падает. До момента, когда архив достигал 52 Гб, он работал более 6 часов. Я знаю, что создание снимка LVM во время активного ввода-вывода на главном томе может замедлить работу диска, но не могу представить, что это может замедлить его в десятки раз!
Сейчас я думаю, как улучшить скорость резервного копирования.
В качестве потенциального решения я вижу способ, которым мы останавливаем mongodb на сервере резервного копирования и запускаем снимок LVM с "автономного" сервера / тома. Затем включите его снова и выполните повторную синхронизацию с основным набором реплик.
Но этот способ может вызвать проблему, когда php-mongo-driver не реагирует должным образом на изменения списка серверов в replicaSet. И нам нужно перезапустить php-fpm на всех подключенных клиентах, чтобы исправить это и заставить php быстро увидеть новые изменения.
Не могли бы вы порекомендовать нам лучшие способы создания резервных копий mongo на данных 500 Гб + при активной нагрузке ввода-вывода.
Заранее спасибо!
1 ответ
Что касается замедления моментального снимка LVM, если вы делаете много случайно распределенных записей по большому количеству файлов, что было бы, если бы вы вставляли / обновляли документы в большом наборе данных MongoDB, тогда LVM действительно может не справиться. Восстановление / сжатие в базе данных (или повторная синхронизация узла с нуля) может помочь с точки зрения количества измененных файлов (сжатие будет "дефрагментировать" данные в файлах, восстановление / повторная синхронизация перезапишет данные с нуля), но это может быть только постепенным улучшением.
С точки зрения предложенного вами решения оно звучит как хорошее, но я бы посоветовал вам сделать резервный узел из скрытого узла, после чего вы можете устранить проблему с драйвером и внести изменения. Драйверы используют команду isMaster для определения макета набора, и когда узел скрыт, он не возвращается этой командой.
Затем вы можете завершить работу узла, сделать снимок и перезапустить его после завершения, чтобы позволить ему выполнить повторную синхронизацию.