Сравнение производительности Sheepdog/Ceph

Выкладываю данные по тестированию производительности ceph и sheepdog.

Тестовый стенд: 3 почти одинаковых сервера с двумя дисками по 500Гб. С каждого диска в конце откушено по 450Гб под данные и отдано под разные системы. В качестве хранилища чанков используется ext4 (sheepdog) и xfs (ceph). Тип объекта - реплиируемый, количество копий и там и там выставлено в 2. chunk size везде равен 4мб.

Конфиг кластера ceph.

Порядок тестирования:

  • создаётся блочное устройство в нужной системе
  • подключается к виртуалке
  • ставится чистая freebsd 10.3
  • качается дерево исходников (1й бенчмарк, линейная запись)
  • распаковывается (2й бенчмарк, запись множества мелких файлов)
  • удаляется (3й бенчмарк, чистая работа с метаданными фс)
  • свободное место на разделе заполняется нулями, с целью вызвать полное выделение места под диск (cat /dev/zero > zero.bin; rm zero.bin)
  • распаковывается 2й раз (4й бенчмарк, то же самое что и второй, но при полностью выделенном месте)
  • качается архив с деревом портов (5й бенчмарк, линейная запись)
  • распаковывается (6й бенчмарк)
  • удаляется

При смене дисковой системы сама виртуалка не удаляется, только перетыкаются диски.

Результаты (время, H:M:S):

.---.-------------------------.----------.----------.
| # | теста                   | sheepdog | ceph     |
:---+-------------------------+----------+----------:
| 1 | fetch src.txz (320Mb)   |  0:00:52 |  0:01:45 |
:---+-------------------------+----------+----------:
| 2 | tar -xJf src.txz        |  0:03:50 |  0:41:29 |
:---+-------------------------+----------+----------:
| 3 | rm -rf src/             |  0:00:17 |  0:00:39 |
:---+-------------------------+----------+----------:
| 4 | tar -xJf src.txz        |  0:07:26 |  0:51:25 |
:---+-------------------------+----------+----------:
| 5 | fetch ports.txz (220Mb) |  0:00:24 |  0:00:57 |
:---+-------------------------+----------+----------:
| 6 | tar -xJf ports.txz      |  0:10:03 |  1:47:17 |
'---'-------------------------'----------'----------'

Статистика по архивам (скрипт подсчёта):

.-------------------------.-----------.-----------.
| Показатель              | src.txz   | ports.txz |
:-------------------------+-----------+-----------:
| Обычных файлов          |    124960 |    295333 |
| Директорий              |      7042 |     36725 |
| Прочих типов файлов     |         0 |         0 |
:-------------------------+-----------+-----------:
| Размер <1кб             |     27335 |    235632 |
| Размер 1-10кб           |     75354 |     89000 |
| Размер 10-100кб         |     26991 |      6157 |
| Размер 100-1024кб       |      2225 |      1135 |
| Размер >=1024кб         |        97 |       134 |
'-------------------------'-----------'-----------'

Параметры rbd:

rbd image 'vm-108-disk-1':
    size 32768 MB in 8192 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.14082ae8944a
    format: 2
    features: layering

Состояние ceph-кластера:

# ...после теста 3
cluster fc4c3641-892b-4bcb-94a3-8447e831a904
 health HEALTH_OK
 monmap e2: 2 mons at {node2=192.168.7.5:6789/0,node3=192.168.7.6:6789/0}, election epoch 4, quorum 0,1 node2,node3
 osdmap e29: 3 osds: 3 up, 3 in
  pgmap v803: 392 pgs, 4 pools, 1466 MB data, 425 objects
        6113 MB used, 1144 GB / 1150 GB avail
             392 active+clean
# ...после теста 4
cluster fc4c3641-892b-4bcb-94a3-8447e831a904
 health HEALTH_OK
 monmap e2: 2 mons at {node2=192.168.7.5:6789/0,node3=192.168.7.6:6789/0}, election epoch 4, quorum 0,1 node2,node3
 osdmap e29: 3 osds: 3 up, 3 in
  pgmap v5706: 392 pgs, 4 pools, 16984 MB data, 4289 objects
        36924 MB used, 1114 GB / 1150 GB avail
             392 active+clean
# ...после всех тестов и удаления rbd
cluster fc4c3641-892b-4bcb-94a3-8447e831a904
 health HEALTH_OK
 monmap e2: 2 mons at {node2=192.168.7.5:6789/0,node3=192.168.7.6:6789/0}, election epoch 4, quorum 0,1 node2,node3
 osdmap e29: 3 osds: 3 up, 3 in
  pgmap v10514: 392 pgs, 4 pools, 8 bytes data, 1 objects
        3209 MB used, 1147 GB / 1150 GB avail
             392 active+clean

Состояние sheepdog после всех тестов:

Cluster status: running, auto-recovery enabled
Cluster store: plain with 2 redundancy policy
Cluster vnode mode: node
Cluster created at Wed Feb  1 23:20:29 2017

Epoch Time           Version
2017-02-26 14:33:19     11 [192.168.7.4:7000, 192.168.7.5:7000, 192.168.7.6:7000]

Замеры потребления ресурсов, в мб (ps -o rss,vsz,cmd ax | grep cmd).

.-------------------------.-----------.-----------.-----------.
| Показатель              | node1     | node2     | node3     |
:-------------------------+-----------+-----------+-----------:
| после 4 теста                                               |
:-------------------------+-----------+-----------+-----------:
| ceph / osd              | 139 / 753 | 124 / 748 | 139 / 764 |
| ceph / mon              | --- / --- | 151 / 339 |  70 / 245 |
| sheepdog                |  10 / 617 |  18 /1825 |  12 / 724 |
:-------------------------+-----------+-----------+-----------:
| после всех тестов                                           |
:-------------------------+-----------+-----------+-----------:
| ceph / osd              | 141 / 755 | 124 / 747 | 138 / 763 |
| ceph / mon              | --- / --- | 193 / 384 |  86 / 261 |
| sheepdog                |  10 / 617 |  18 /1796 |  12 / 706 |
'-------------------------'-----------'-----------'-----------'

Примечание: на sheepdog'е во время теста висели ещё виртуалки (в замороженном состоянии). Кроме того, нетрудно заметить, что тестируемая виртуалка располагалась на второй ноде. На первой ноде монитора ceph'а не было, на второй он был основным, третьей - резервным.

Выводы

Однако, на мелких файлах рвёт как тузик грелку. Используйте на свой страх и риск, решение всё ещё нестабильно. Все данные потерять - это врятли, а вот побить в процессе recovery - это запросто.