Поскольку в нашей стратегии резервного копирования мы полагаемся на ручное резервное копирование RDS Postgresql, мы столкнулись с проблемой, связанной с возможным простоем экземпляра RDS (одна зона доступности) во время создания моментального снимка. Согласно AWS:
Создание этого моментального снимка БД в инстансе БД в одной зоне доступности приводит к кратковременной приостановке ввода-вывода, которая может длиться от нескольких секунд до нескольких минут, в зависимости от размера и класса вашего инстанса БД.
что на самом деле не совсем понятно, как мы можем быть уверены, что ввод-вывод экземпляра БД работает нормально во время периода моментальных снимков, как если бы БД не работала на короткий период, мы хотели бы остановить наш соответствующий веб-сервер или вывести его из балансировщик нагрузки, чтобы гарантировать отсутствие прерывания соединения со стороны клиента.
Что заставило нас задуматься:
Действительно ли у БД есть простои во время снэпшота, AWS просто говорит о «приостановке ввода-вывода» и «задержках»? Я где-то читал, что время простоя длится короткий период (от нескольких секунд до минуты) только во время инициализации снимка, можем ли мы узнать, прошло ли это время простоя и готов ли экземпляр БД к работе (пока его снимок еще создается)?
Каковы общие рекомендации по устранению таких приостановок ввода-вывода? Кажется, это случается даже с автоматическим резервным копированием, означает ли это, что сайт может простаивать каждый день, когда выполняется создание моментального снимка БД?
Ответ приходит от понимания того, как работает моментальный снимок.
В начале моментального снимка всем приложениям отправляется сообщение (команда), чтобы они пришли в согласованное состояние и сбросили необходимые данные на диск.
Продолжительность этой очистки зависит от того, сколько данных находится в памяти, в каком состоянии находятся данные и сколько времени требуется для записи данных на диск.
После того, как каждое приложение, поддерживающее моментальный снимок, завершает свою подготовку к замораживанию, процесс моментального снимка затем привязывает файловые системы, что означает, что если в какие-либо дополнительные блоки данных записываются, сначала делается копия для процесса резервного копирования (COW - Копирование при записи). Затем каждому приложению отправляется сообщение / команда размораживания (возобновления).
Для малоиспользуемой базы данных процесс замораживания / размораживания может занять всего несколько сотен миллисекунд. Для большой базы данных с ГБ памяти, которую необходимо сбросить на диск, потребуется несколько секунд.
Во время цикла замораживания / оттаивания дисковый ввод-вывод для запросов новых пользователей приостанавливается. База данных все еще работает, но все запросы будут приостановлены, пока диски / файловые системы синхронизируются. Все возобновится с получением сообщения о таянии.
Для баз данных Master-Slave это не влияет на master. Снимок будет сделан на ведомом устройстве. Это одна из замечательных функций AWS RDS.