Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Artemy-Kapitula-Cinder-Insides.pdf

Sysadminka
November 04, 2019

 Artemy-Kapitula-Cinder-Insides.pdf

Sysadminka

November 04, 2019
Tweet

More Decks by Sysadminka

Other Decks in Programming

Transcript

  1. Минимальный OpenStack Hypervisor Guest VM1 Guest VM2 Public network Infrastructure

    network (management, SAN) Storage system(s) Storage I/O drivers Storage I/O drivers Nova Neutron LIBVIRT Cinder Glance Keystone
  2. … и накрепко закрепим скотчем! • RabbitMQ • Memcache •

    EtcD • MySQL • Apache • … и МНОГО Python’а
  3. Virtualization block storage Управление (оркестрация) • Cinder - единый интерфейс

    оркестрации Сервис (производительность) • QEMU • Storage network • Storage system
  4. Cinder (OpenStack) volume • ID - уникален и не изменен

    • Name (имя) - желательно уникальное • Status - available / in-use / error • Size - меняется только “вверх” • Bootable / Non-bootable • Attachments list
  5. Cinder (OpenStack) volume snapshot • ID - уникален и не

    изменен • Name (имя) - желательно уникальное • Status - available / in-use / error • Attachments list - только для служебных целей
  6. Block storage 1. File-backed: 1. Regular file 1. VMDK 2.

    VDI 3. VHD 4. QCOW 5. Raw 2. Protocols: 1. Local 2. NFS 3. SMB 3. Raw device 1. iSCSI 2. FC 2. Pure virtual 1. Ceph 2. NBD 1. iSCSI / FC 1. Vendor-specific 1. EMC 2. NetApp 3. Nexenta 4. Infinidat 5. Storpool 6. HPE 2. LVM 1. Thin 2. Thick 3. Target 1. SCST 2. IET 3. LIO 4. TGTD LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers
  7. Cinder Cinder-API Volume service manager Volume service manager Volume service

    manager Backup service manager Backup service manager Cinder-Scheduler Ceph LVM + target Netapp Google Cloud Filesystem Oslo RPC HTTP
  8. Создание тома Client -> API : create volume API ->

    Scheduler : create volume Scheduler : target is host@service API -> Volume : create volume Volume : create blank volume / clone volume Volume -> Glance : get image Volume: put image into cache Volume : copy image to volume if requested Volume : update volume status Cinder-API Volume service manager Volume service manager Volume service manager Cinder-Scheduler Ceph LVM + target Netapp Oslo RPC HTTP
  9. Подключение тома Client -> Nova : attach volume Nova ->

    Cinder API : initiate_connection API -> Volume : initiate connection Volume : configure backend if required Volume : update volume status Volume -> API : connection_info is { … } Nova <- API : connection_info is { … } Nova -> libvirt : block_device_attach(arguments …) Cinder-API Volume service manager Volume service manager Volume service manager Ceph LVM + target Netapp Oslo RPC HTTP Nova HTTP
  10. Бакэнды Cinder для проприетарных решений • NetApp, Dell/EMC, StorPool, Infinidat

    - море их • HTTP entry point или • CLI calls • Connection info - target, lun, CHAP
 • StorPool / ScaleIO - драйвер на гипервизоре(!) • Connection info - volume “path”
  11. Бакэнды Cinder для стандартного стека • NFS/SMB : адрес, путь,

    имя файла, формат
 Просто, всегда работает
 Отказоустойчивость и масштабирование • Ceph : адреса мониторов, пользователь, keyring(?)
 Надежно, в меру быстро, масштабируемо
 Сложно, дорого • LVM: + iSCSI / FC: адрес таргета, iqn:lun, CHAP
 Быстро
 Масштабируемость, отказоустойчивость
  12. Производительность гостевых систем IOPS vs Bandwidth vs Service time •

    Static content • Media streaming • Database Cache + Data locality?
  13. Потоки данных блочного I/O Ехал кэш через кэш Видит кэш

    в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  14. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  15. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  16. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  17. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  18. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  19. 1000 и 1 способ потерять данные Ехал кэш через кэш

    Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш reset… Упс!! LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk Disk Disk
  20. QEMU I/O mode и типы кэширования LV sdb iSCSI iSCSI

    target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers I/O + cache Direct Flush Native + direct Да Да Native + directsync Да Всегда Threads + writeback Нет Да Threads + writethrough Нет Всегда Threads + unsafe Нет Нет Libvirt XML io=“native” cache=“none” io=“native” cache=“directsync” io=“thread” cache=“writeback” io=“thread” cache=“writethrough” io=“thread” cache=“unsafe” Kill -9 <QEMU_PID> не приводит к потере кэша Poweroff - приводит к потере кэша Disk Disk
  21. QEMU кэширование для Ceph Ceph - особый случай Только io=“threads”

    Кэшируется средствами librbd Kill -9 <QEMU_PID> приводит к потере кэша Poweroff гипервизора приводит к потере кэша Poweroff стораджа НЕ приводит к потере кэша LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk
  22. Снова в Cinder - но теперь в backend Таргеты: tgtd

    : userspace, кэширование в page cache (управляемое) SCST : kernel-space, кэширование в page cache (всегда включено) LIO : kernelspace, кэширования нет Проблема - требуется STATEFUL TARGET LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk
  23. Data locality и tiering Всего лишь еще один кэш Реплицированный

    Можно ускорить чтение Нельзя ускорить запись Реальное соотношение чтения/записи Кто сказал, что R/W = 70/30 Соотношение с продуктива облака - 50/50 Временами 40/60 На некоторых типах дисков 10/90 Один-два клиента которые выкидывают частые Flush Стабильный результат === вложение в СХД LV sdb iSCSI iSCSI target file.qcow2 NFS/SMB NFS/SMB server QEMU RBD driver LVM QEMU QCOW Block driver Qemu Raw driver Qemu Raw driver Ceph cluster vda sda sdb vdb Guest OS QEMU virtual bus drivers Disk Disk
  24. Гиперконвергентность Фактически распределенные Vendor lock за ваши деньги Узконаправленность Ловушка

    Data locality и кэшей Но если вам оно досталось бесплатно - то почему бы и нет?
  25. Несколько типов дисков Общепринятая(?) практика 1. Ceph 2. Что-то еще

    1. NetApp / InfiniDat / EMC 2. LVM + iSCSI 3. Локальные диски (эфемерные) Возможны проблемы миграции
  26. Катастрофоустойчивая архитектура Распределенная Синхронная репликация на блочном уровне Надёжно Legacy-compliant

    Медленно Минимальный RTT Большая полоса Репликация на уровне приложения Быстро Меньше ресурсов сети Надо настраивать Несовместимо с legacy
  27. Резервное копирование Элемент резервной копии - Volume Однопоточное Многосессионное Опционально

    инкрементальное Может выполняться через снапшоты Можно выполнять разными драйверами 
 Здесь мог/должен бы быть рассказ о том, как мы писали свой драйвер бэкапа - но он из категории “только для тех кто привык к боли” :-)
  28. Классические СХД vs распределенные Классические • 1/2 “головы” • Unique

    hardware • iSCSI / FC • Локальный кэш • Дедупликация • Dumb client • Специализация Вертикальный лимит “Для облаков” • Commodity hardware • Собственные протоколы • Smart client • Открытое API • Множество применений Горизонтальное масштабирование
  29. Как выбрать block storage 1. Закроет ли оно наши нынешние

    нужды?
 Тесты могут подсказать
 Для тестов нужна статистика
 2. Как оно поведет себя в процессе роста?
 Мы все умрем?
 Всё будет хорошо?
 Правильный вариант?!
  30. Хранилище как суперпозиция методов Зеркалирование Чередование с избыточностью Чередование без

    избыточности (шардинг) Математическая / статистическая модель Как единственный приемлемый метод
  31. Заключение Cinder - удобен в составе OpenStack Каждая система имеет

    ограничения Тестирование не даст полной картины Сначала мониторинг, затем развертывание Отказоустойчивость требует работы с заказчиком