распределенное файловое хранилище (nginx, zfs, perl)....

67
Распределенное файловое хранилище (Nginx, Perl, ZFS) Mons Anderson Олег Мамонтов

Upload: rit2011

Post on 04-Dec-2014

1.921 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

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

Распределенноефайловоехранилище(Nginx, Perl, ZFS)

Mons AndersonОлег Мамонтов

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

Mons AndersonОлег Мамонтов

NAS, SAN or custom?

SAN: FC/iSCSINAS: NFS/CIFS/...Custom: *

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

Mons AndersonОлег Мамонтов

Что нам нужно?

– отдавать данные– по протоколу HTTP

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

Mons AndersonОлег Мамонтов

HTTP это nginx ;)

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

Mons AndersonОлег Мамонтов

Что нам нужно?

User → nginx → SAN ?User → nginx → NAS ?User → nginx → nginx ?

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

Mons AndersonОлег Мамонтов

Стоимость решений

Nginx: $NAS: $$SAN: $$$$$$$

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

Mons AndersonОлег Мамонтов

Наше хранилище

8 U, 24Tb4 x ( 2U, 6Tb ( 2+10 Tb raw )

4 x redundancyfor each file

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

Mons AndersonОлег Мамонтов

Что нам нужно от хранилища?

CRUD!(Create, Read, Update, Delete )

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

Mons AndersonОлег Мамонтов

Что нам нужно от хранилища?

Read → HTTPC, U, D → ?

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

Mons AndersonОлег Мамонтов

Что нам нужно от хранилища?

Read → HTTPC, U, D → HTTP!

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

Mons AndersonОлег Мамонтов

WebDAV

– Простой– Прозрачный– Поддерживаемый в nginx*– Легко реализуемый

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

Mons AndersonОлег Мамонтов

* WebDAV + ACL

Patch:– X-ACL: 0644– X-Time: 1234567890

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

Mons AndersonОлег Мамонтов

Step by step: Front

nginx

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

Mons AndersonОлег Мамонтов

nginx

Front

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

Mons AndersonОлег Мамонтов

Front

nginx

nginxC

AR

P

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

Mons AndersonОлег Мамонтов

Front

nginx

nginxC

AR

P

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

Mons AndersonОлег Мамонтов

Storage

storageN/2

storageN/2

N Tb =

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

Mons AndersonОлег Мамонтов

Storage

storage

storage

N Tb

Front hash

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

Mons AndersonОлег Мамонтов

Storage

storage

storage

N Tb

Front hash

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

Mons AndersonОлег Мамонтов

storage

storage

Storage

storage

storage

Front hash

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

Mons AndersonОлег Мамонтов

storage

storage

Storage

storage

storage

Front hash

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

Mons AndersonОлег Мамонтов

storage

storage

Resizer

storageimage_filter()

storageimage_filter()

Front hash

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

Mons AndersonОлег Мамонтов

storage

storage

Resizer

storageimage_filter()

storageimage_filter()

Front hashLowCPU

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

Mons AndersonОлег Мамонтов

storage

storage

Resizer

storage

storage

FrontResize

ResizeResize

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

Mons AndersonОлег Мамонтов

storage

storage

Hashing

storage

storage

Front HashResize

ResizeResize ?

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

Mons AndersonОлег Мамонтов

storage

storage

Hashing

storage

storage

ResizeResize

ResizeScaleHash(time,id)

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

Mons AndersonОлег Мамонтов

Hashing

URL: http://…/ObjectIDObjectID = (xxx)-(xxx)-…

ID Time

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

Mons AndersonОлег Мамонтов

Hashinga

bdc

0x00

10

0x00

FF

0x02

FF

0x0F

FF Timeline

e

past upgrade over futurestart

0x00

00

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

Mons AndersonОлег Мамонтов

Hashing

TimeHash(Time) {0x0000 - 0x00FF � [ a, b ]0x00FF - 0x02FF � [ a, c, d ]0x02FF - 0x0FFF � [ c, d ]0x0FFF - 0xFFFF � [ f ]

} � groups

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

Mons AndersonОлег Мамонтов

Hashing

IDHash(ID, groups) � group

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

Mons AndersonОлег Мамонтов

Hashing

TimeHash(const Time) = constIDHash(const ID, groups) = const

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

Mons AndersonОлег Мамонтов

Access Control

ACLDstorage

storagegroup ACLD

DB

ID

Perl:- AnyEvent::HTTPD- AnyEvent::HTTP- AnyEvent::DBI

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

Mons AndersonОлег Мамонтов

Access Control: Public object

→ GET /XXXPerl handler (check perms)

← 200 OK

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

Mons AndersonОлег Мамонтов

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

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

Mons AndersonОлег Мамонтов

Front

Result?

Front Resize Storage ACL

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

Mons AndersonОлег Мамонтов

Front

2+2=4, 2+2=4, 2+2=4, …

Front Resize Storage ACL!CPU

Cache?

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

Mons AndersonОлег Мамонтов

Front

Cache…

Front Cache Resize Storage ACL

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

Mons AndersonОлег Мамонтов

Front

Cache is a problem :(

Front Cache Resize Storage ACL

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

Mons AndersonОлег Мамонтов

/cacheproxy://resize

/source/?q=/i/AxB

/iproxy://store

resize()

/internal200 OK

/iproxy:

//storage

/i/AxB

/iproxy://cache

/i/AxB /sourcehandler()

XAccel: /cache/i/AxB+(mtime:ctime:status)

/i/AxB+

/source/?q=/i/AxB

cachestore

200 OK HIT

/sourcehandler()

/source/?q=/i/AxB+

/source/?q=/i/AxB+

XAccel: /int

200 OK200 OK200 OK

Front Cache Resize Storage ACLD

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

Mons AndersonОлег Мамонтов

Front

Combine?

Front Cache Resize Storage ACL

MEM CPU HDD

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

Mons AndersonОлег Мамонтов

Front

Combined! Money are saved :)

Front Cache Resize Storage ACL

Deployed on same hosts

Full resource consumption

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

Mons AndersonОлег Мамонтов

Front

Combined, but scalable!

Front Cache Resize Storage ACL

Cachecluster

Cache Resize Storage+

MEM+

CPU+

HDD

Resizecluster

Storagecluster

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

Mons AndersonОлег Мамонтов

Create, Update, Delete?Storage group

storage

storage

PUTDELETEOPTIONS

GET

GET

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

Mons AndersonОлег Мамонтов

Temporary lossStorage group

storage

storage

PUTDELETEOPTIONS

GET

GET

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

Mons AndersonОлег Мамонтов

Flashing errorStorage group

storage

storage

GET

GET

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

Mons AndersonОлег Мамонтов

No file? Ask a friend!Storage group

storage

storage

GET

GET

404fallback proxy_pass

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

Mons AndersonОлег Мамонтов

404 Fallback: avoiding recursionStorage group

storage

storage

GET ask next…

unlessasked

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

Mons AndersonОлег Мамонтов

404 FallbackStorage group

storage

storage

Just...

proxy_next_upstream http_404

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

Mons AndersonОлег Мамонтов

Again about PUTStorage group

storage

storage

PUT

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

Mons AndersonОлег Мамонтов

How about single PUT?Storage group

storage

storage

PUTDELETEOPTIONS

ZFS«replication»

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

Mons AndersonОлег Мамонтов

Приоритеты выбора решения● Надежность / избыточность хранения

● Производительность чтения и записи

● Возможность распределения нагрузки

● Потенциальная масштабируемость

● Стандартные аппаратные компоненты

● Простота в настройке и обслуживании

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

Mons AndersonОлег Мамонтов

Традиционная работа с дискомФайловая система

Файловая система

Менеджер томов

RAID контроллер

Дисковые устройства

Имя <=> объект (inode)

объект <=> LBA тома

LBA тома <=> LBA RAID

LBA RAID <=> LBA диска

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

Mons AndersonОлег Мамонтов

Rampant layering violation ;)

Файловая система (zfs)

Модель агрегации (zpool)

Дисковые устройства

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

Mons AndersonОлег Мамонтов

stripe / mirror / raidz / ?

stripe – быстро, дешево, ненадежно

mirror – быстро, надежно, дорого

raidz – относительно надежно, недорого, медленно :(

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

Mons AndersonОлег Мамонтов

Универсального решения нет :(

Конфигурация Объем, 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

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

Mons AndersonОлег Мамонтов

Наше хранилище — 6TB / 2U2U: 2 x 500MB + 10 x 1TB, SATA-2

mirror raidz1 raidz1 raidz1

stripe

spare

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

Mons AndersonОлег Мамонтов

Будущее уже наступило!

snapshot

мгновенный снимок

(cow - быстро, дешево)

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

Mons AndersonОлег Мамонтов

Будущее уже наступило!

rollback

откат файловой системы

на заданный снимок

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

Mons AndersonОлег Мамонтов

Будущее уже наступило!

clone

“альтернативная реальность”

(ветка из снимка)

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

Mons AndersonОлег Мамонтов

Будущее уже наступило!

send

дамп снимка

(полный или разностный)

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

Mons AndersonОлег Мамонтов

Будущее уже наступило!

receive

воссоздание

снимка из дампа

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

Mons AndersonОлег Мамонтов

“Почти” репликация1. Создание мгновенного снимка (snapshot)2. Получение инкрементального дампа (send)3. Пересылка дампа на целевую машину (socketpipe)4. Восстановление дампа на целевой машине (receive)5. Создание клона файловой системы (clone)6. Переустановка символической ссылки (link -fhs)7. sleep && goto п.1;

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

Mons AndersonОлег Мамонтов

Неочевидные нюансы

Зачем нужны клоны и символические ссылки?

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

Mons AndersonОлег Мамонтов

Неочевидные нюансы

Удаление старыхснимков и клонов

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

Mons AndersonОлег Мамонтов

Неочевидные нюансы

● Минимизация лага репликации

● Мониторинг актуальности

● Уникальные имена файлов при обновлениях

● Двухуровневое кеширование

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

Mons AndersonОлег Мамонтов

© 2011Mons Anderson <[email protected]>

Олег Мамонтов <[email protected]> Рамблер Интернет Холдинг

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

Mons AndersonОлег Мамонтов

?