Распределенноефайловоехранилище(Nginx, Perl, ZFS)  Mons Anderson  Олег Мамонтов
NAS, SAN or custom?SAN: FC/iSCSINAS: NFS/CIFS/...Custom: *                      Mons Anderson                      Олег Ма...
Что нам нужно?– отдавать данные– по протоколу HTTP                      Mons Anderson                      Олег Мамонтов
HTTP это nginx ;)                    Mons Anderson                    Олег Мамонтов
Что нам нужно?       User → nginx → SAN ?       User → nginx → NAS ?       User → nginx → nginx ?                         ...
Стоимость решенийNginx: $NAS: $$SAN: $$$$$$$                    Mons Anderson                    Олег Мамонтов
Наше хранилище           8 U, 24Tb     4 x ( 2U, 6Tb ( 2+10 Tb raw )       4 x redundancy             for each file       ...
Что нам нужно от хранилища?            CRUD!(Create, Read, Update, Delete )                              Mons Anderson    ...
Что нам нужно от хранилища?        Read → HTTP         C, U, D → ?                              Mons Anderson             ...
Что нам нужно от хранилища?        Read → HTTP       C, U, D → HTTP!                              Mons Anderson           ...
WebDAV – Простой – Прозрачный – Поддерживаемый в nginx* – Легко реализуемый                             Mons Anderson     ...
* WebDAV + ACLPatch:– X-ACL: 0644– X-Time: 1234567890                       Mons Anderson                       Олег Мамон...
Step by step: Front                  nginx                          Mons Anderson                          Олег Мамонтов
Front        nginx                Mons Anderson                Олег Мамонтов
Front               nginx        CARP   nginx                       Mons Anderson                       Олег Мамонтов
Front               nginx        CARP   nginx                       Mons Anderson                       Олег Мамонтов
Storage               storage                 N/2      N Tb =               storage                 N/2                   ...
Storage                     N Tb                    storage     Front   hash                    storage                   ...
Storage                     N Tb                    storage     Front   hash                    storage                   ...
Storage                       storage                    storage     Front   hash                        storage          ...
Storage                       storage                    storage     Front   hash                        storage          ...
Resizer                           storage                       storage                    image_filter()     Front   hash...
Resizer                           storage                       storage     Front   hash                    image_filter()...
Resizer                         storage                      storage             Resize Front     Resize          Resize  ...
Hashing                                   storage                                storage                   Resize Front   ...
Hashing                                     storage                                  storage    Resize  Resize Resize     ...
Hashing           URL: http://…/ObjectID          ObjectID = (xxx)-(xxx)-…                    ID     Time                 ...
Hashing                          a                    b                 c                                      d          ...
HashingTimeHash(Time) {  0x0000 - 0x00FF   [   a, b ]  0x00FF - 0x02FF   [   a, c, d ]  0x02FF - 0x0FFF   [   c, d ]  0x0F...
HashingIDHash(ID, groups)   group                             Mons Anderson                             Олег Мамонтов
HashingTimeHash(const Time) = constIDHash(const ID, groups) = const                              Mons Anderson            ...
Access Control                               ID   storage                        ACLD storage  group             ACLD     ...
Access Control: Public object→ GET /XXX Perl handler (check perms)← 200 OK                                Mons Anderson   ...
Access Control: Protected object  GET /XXX    Perl handler  X-Accel-Redirect: /access/...    GET /access/...      proxy_pa...
Result?  FrontFront     Resize   Storage   ACL                             Mons Anderson                             Олег ...
2+2=4, 2+2=4, 2+2=4, …  FrontFront       !          Resize       Storage   ACL          CPU                   Cache?      ...
Cache…  FrontFront     Cache   Resize   Storage   ACL                                     Mons Anderson                   ...
Cache is a problem :(   Front Front     Cache   Resize   Storage   ACL                                      Mons Anderson ...
Front               Cache                Resize            Storage          ACLD                                 /i       ...
Combine? FrontFront    Cache   Resize   Storage   ACL         MEM      CPU      HDD                                    Mon...
Combined! Money are saved :)            Deployed on same hosts FrontFront    Cache      Resize     Storage   ACL          ...
Combined, but scalable!         Cache     Resize    Storage         cluster   cluster   cluster FrontFront    Cache     Re...
Create, Update, Delete?             Storage group    GET         storage                             PUT    GET         st...
Temporary loss             Storage group    GET          storage                             PUT    GET          storage  ...
Flashing error                 Storage group     GET            storage    GET             storage                        ...
No file? Ask a friend!               Storage group     GET          storage                               404     GET     ...
404 Fallback: avoiding recursion              Storage group   GET           storage      ask                              ...
404 Fallback  Storage group                  Just...     storage                  proxy_next_upstream                    h...
Again about PUT            Storage group               storage                            PUT               storage       ...
How about single PUT?                Storage group                   storage                                PUTZFS        ...
Приоритеты выбора решения●   Надежность / избыточность хранения●   Производительность чтения и записи●   Возможность распр...
Традиционная работа с диском      Файловая система                           Имя <=> объект (inode)      Файловая система ...
Rampant layering violation ;)           Файловая система (zfs)          Модель агрегации (zpool)            Дисковые устро...
stripe / mirror / raidz / ?stripe – быстро, дешево, ненадежноmirror – быстро, надежно, дорогоraidz – относительно надежно,...
Универсального решения нет :(           Дано: 100 дисков по 100GB, 200 IOPSКонфигурация           Объем, GB           IOPS...
Наше хранилище — 6TB / 2U2U: 2 x 500MB + 10 x 1TB, SATA-2mirror      raidz1        raidz1   raidz1   spare                ...
Будущее уже наступило!           snapshot     мгновенный снимок   (cow - быстро, дешево)                            Mons A...
Будущее уже наступило!           rollback   откат файловой системы     на заданный снимок                            Mons ...
Будущее уже наступило!            clone “альтернативная реальность”      (ветка из снимка)                               M...
Будущее уже наступило!            send         дамп снимка   (полный или разностный)                             Mons Ande...
Будущее уже наступило!           receive        воссоздание      снимка из дампа                         Mons Anderson    ...
“Почти” репликация1.   Создание мгновенного снимка (snapshot)2.   Получение инкрементального дампа (send)3.   Пересылка да...
Неочевидные нюансы      Зачем нужны клоны и     символические ссылки?                             Mons Anderson           ...
Неочевидные нюансы       Удаление старых       снимков и клонов                          Mons Anderson                    ...
Неочевидные нюансы●   Минимизация лага репликации●   Мониторинг актуальности●   Уникальные имена файлов при обновлениях●  ...
© 2011Mons Anderson <mons@cpan.org>Олег Мамонтов <lonerr@cpan.org>   Рамблер Интернет Холдинг                             ...
?    Mons Anderson    Олег Мамонтов
Upcoming SlideShare
Loading in …5
×

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

1,990 views

Published on

Published in: Technology, Business
  • Be the first to comment

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

  1. 1. Распределенноефайловоехранилище(Nginx, Perl, ZFS) Mons Anderson Олег Мамонтов
  2. 2. NAS, SAN or custom?SAN: FC/iSCSINAS: NFS/CIFS/...Custom: * Mons Anderson Олег Мамонтов
  3. 3. Что нам нужно?– отдавать данные– по протоколу HTTP Mons Anderson Олег Мамонтов
  4. 4. HTTP это nginx ;) Mons Anderson Олег Мамонтов
  5. 5. Что нам нужно? User → nginx → SAN ? User → nginx → NAS ? User → nginx → nginx ? Mons Anderson Олег Мамонтов
  6. 6. Стоимость решенийNginx: $NAS: $$SAN: $$$$$$$ Mons Anderson Олег Мамонтов
  7. 7. Наше хранилище 8 U, 24Tb 4 x ( 2U, 6Tb ( 2+10 Tb raw ) 4 x redundancy for each file Mons Anderson Олег Мамонтов
  8. 8. Что нам нужно от хранилища? CRUD!(Create, Read, Update, Delete ) Mons Anderson Олег Мамонтов
  9. 9. Что нам нужно от хранилища? Read → HTTP C, U, D → ? Mons Anderson Олег Мамонтов
  10. 10. Что нам нужно от хранилища? Read → HTTP C, U, D → HTTP! Mons Anderson Олег Мамонтов
  11. 11. WebDAV – Простой – Прозрачный – Поддерживаемый в nginx* – Легко реализуемый Mons Anderson Олег Мамонтов
  12. 12. * WebDAV + ACLPatch:– X-ACL: 0644– X-Time: 1234567890 Mons Anderson Олег Мамонтов
  13. 13. Step by step: Front nginx Mons Anderson Олег Мамонтов
  14. 14. Front nginx Mons Anderson Олег Мамонтов
  15. 15. Front nginx CARP nginx Mons Anderson Олег Мамонтов
  16. 16. Front nginx CARP nginx Mons Anderson Олег Мамонтов
  17. 17. Storage storage N/2 N Tb = storage N/2 Mons Anderson Олег Мамонтов
  18. 18. Storage N Tb storage Front hash storage Mons Anderson Олег Мамонтов
  19. 19. Storage N Tb storage Front hash storage Mons Anderson Олег Мамонтов
  20. 20. Storage storage storage Front hash storage storage Mons Anderson Олег Мамонтов
  21. 21. Storage storage storage Front hash storage storage Mons Anderson Олег Мамонтов
  22. 22. Resizer storage storage image_filter() Front hash storage storage image_filter() Mons Anderson Олег Мамонтов
  23. 23. Resizer storage storage Front hash image_filter() Low storage storage CPU image_filter() Mons Anderson Олег Мамонтов
  24. 24. Resizer storage storage Resize Front Resize Resize storage storage Mons Anderson Олег Мамонтов
  25. 25. Hashing storage storage Resize Front Hash Resize Resize ? storage storage Mons Anderson Олег Мамонтов
  26. 26. Hashing storage storage Resize Resize Resize ScaleHash(time,id) storage storage Mons Anderson Олег Мамонтов
  27. 27. Hashing URL: http://…/ObjectID ObjectID = (xxx)-(xxx)-… ID Time Mons Anderson Олег Мамонтов
  28. 28. Hashing a b c d epast start upgrade over future Timeline 0x0FFF 0x00FF 0x02FF 0x0000 0x0010 Mons Anderson Олег Мамонтов
  29. 29. HashingTimeHash(Time) { 0x0000 - 0x00FF [ a, b ] 0x00FF - 0x02FF [ a, c, d ] 0x02FF - 0x0FFF [ c, d ] 0x0FFF - 0xFFFF [ f ]} groups Mons Anderson Олег Мамонтов
  30. 30. HashingIDHash(ID, groups) group Mons Anderson Олег Мамонтов
  31. 31. HashingTimeHash(const Time) = constIDHash(const ID, groups) = const Mons Anderson Олег Мамонтов
  32. 32. Access Control ID storage ACLD storage group ACLD Perl: DB - AnyEvent::HTTPD - AnyEvent::HTTP - AnyEvent::DBI Mons Anderson Олег Мамонтов
  33. 33. Access Control: Public object→ GET /XXX Perl handler (check perms)← 200 OK Mons Anderson Олег Мамонтов
  34. 34. 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 Mons Anderson Олег Мамонтов
  35. 35. Result? FrontFront Resize Storage ACL Mons Anderson Олег Мамонтов
  36. 36. 2+2=4, 2+2=4, 2+2=4, … FrontFront ! Resize Storage ACL CPU Cache? Mons Anderson Олег Мамонтов
  37. 37. Cache… FrontFront Cache Resize Storage ACL Mons Anderson Олег Мамонтов
  38. 38. Cache is a problem :( Front Front Cache Resize Storage ACL Mons Anderson Олег Мамонтов
  39. 39. Front Cache Resize Storage ACLD /i /source/ /source /source//i/AxB /i/AxB proxy: ?q=/i/AxB handler() ?q=/i/AxB //storage XAccel: /cache/i/AxB+ (mtime:ctime:status)200 OK /i /source/ /source/ HIT /i/AxB+ proxy: ?q=/i/AxB+ ?q=/i/AxB+ //cache /source handler() XAccel: /int /cache /i proxy: proxy://store //resize resize() cache200 OK 200 OK 200 OK 200 OK /internal store Mons Anderson Олег Мамонтов
  40. 40. Combine? FrontFront Cache Resize Storage ACL MEM CPU HDD Mons Anderson Олег Мамонтов
  41. 41. Combined! Money are saved :) Deployed on same hosts FrontFront Cache Resize Storage ACL Full resource consumption Mons Anderson Олег Мамонтов
  42. 42. Combined, but scalable! Cache Resize Storage cluster cluster cluster FrontFront Cache Resize Storage ACL Cache Resize Storage + + + MEM CPU HDD Mons Anderson Олег Мамонтов
  43. 43. Create, Update, Delete? Storage group GET storage PUT GET storage DELETE OPTIONS Mons Anderson Олег Мамонтов
  44. 44. Temporary loss Storage group GET storage PUT GET storage DELETE OPTIONS Mons Anderson Олег Мамонтов
  45. 45. Flashing error Storage group GET storage GET storage Mons Anderson Олег Мамонтов
  46. 46. No file? Ask a friend! Storage group GET storage 404 GET storage fallback proxy_pass Mons Anderson Олег Мамонтов
  47. 47. 404 Fallback: avoiding recursion Storage group GET storage ask next… unless storage asked Mons Anderson Олег Мамонтов
  48. 48. 404 Fallback Storage group Just... storage proxy_next_upstream http_404 storage Mons Anderson Олег Мамонтов
  49. 49. Again about PUT Storage group storage PUT storage Mons Anderson Олег Мамонтов
  50. 50. How about single PUT? Storage group storage PUTZFS storage DELETE«replication» OPTIONS Mons Anderson Олег Мамонтов
  51. 51. Приоритеты выбора решения● Надежность / избыточность хранения● Производительность чтения и записи● Возможность распределения нагрузки● Потенциальная масштабируемость● Стандартные аппаратные компоненты● Простота в настройке и обслуживании Mons Anderson Олег Мамонтов
  52. 52. Традиционная работа с диском Файловая система Имя <=> объект (inode) Файловая система объект <=> LBA тома Менеджер томов LBA тома <=> LBA RAID RAID контроллер LBA RAID <=> LBA диска Дисковые устройства Mons Anderson Олег Мамонтов
  53. 53. Rampant layering violation ;) Файловая система (zfs) Модель агрегации (zpool) Дисковые устройства Mons Anderson Олег Мамонтов
  54. 54. stripe / mirror / raidz / ?stripe – быстро, дешево, ненадежноmirror – быстро, надежно, дорогоraidz – относительно надежно, недорого, медленно :( Mons Anderson Олег Мамонтов
  55. 55. Универсального решения нет :( Дано: 100 дисков по 100GB, 200 IOPSКонфигурация Объем, GB IOPSstripe 1 x 100 10000 20000mirror 2 x 50 5000 20000raidz 1 x ( 99 + 1 ) 9900 200raidz 5 x ( 19 + 1 ) 9500 1000raidz 33 x ( 2 + 1 ) 6600 6600 Mons Anderson Олег Мамонтов
  56. 56. Наше хранилище — 6TB / 2U2U: 2 x 500MB + 10 x 1TB, SATA-2mirror raidz1 raidz1 raidz1 spare stripe Mons Anderson Олег Мамонтов
  57. 57. Будущее уже наступило! snapshot мгновенный снимок (cow - быстро, дешево) Mons Anderson Олег Мамонтов
  58. 58. Будущее уже наступило! rollback откат файловой системы на заданный снимок Mons Anderson Олег Мамонтов
  59. 59. Будущее уже наступило! clone “альтернативная реальность” (ветка из снимка) Mons Anderson Олег Мамонтов
  60. 60. Будущее уже наступило! send дамп снимка (полный или разностный) Mons Anderson Олег Мамонтов
  61. 61. Будущее уже наступило! receive воссоздание снимка из дампа Mons Anderson Олег Мамонтов
  62. 62. “Почти” репликация1. Создание мгновенного снимка (snapshot)2. Получение инкрементального дампа (send)3. Пересылка дампа на целевую машину (socketpipe)4. Восстановление дампа на целевой машине (receive)5. Создание клона файловой системы (clone)6. Переустановка символической ссылки (link -fhs)7. sleep && goto п.1; Mons Anderson Олег Мамонтов
  63. 63. Неочевидные нюансы Зачем нужны клоны и символические ссылки? Mons Anderson Олег Мамонтов
  64. 64. Неочевидные нюансы Удаление старых снимков и клонов Mons Anderson Олег Мамонтов
  65. 65. Неочевидные нюансы● Минимизация лага репликации● Мониторинг актуальности● Уникальные имена файлов при обновлениях● Двухуровневое кеширование Mons Anderson Олег Мамонтов
  66. 66. © 2011Mons Anderson <mons@cpan.org>Олег Мамонтов <lonerr@cpan.org> Рамблер Интернет Холдинг Mons Anderson Олег Мамонтов
  67. 67. ? Mons Anderson Олег Мамонтов

×