Skip to content

Commit ead3757

Browse files
committed
Structure and move rbd to separate file
1 parent c9a5c76 commit ead3757

File tree

3 files changed

+174
-181
lines changed

3 files changed

+174
-181
lines changed

index.rst

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
Ceph FAQ
2-
========
1+
Заметки о Ceph
2+
==============
33

44
.. toctree::
55
:maxdepth: 2
66
:caption: Содержание:
77

88
about
9+
rbd
910
main
1011
cloudmouse
1112
see_also
12-
13-
Указатель и поиск
14-
=================
15-
16-
* :ref:`genindex`
17-
* :ref:`search`

main.rst

Lines changed: 0 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -1,176 +1,3 @@
1-
RBD
2-
---
3-
4-
qemu-kvm и discard
5-
++++++++++++++++++
6-
7-
И Ceph (RBD) и Qemu умеют в discard/trim/unmap. Это означает, что гостевая ОС
8-
может отправить соответствующий запрос к хранилищу, чтобы сообщить что данные не
9-
нужны. Исходно это было предназначено для SSD-дисков с целью оптимизации
10-
wear-leveling (выравнивание износа). В RBD это позволяет удалить ненужные данные
11-
из кластера и тем самым уменьшить бекфиллинг, размеры снапшотов и др.
12-
13-
Мы знаем, что RBD виртуально делит диски на куски по 4 МБ (по-умолчанию). Каждый
14-
кусок -- это один объект Rados. Соответственно, дискард может либо удалить целиком
15-
один объект (если он не нужен), либо сократить размер (вплоть до нуля). Что он не может
16-
-- так это продискардить середину объекта или начало. Он мог бы просто заполнить нулями,
17-
но нет. Появляется ошибка, правда, не фатальная. В API RBD нет функции для
18-
выяснения размера чанка. Поэтому Qemu не может догадаться какие дискарды можно отправлять
19-
в librbd, а какие закончатся ошибкой. В документации про это ничего не сказано.
20-
21-
Есть костыль для ceph.conf -- параметр ``rbd_skip_partial_discard``. Однако:
22-
23-
* http://tracker.ceph.com/issues/16386
24-
* http://tracker.ceph.com/issues/16869
25-
26-
В связи с чем, лучше проинструктировать Qemu чтобы она сообщила в гостевую об
27-
имеющемся выравнивании в 4 МБ. Тогда ядро гостевой ОС не будет отправлять дискарды
28-
которые невозможно выполнить в RBD.
29-
30-
К сожалению, libvirt напрямую не может указать это для каждого диска персонально.
31-
Но есть костыль:
32-
33-
.. code-block:: xml
34-
35-
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
36-
<qemu:commandline>
37-
<qemu:arg value='-global'/>
38-
<qemu:arg value='scsi-hd.discard_granularity=4194304'/>
39-
</qemu:commandline>
40-
...
41-
<disk type='network' device='disk'>
42-
<!--
43-
detect_zeroes='on'
44-
https://libvirt.org/formatdomain.html:
45-
46-
NB enabling the detection is a compute intensive operation,
47-
but can save file space and/or time on slow media.
48-
49-
А ещё это может повлиять на бенчмарки в стиле dd if=/dev/zero ...
50-
fio использует случайный паттерн.
51-
-->
52-
<driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
53-
...
54-
</disk>
55-
</domain>
56-
57-
.. important::
58-
59-
``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'`` крайне важен.
60-
Без этой строки ``<qemu:commandline>`` будет проигнорирован. Проверить
61-
можно повторно отредактировав описание ВЫКЛЮЧЕНОЙ виртуальной машины
62-
``virsh edit some-domain``
63-
64-
Данный фрагмент будет работать только для virtio-scsi. Для IDE аналогично,
65-
но мне неизвестно как :).
66-
67-
(Пример по ссылке http://docs.ceph.com/docs/master/rbd/qemu-rbd похоже что
68-
устарел и не работает)
69-
70-
Для справки есть ещё такие параметры:
71-
72-
* ``logical_block_size``
73-
* ``physical_block_size``
74-
* ``min_io_size``
75-
* ``opt_io_size``
76-
77-
.. important::
78-
79-
Discard будет работать только для виртуальных дисковых интерфейсов IDE и
80-
virtio-scsi. Не путайте virtio и virtio-scsi -- это два совершенно разных
81-
интерфейса. virtio устарел и более не развивается. В гостевой ОС
82-
virtio-scsi выглядит как ``/dev/sd*``, а virtio как ``/dev/vd*``.
83-
84-
85-
Их всех можно посмотреть командой ``lsblk`` в гостевой ОС чтобы удостовериться,
86-
что виртуальная машина настроена правильно
87-
(``DISC-GRAN`` равен размеру чанка в RBD):
88-
89-
.. code::
90-
91-
$ lsblk -D
92-
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
93-
sda 0 4M 1G 0
94-
├─sda1 4176896 4M 1G 0
95-
├─sda2 3145728 4M 1G 0
96-
└─sda3 3145728 4M 1G 0
97-
98-
$ lsblk -t
99-
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME
100-
sda 0 512 0 512 512 1 deadline 128 128 2G
101-
├─sda1 0 512 0 512 512 1 deadline 128 128 2G
102-
├─sda2 0 512 0 512 512 1 deadline 128 128 2G
103-
└─sda3 0 512 0 512 512 1 deadline 128 128 2G
104-
105-
106-
Чтобы это заработало полностью, нужно не только убедиться что эта возможность
107-
появилась на блочном уровне в гостевой ОС, но и чтобы гостевая ОС
108-
использовала эту функцию.
109-
110-
Linux
111-
~~~~~
112-
113-
* ``fstrim -v -a``. Вручную, либо по расписанию (раз в неделю). Рекомендуется.
114-
не уверен, но в Ubuntu, по-моему, работает из коробки.
115-
* Опции для SWAP-разделов. TODO: расписать какие именно. Есть первичный дискард
116-
перед подключением, есть включение дискарда во время работы.
117-
* Есть опции при монтировании различных ФС чтобы выполняли discard для данных
118-
которые стали ненужными (после удаления файлов)
119-
* Команда ``blkdiscard`` для очистки всего устройства либо раздела или тома LVM.
120-
121-
.. warning::
122-
123-
Говорят, что опции монтирования и аналогичные опции для SWAP-раздела понижают
124-
производительность. С другой стороны, массивный fstrim по расписанию может
125-
дать непредвиденные проседания IO в гостевой ОС.
126-
127-
Windows
128-
~~~~~~~
129-
130-
TODO: всё работает из коробки как-то само собой. На старых версиях можно включить
131-
через реестр. Как посмотреть ? Как форсировано прочистить ?
132-
133-
Настоятельно рекомендуется установить дополнения в гостевую ОС:
134-
135-
* https://fedoraproject.org/wiki/Windows_Virtio_Drivers
136-
* https://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
137-
138-
Иначе придётся довольствоваться только IDE, а это сильно меньшая производительность.
139-
140-
141-
Недорасписанное
142-
+++++++++++++++
143-
144-
* опции для рбд образов типа фастдифф
145-
* бага с удалением снапшотов созданных ранними версиями
146-
* откат к снапшоту крайне медленный (как он работает) и что без дедупликации по сравнению со старыми
147-
объектам
148-
149-
* Виды кеширования в квм - дока от сусе где демелиоратор сказал что он не прав.
150-
И описание что есть потеря данных при вырубания питания.
151-
152-
* https://www.spinics.net/lists/ceph-users/msg15983.html
153-
* http://docs.ceph.com/docs/master/rbd/qemu-rbd/#qemu-cache-options
154-
* https://github.com/ceph/ceph/pull/10797
155-
156-
* скруб еррор -- как понять хотябы какой это образ.
157-
* как бекапить :)
158-
* в рбд сразу после снапшота будут наблюдаться тормоза так как 4-мб объекты будут копироваться целиком даже при записи одного сектора.
159-
* оборванное удаление образа. как доудалить остатки.
160-
* преобразование в qcow2 и обратно. сжатие qcow2. перенос в другой пул средством qemu-img. хотя более быстро -- на уровне rados.
161-
* Ядерный драйвер RBD не умеет во много опций. в частности, фастдифф. Варианты -- FUSEmount -- каждый файл это образ. либо NBD.
162-
* iscsi
163-
* qemu-nbd vs rbd-nbd
164-
* Перенос образов между пулами и копирование образов: рекомендуется qemu-img версии более 2.9.
165-
166-
.. image:: _static/qemu-img-bandwith.jpg
167-
:alt: График пропускной способности
168-
169-
https://github.com/qemu/qemu/commit/2d9187bc65727d9dd63e2c410b5500add3db0b0d и описание опций.
170-
171-
* Сделав снапшот хотябы одного образа, сделать снапшот пула уже не получится. Узнать бы почему.
172-
173-
1741
Переход на Luminous
1752
-------------------
1763

0 commit comments

Comments
 (0)