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
- море их • HTTP entry point или • CLI calls • Connection info - target, lun, CHAP • StorPool / ScaleIO - драйвер на гипервизоре(!) • Connection info - volume “path”
имя файла, формат Просто, всегда работает Отказоустойчивость и масштабирование • Ceph : адреса мониторов, пользователь, keyring(?) Надежно, в меру быстро, масштабируемо Сложно, дорого • LVM: + iSCSI / FC: адрес таргета, iqn:lun, CHAP Быстро Масштабируемость, отказоустойчивость
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
Видит кэш в кэше кэш Сунул кэш данные в кэш Кэш кэш 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
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
Кэшируется средствами 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
Можно ускорить чтение Нельзя ускорить запись Реальное соотношение чтения/записи Кто сказал, что 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
инкрементальное Может выполняться через снапшоты Можно выполнять разными драйверами Здесь мог/должен бы быть рассказ о том, как мы писали свой драйвер бэкапа - но он из категории “только для тех кто привык к боли” :-)
нужды? Тесты могут подсказать Для тестов нужна статистика 2. Как оно поведет себя в процессе роста? Мы все умрем? Всё будет хорошо? Правильный вариант?!