• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 

распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2

on

  • 1,214 views

 

Statistics

Views

Total Views
1,214
Views on SlideShare
1,214
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2 распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2 Presentation Transcript

    • Распределенное файловое хранилище (Nginx, Perl, ZFS) Mons Anderson Олег Мамонтов
    • NAS, SAN or custom? SAN: FC/iSCSI NAS: NFS/CIFS/... Custom: *
    • Что нам нужно? – отдавать данные – по протоколу HTTP
    • HTTP это nginx ;)
    • Что нам нужно? User -> nginx -> SAN ? User -> nginx -> NAS ? User -> nginx -> nginx ?
    • Стоимость решений Nginx: $ NAS: $$ SAN: $$$$$$$
    • Наше хранилище 8 U, 24Tb 4 x ( 2U, 6Tb ( 2+10 Tb raw ) 4 x redundancy for each file
    • Что нам нужно от хранилища? CRUD! ( C reate, R ead, U pdate, D elete )
    • Что нам нужно от хранилища? Read -> HTTP C, U, D -> ?
    • Что нам нужно от хранилища? Read -> HTTP C, U, D -> HTTP!
    • WebDAV – Простой – Прозрачный – Поддерживаемый в nginx* – Легко реализуемый
    • * WebDAV + ACL Patch: – X-ACL: 0644 – X-Time: 1234567890
    • Step by step: Front
    • Front
    • Front
    • Front
    • Storage N Tb = storage N/2 storage N/2
    • Storage N Tb hash storage storage
    • Storage N Tb hash storage storage
    • Storage hash storage storage storage storage
    • Storage hash storage storage storage storage
    • Resizer hash storage storage storage image_filter() storage image_filter()
    • Resizer hash Low CPU storage storage storage image_filter() storage image_filter()
    • Resizer storage storage storage storage Resize Resize Resize
    • Hashing ? Hash storage storage storage storage Resize Resize Resize
    • Hashing ScaleHash(time,id) storage storage storage storage Resize Resize Resize
    • Hashing URL: http://…/ObjectID ObjectID = (xxx)-(xxx)-… ID Time
    • Hashing Timeline past upgrade over future start a b d c 0x0010 0x00FF 0x02FF 0x0FFF e 0x0000
    • Hashing TimeHash(Time) { 0x0000 - 0x00FF -> [ a, b ] 0x00FF - 0x02FF -> [ a, c, d ] 0x02FF - 0x0FFF -> [ c, d ] 0x0FFF - 0xFFFF -> [ f ] } -> groups
    • Hashing IDHash(ID, groups) -> group
    • Hashing TimeHash(const Time) = const IDHash(const ID, groups) = const
    • Access Control DB Perl: - AnyEvent::HTTPD - AnyEvent::HTTP - AnyEvent::DBI storage storage group
    • Access Control: Public object -> GET /XXX Perl handler (check perms) ← 200 OK
    • Access Control: Protected object -> GET /XXX -> Perl handler ← X-Accel-Redirect: /access/... -> GET /access/... -> proxy_pass http://ACLD ← X-Accel-Redirect: /int/.. -> GET /int/.. ← ← 200 OK
    • Result?
    • 2+2=4, 2+2=4, 2+2=4, … ! CPU Cache?
    • Cache…
    • Cache is a problem :(
    • /cache proxy: //resize /source/ ?q=/i/AxB /i proxy://store resize() /internal 200 OK /i proxy: //storage /i/AxB /i proxy: //cache /i/AxB /source handler() XAccel: /cache/i/AxB+ (mtime:ctime:status) /i/AxB+ /source/ ?q=/i/AxB cache store 200 OK HIT /source handler() /source/ ?q=/i/AxB+ /source/ ?q=/i/AxB+ XAccel: /int 200 OK 200 OK 200 OK
    • Combine? MEM CPU HDD
    • Combined! Money are saved :) Deployed on same hosts Full resource consumption
    • Combined, but scalable! Cache cluster Resize cluster Storage cluster + MEM + CPU + HDD
    • Create, Update, Delete? PUT DELETE OPTIONS GET GET storage storage
    • Temporary loss PUT DELETE OPTIONS GET GET storage storage
    • Flashing error GET GET storage storage
    • No file? Ask a friend! GET GET 404 fallback proxy_pass storage storage
    • 404 Fallback: avoiding recursion GET ask next… unless asked storage storage
    • 404 Fallback Just... proxy_next_upstream http_404 storage storage
    • Again about PUT PUT storage storage
    • How about single PUT? PUT DELETE OPTIONS ZFS «replication» storage storage
    • Приоритеты выбора решения
      • Надежность / избыточность хранения
      • Производительность чтения и записи
      • Возможность распределения нагрузки
      • Потенциальная масштабируемость
      • Стандартные аппаратные компоненты
      • Простота в настройке и обслуживании
    • Традиционная работа с диском Имя <=> объект (inode) объект <=> LBA тома LBA тома <=> LBA RAID LBA RAID <=> LBA диска Файловая система Файловая система Менеджер томов RAID контроллер Дисковые устройства
    • Rampant layering violation ;) Файловая система (zfs) Модель агрегации (zpool) Дисковые устройства
    • stripe / mirror / raidz / ? stripe – быстро , дешево , ненадежно mirror – быстро , надежно , дорого raidz – относительно надежно , недорого , медленно :(
    • Универсального решения нет :( Конфигурация Объем, GB IOPS stripe 1 x 100 10000 20000 mirror 2 x 50 5000 20000 raidz 1 x ( 99 + 1 ) 9900 200 raidz 5 x ( 19 + 1 ) 9500 1000 raidz 33 x ( 2 + 1 ) 6600 6600 Дано: 100 дисков по 100GB, 200 IOPS
    • Наше хранилище — 6TB / 2U mirror raidz1 raidz1 raidz1 stripe spare 2U: 2 x 500MB + 10 x 1TB, SATA-2
    • Будущее уже наступило! snapshot – мгновенный снимок ( cow - быстро, дешево ) rollback – откат файловой системы на заданный снимок clone – “альтернативная реальность” ( ветка из снимка ) send – дамп снимка ( полный или разностный) receive – воссоздание снимка из дампа
    • “ Почти” репликация
      • Создание мгновенного снимка ( snapshot )
      • Получение инкрементального дампа ( send )
      • Пересылка дампа на целевую машину ( socketpipe )
      • Восстановление дампа на целевой машине ( receive )
      • Создание клона файловой системы ( clone )
      • Переустановка символической ссылки ( link -fhs )
      • sleep && goto п.1;
    • Неочевидные нюансы
      • Зачем нужны клоны и символические ссылки?
      • Удаление старых снимков и клонов
      • Минимизация лага репликации
      • Мониторинг актуальности
      • Уникальные имена файлов при обновлениях
      • Двухуровневое кеширование
    • © 2011 Mons Anderson <mons@cpan.org> Олег Мамонтов <lonerr@cpan.org> Рамблер Интернет Холдинг
    • ?