Технический пост: падение трех гигантов
Вчера была серьезная аварийная ситуация. На восстановление ушло около 8 часов. Из-за чего?
ГолдВойс долгое время держался на трех MariaDB серверах, объединенных в Galera Cluster. Так как тут хранятся данные блокчейна, естественно таблицы были в InnoDB + партиции. Увеличение транзакций в блоках привело к той состоянии гонки, о которой было написано в прошлых постах.
На этот раз целостность базы была нарушена, запросы сбились из-за указателей и часть таблиц попали в заблокированное состояние. Первым отказала таблица пользователей, вторым следом упала таблица сессий, третьей проблемой было падение таблицы с кэшем. Это привело к чудовищным лагам и перегрузам. Процесс подвисли и как ком исчерпали сами себя. Две более слабых машины тут же упали, заявив, что не хотят синхронизироваться и запускаться из-за сбитого State в третьей машине.
Отключив весь сайт было принято снять актуальный бекап с еще стоявшего сервера и развернуть все заново. Параллельно с процессом бекапа/импорта были переработаны механизмы хранения юзеров и обновление их action_time (время последнего действия). Этот параметр необходим для разных выборок индикатора пользователей. Допустим, сегодня уже был переделан блок и снова на главной странице заработала информация с онлайном пользователей в блокчейне. Но с более сложными выборками, такими как онлайн друзей — пока, естественно, проблема.
Сервера успешно перезапущены, блоки дособраны, часть инфраструктуры изменена, нагрузки снижены, но не стоит расслабляться. Нужно отрефакторить часть методов, которые работали с прошлыми таблицами под новую структуру в redis. И продолжать оптимизацию.
PS Расширен сервер прокси-гейт изображений, теперь он сможет содержать в 2 раза больше данных. Скалировать будем при необходимости.
Спасибо за поддержку и понимание!