Browse Source

+ /articles/2017/03/29/sheepdog-and-ceph/

master
Alex 'AdUser' Z 8 years ago
parent
commit
c8c452ec69
  1. 2
      articles/2017/03/24/distributed-storage/index.markdown
  2. 18
      articles/2017/03/29/sheepdog-and-ceph/ceph.conf
  3. 56
      articles/2017/03/29/sheepdog-and-ceph/fs-stat.pl
  4. 141
      articles/2017/03/29/sheepdog-and-ceph/index.markdown

2
articles/2017/03/24/distributed-storage/index.markdown

@ -144,4 +144,4 @@ Sheepdog
Если нужна максимальная производительность для qemu, а кластер располагается в одном ДЦ - sheepdog.
Во всех остальных случаях - ceph.
Про производительность последних двух (в цифрах) напишу в следующий раз.
Про производительность последних двух (в цифрах) напишу [в следующий раз](/articles/2017/03/29/sheepdog-and-ceph/).

18
articles/2017/03/29/sheepdog-and-ceph/ceph.conf

@ -0,0 +1,18 @@
[global]
auth client required = cephx
auth cluster required = cephx
auth service required = cephx
auth supported = cephx
cluster network = 192.168.7.0/24
public network = 192.168.7.0/24
filestore xattr use omap = true
fsid = 4c8be4e5-a8c8-498e-ab13-21be5319accb
keyring = /etc/pve/priv/$cluster.admin.keyring
osd journal size = 1024
osd pool default min size = 1
osd pool default size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
mon initial members = node2
mon host = 192.168.7.5:6789

56
articles/2017/03/29/sheepdog-and-ceph/fs-stat.pl

@ -0,0 +1,56 @@
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
use Fcntl ':mode';
my $tstat = { file => 0, dir => 0, other => 0 };
my $sstat = {};
my ($mode, $size, $slot);
sub handler {
($mode, $size) = (stat $_)[2,7];
if (S_ISDIR($mode)) { $tstat->{dir}++ }
elsif (S_ISREG($mode)) { $tstat->{file}++ }
else { $tstat->{other}++ }
if ($size >= (1024 ** 2)) {
$sstat->{'>1024k'}++;
return;
}
if ($size >= 1024 * 100) {
$sstat->{'100k - 1024k'}++;
return;
}
if ($size >= (1024 * 10)) {
$sstat->{'10k - 100k'}++;
return;
}
if ($size >= 1024) {
$sstat->{'1k - 10k'}++;
return;
}
if ($size < 1024) {
$sstat->{'0k - 1k'}++;
return;
}
}
File::Find::find({wanted => \&handler}, 'ports/');
print "Stats for file types\n";
print "--------------------\n";
foreach my $key (sort keys %{ $tstat }) {
printf " %7d | %s\n", $tstat->{$key}, $key;
}
print "Stats for file sizes\n";
print "--------------------\n";
foreach my $key (sort keys %{ $sstat }) {
printf " %7d | %s\n", $sstat->{$key}, $key;
}
exit 0;

141
articles/2017/03/29/sheepdog-and-ceph/index.markdown

@ -0,0 +1,141 @@
---
title: Сравнение производительности Sheepdog/Ceph
tags: software, sheepdog, ceph, репост
---
Выкладываю данные по тестированию производительности ceph и sheepdog.
Тестовый стенд: 3 почти одинаковых сервера с двумя дисками по 500Гб.
С каждого диска в конце откушено по 450Гб под данные и отдано под разные системы.
В качестве хранилища чанков используется ext4 (sheepdog) и xfs (ceph).
Тип объекта - реплиируемый, количество копий и там и там выставлено в 2.
chunk size везде равен 4мб.
---
[Конфиг](ceph.conf) кластера 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 |
'---'-------------------------'----------'----------'
Статистика по архивам ([скрипт подсчёта](fs-stat.pl)):
.-------------------------.-----------.-----------.
| Показатель | 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 - это запросто.
Loading…
Cancel
Save