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