Влияние сетевого цикла на наши процессы MongoDB и как мы отреагировали
Во время сетевого цикла, поскольку наши процессы MongoDB не могли нормально подключиться, каждый из них помечал все связанные с ним процессы как отключенные. То есть каждый процесс mongoS помечал все связанные с ним процессы mongoD как автономные, а каждый процесс mongoD помечал связанные с ним элементы набора реплик как автономные. Однако даже после того, как Rackspace восстановил сетевое подключение к нашим физическим серверам, ни процессы mongoS, ни mongoD не восстановили все соединения с другими процессами, которые были помечены как автономные.
На этом этапе, чтобы помочь нашей команде администраторов баз данных (DBA) Rackspace в усилиях по исправлению ситуации, команды Braze DevOps начали быструю отладку и тестирование методов восстановления этого подключения. Наше расследование показало, что единственным доступным вариантом был перезапуск каждого из почти 16 000 процессов mongoD и более 6 000 mongoS в их виртуализированных контейнерах. Учитывая масштабы этого предприятия и тот факт, что не существовало средств автоматизации, позволяющих быстро перезапустить такое количество контейнеров, инженеры Rackspace во время инцидента написали новый код, чтобы создать возможность автоматизации на лету.
К сожалению, по мере ускорения процесса перезапуска в системе системы доменных имен (DNS) возникла еще одна проблема. Когда процессы mongoS и mongoD подключаются к сети, они запрашивают информацию у преобразователей DNS в процессе, известном как поиск DNS. Из-за непрерывного поиска DNS, обусловленного скоростью перезапусков, DNS-серверы подвергались большой нагрузке, что приводило к тайм-аутам подключения на уровнях mongoS при повторном подключении к процессам mongoD. Чтобы справиться с этой растущей нагрузкой, наша команда Rackspace увеличила мощность ЦП DNS, но затем была вынуждена перезапустить уровень mongoS во второй раз, чтобы создать работоспособные соединения между каждым mongoS и связанными с ним процессами mongoD.
Около 17:05 UTC процесс перезапуска позволил некоторым кластерам начать возвращаться в режим онлайн. Когда производительность базы данных восстановилась, а кластеры стабилизировались, Braze продолжил наращивать мощности обработки данных и отправки сообщений; однако эти усилия осложнялись огромным отставанием в работе из-за предшествующего отсутствия.
Учитывая масштаб и сложность нашей среды баз данных Rackspace, которая состоит из сотен отдельных баз данных, продолжительность простоя и полученный объем нашего невыполненного журнала (представляющего миллиарды сообщений и миллиарды принятых точек данных), процесс восстановления, требуемый в - мгновенная адаптация наших обычных процессов восстановления. Это было необходимо для того, чтобы ресурсы базы данных оставались в балансе с текущими потребностями в обработке, включая введение огромного количества общих вычислительных мощностей.
Однако при этом Braze достиг ограничения AWS на количество виртуальных процессоров, которые мы могли предоставить, что лишило нас возможности добавлять какие-либо дополнительные мощности сервера. Команда Braze быстро обсудила это обстоятельство с нашей командой AWS и получила повышение, что позволило нашим инженерам масштабировать вычислительную мощность нашего сервера до рекордного уровня, который более чем на 50 % превышал нашу предыдущую максимальную мощность, достигнутую на Black Пятница 2023.
К 20:30 UTC все наши кластеры в США, за исключением US 01, US 03 и US 08, завершили обработку своих невыполненных задач, а оставшиеся кластеры обрабатывали с максимальной скоростью или выше, начиная со дня, предшествовавшего инциденту. В течение нескольких часов все кластеры были снова переведены в режим обработки в реальном времени, и мы объявили об устранении инцидента.