* Исторический экскурс, введение понятия спота, принцип функционального деления баз на группы (споты / не споты), шардирование как способ масштабирования спотов.
* Возникновение второго датацентра на другом континенте, создание самодельной репликации, позволяющей работать по схеме много -> много, краткая схема (структура спотов, схема репликации, служебные базы - очереди, репликация, мониторинг), плюсы и минусы этого решения, инструменты диагностики.
* Альтеры шадрированых спотов - первый вариант утилиты для этой задачи: схема его работы и возникшие проблемы; вторая версия утилиты - улучшения, а также, что осталось неисправленным.
* “Температура” спота, трудности её определения, проблемы, возникающие из-за его “перегрева”, наш способ решения и возникновение проекта “кладбище”.
* Деплой и около - почему мы используем MySQL в chroot, как мы его собираем и как деплоим.
* Бэкапы спотовых данных - первоначальное решение (ленточные хранилища), работа над ошибками, текущая схема.
* Query sampling: проект Minba.
26. • RTT ~ 120 ms
• connect ~ 0.6 s
Badoo в 2008
РЕПЛИКАЦИЯ
27. A. Проблема внешняя:
– Запрос информации с удаленной площадки
B. Проблема внутренняя:
– Скрипты, работающие со всеми пользователями,
работают слишком долго
Почему это проблема ?
РЕПЛИКАЦИЯ
41. Плюсы и минусы нашего решения
Минусы:
• Репликационный лаг от 10 сек до 1 мин
• Диагностика и исправление проблем подразумевает
наличие глубоких знаний о нашей системе
РЕПЛИКАЦИЯ
42. Плюсы и минусы нашего решения
Минусы:
• Репликационный лаг от 10 сек до 1 мин
• Диагностика и исправление проблем подразумевает
наличие глубоких знаний о нашей системе
Плюсы:
• Репликация “много”=>”много”
• Проигрывание репликации в несколько потоков
• Инструменты для восстановления данных на реплике (dbb)
РЕПЛИКАЦИЯ
47. В споте этих изменений нет!
DDL
Репликационная пара
48. В споте этих изменений нет!
До релиза задачи схема должна
быть изменена
DDL
49. Вот так выглядит флоу
• Разработчик ставит тикет на DDL (ALTER request)
• DBA делает ревью DDL
• Выполняется ALTER request на всём кластере
• Разработчик выкатывает фичу в продакшн
DDL
51. Результат выполнения DDL
• Скрипт отправляет письмо о завершении и его
статусе
• DBA убеждается что ALTER успешно выполнен и
закрывает тикет
• Разработчик может релизить свою задачу
(договоренность)
DDL
52. • Разработчиков много => задач на DDL много
• “Легкие” DDL можно сгруппировать, но что делать с
остальными?
• Нужна очередь
Растущие запросы на DDL
DDL
55. Наш кластер
• ~ 100 dbs
• Железо не гомогенное (серверы покупались в разное
время)
• Разное соотношение активных/неактивных пользователей
Устанавливаем новый сервер => появляются пользователи
На сколько хватит сервера?
РАСПРЕДЕЛЕНИЕ НАГРУЗКИ
61. Проект “кладбище”
• Миграция осуществляется в фоновом режиме
• DBA активного участия не принимает
• Освободилось до 25% ресурсов основного кластера
РАСПРЕДЕЛЕНИЕ НАГРУЗКИ
63. Бэкап
• Общее количество спотов - 360 000
• Количество таблиц в споте > 80
• Общий объем данных > 190 Тб
Как это бэкапить?
БЭКАП
64. Условия успешного бэкапа
• Консистентность данных важна в
пределах спота
• Все таблицы в InnoDB
• Маленький размер спота
• DDL происходит по расписанию
mysqldump
БЭКАП