В наши времена облаков и Big Data трудно представить себе проект без хранилища данных. И сложностей с ним вроде бы нет — поставил, настроил и забыл. Но как быть, если хранилище живёт одновременно в нескольких дата-центрах, в нём лежит 4 петабайта данных, качество железа и сети оставляет желать лучшего, а количество системных администраторов ограничено?
В докладе я расскажу о нашем решении этой проблемы, которое мы назвали Mastermind, о том, как работает фантазия сисадминов, когда в их руки попадает удобный инструмент, и о том, с какими проблемами мы столкнулись в распределённой среде.
4. 4
Хранилище медиа-данных
Как устроить хранилище?
1.Большие DHT-кольца с репликацией:
плюсы:
•фиксированное число групп, клиент всегда знает, куда писать;
минусы:
•при расширении кольца переезд большого количества данных по сети;
•долго работает восстановление.
5. 5
Хранилище медиа-данных
Как устроить хранилище?
2.Не использовать DHT, много маленьких групп по одной
ноде, репликация между маленькими группами:
плюсы:
•много маленьких идентичных групп, легко восстанавливать;
•новые группы можно создавать в новых датацентрах и объединять в
реплики с группами в старых;
•можно освобождать старые датацентры.
минусы:
•клиент не знает ничего о существующих группах;
•нужно научиться управлять таким кластером.
6. 6
Mastermind
• знает обо всех группах в кластере;
• помнит историю;
• хранит особые настройки каплов и неймспейсов;
• облегчает админам управление кластером:
o добавление новых групп;
o восстановление сломанных групп;
o перенос группы с одной машины на другую;
o синхронизация реплик друг с другом.
8. 8
Mastermind
Неймспейсы:
-нужны для физического и логического разделения данных
различных проектов;
-позволяют иметь отдельные настройки (количество групп в
капле, ключи авторизации, настройки политики записи
данных).
9. 9
Mastermind
Балансировка групп учитывает:
-свободное место на дисках;
-загрузку ЦП ноды;
-IOPS дисков;
-загрузку сетевого интерфейса;
-временно замороженные каплы.
Каждой группе присваивается вес, который клиент может
использовать для балансировки записи.
10. 10
Mastermind
История групп:
-на каких нодах жила группа;
-в каких каплах она была участником.
История позволяет:
-автоматизировать управление группой;
-обнаруживать ошибки настройки.
14. 14
Mastermind: как это работает?
Зачем нам Cocaine?
•решает все инфраструктурные задачи приложения
o деплой;
o мониторинг работоспособности приложения;
o горизонтальное масштабирование.
Как сделать python-приложение облачным:
•взять cocaine-framework-python;
•создать объект Worker и определить его API;
•запустить Worker.
15. 15
Mastermind + Cocaine
Нужно ли платить за Cocaine?
•приложение должно слать heartbeat-запросы в облако;
•приложение должно обрабатывать ответы на heartbeat-
запросы.
Все это делает Cocaine Python Framework:
•один процесс на Tornado;
•нельзя блокировать главный поток надолго.
16. 16
Mastermind + Cocaine
Облако => неконтролируемое количество процессов:
•несколько процессов mastermind в разных датацентрах;
•несколько процессов mastermind на одной ноде.
Традиционные вопросы:
•чтение данных;
•запись данных:
o обновление в рамках одного процесса (threading.Lock);
o последовательное чтение и обновление;
o обновление с помощью распределенных блокировок
(ZooKeeper).
17. 17
Mastermind
Какие действия администратора можно оптимизировать:
•восстановление данных группы из реплики;
•переезд группы с одной физической машины на другую;
•синхронизация реплик друг с другом.
Одна общая задача – запуск команд на машинах хранилища.
18. 18
Mastermind Minion
Запускает локальные команды на машинах с данными.
•работает на Tornado;
•знает о статусе запущенных команд;
•читает вывод команд и умеет его парсить;
•предоставляет небольшое json-API, которое использует
mastermind:
o запустить команду;
o получить статус команды;
o получить список всех команд.
20. 20
Mastermind
Очередь комплексных задач хранилища:
•задача – набор заданий, которые выполняются строго
последовательно;
•список задач хранится в метабазе во вторичных индексах;
•только один процесс mastermind должен иметь доступ к
изменению списка задач в один момент времени –
распределенная блокировка.