Как упростить жизнь системному администратору с помощью Python – Андрей Василенков, Яндекс

1,109 views
989 views

Published on

В наши времена облаков и Big Data трудно представить себе проект без хранилища данных. И сложностей с ним вроде бы нет — поставил, настроил и забыл. Но как быть, если хранилище живёт одновременно в нескольких дата-центрах, в нём лежит 4 петабайта данных, качество железа и сети оставляет желать лучшего, а количество системных администраторов ограничено?

В докладе я расскажу о нашем решении этой проблемы, которое мы назвали Mastermind, о том, как работает фантазия сисадминов, когда в их руки попадает удобный инструмент, и о том, с какими проблемами мы столкнулись в распределённой среде.

Published in: Internet
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,109
On SlideShare
0
From Embeds
0
Number of Embeds
341
Actions
Shares
0
Downloads
17
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • DHT-кольца?
  • Структура каплов – что такое каплы?
  • Таблицу маршрутизации можно кэшировать
  • Cocaine – разрабатываются свои средства синхронизации.
  • Как упростить жизнь системному администратору с помощью Python – Андрей Василенков, Яндекс

    1. 1. 1
    2. 2. Андрей Василенков Как упростить жизнь системному администратору с помощью Python Разработчик
    3. 3. 3 Хранилище медиа-данных • 4 Петабайта данных; • ~5K rps; • 4000 дисков; • 150 серверов.
    4. 4. 4 Хранилище медиа-данных Как устроить хранилище? 1.Большие DHT-кольца с репликацией: плюсы: •фиксированное число групп, клиент всегда знает, куда писать; минусы: •при расширении кольца переезд большого количества данных по сети; •долго работает восстановление.
    5. 5. 5 Хранилище медиа-данных Как устроить хранилище? 2.Не использовать DHT, много маленьких групп по одной ноде, репликация между маленькими группами: плюсы: •много маленьких идентичных групп, легко восстанавливать; •новые группы можно создавать в новых датацентрах и объединять в реплики с группами в старых; •можно освобождать старые датацентры. минусы: •клиент не знает ничего о существующих группах; •нужно научиться управлять таким кластером.
    6. 6. 6 Mastermind • знает обо всех группах в кластере; • помнит историю; • хранит особые настройки каплов и неймспейсов; • облегчает админам управление кластером: o добавление новых групп; o восстановление сломанных групп; o перенос группы с одной машины на другую; o синхронизация реплик друг с другом.
    7. 7. 7 Mastermind Состояние кластера: •доступность групп; •состояние групп; •структура каплов; •настройки каплов; •настройки неймспейсов; •история групп. DC 1 DC 2 1.1.1.1 … :1001 :1024 1.1.1.2 … :1001 :1024 2.2.1.2 … :1001 :1024 MastermindMastermind ping stat read_data(m etakey) 1.1.10.10 :1001 2.2.10.10 :1001:1001
    8. 8. 8 Mastermind Неймспейсы: -нужны для физического и логического разделения данных различных проектов; -позволяют иметь отдельные настройки (количество групп в капле, ключи авторизации, настройки политики записи данных).
    9. 9. 9 Mastermind Балансировка групп учитывает: -свободное место на дисках; -загрузку ЦП ноды; -IOPS дисков; -загрузку сетевого интерфейса; -временно замороженные каплы. Каждой группе присваивается вес, который клиент может использовать для балансировки записи.
    10. 10. 10 Mastermind История групп: -на каких нодах жила группа; -в каких каплах она была участником. История позволяет: -автоматизировать управление группой; -обнаруживать ошибки настройки.
    11. 11. 11 Mastermind: как это работает?
    12. 12. 12 Mastermind: как это работает?
    13. 13. 13 Mastermind: как это работает? * * изображение взято с сайта http://lurkmore.to/WTF
    14. 14. 14 Mastermind: как это работает? Зачем нам Cocaine? •решает все инфраструктурные задачи приложения o деплой; o мониторинг работоспособности приложения; o горизонтальное масштабирование. Как сделать python-приложение облачным: •взять cocaine-framework-python; •создать объект Worker и определить его API; •запустить Worker.
    15. 15. 15 Mastermind + Cocaine Нужно ли платить за Cocaine? •приложение должно слать heartbeat-запросы в облако; •приложение должно обрабатывать ответы на heartbeat- запросы. Все это делает Cocaine Python Framework: •один процесс на Tornado; •нельзя блокировать главный поток надолго.
    16. 16. 16 Mastermind + Cocaine Облако => неконтролируемое количество процессов: •несколько процессов mastermind в разных датацентрах; •несколько процессов mastermind на одной ноде. Традиционные вопросы: •чтение данных; •запись данных: o обновление в рамках одного процесса (threading.Lock); o последовательное чтение и обновление; o обновление с помощью распределенных блокировок (ZooKeeper).
    17. 17. 17 Mastermind Какие действия администратора можно оптимизировать: •восстановление данных группы из реплики; •переезд группы с одной физической машины на другую; •синхронизация реплик друг с другом. Одна общая задача – запуск команд на машинах хранилища.
    18. 18. 18 Mastermind Minion Запускает локальные команды на машинах с данными. •работает на Tornado; •знает о статусе запущенных команд; •читает вывод команд и умеет его парсить; •предоставляет небольшое json-API, которое использует mastermind: o запустить команду; o получить статус команды; o получить список всех команд.
    19. 19. 19 Mastermind Minion *Изображение взято с сайта minionslovebananas.com, персонаж из кинофильма Despicable Me 2, Universal Studios *
    20. 20. 20 Mastermind Очередь комплексных задач хранилища: •задача – набор заданий, которые выполняются строго последовательно; •список задач хранится в метабазе во вторичных индексах; •только один процесс mastermind должен иметь доступ к изменению списка задач в один момент времени – распределенная блокировка.
    21. 21. 21 Flowmastermind
    22. 22. 22 Flowmastermind
    23. 23. 23 Flowmastermind
    24. 24. 24 Flowmastermind
    25. 25. 25 Flowmastermind
    26. 26. 26 Flowmastermind
    27. 27. 27 Flowmastermind
    28. 28. 28 Flowmastermind
    29. 29. 29 Flowmastermind
    30. 30. 30 Flowmastermind
    31. 31. 31 Flowmastermind
    32. 32. 32 Flowmastermind
    33. 33. 33 Спасибо за внимание!
    34. 34. 34 Андрей Василенков https://github.com/nobodyisme/flowmastermind indigo@yandex-team.ru https://github.com/yandex https://github.com/nobodyisme/mastermind https://github.com/nobodyisme/mastermind-minion

    ×