From c8c452ec695defaba73444b5bcd703e81e411885 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Sat, 1 Apr 2017 01:04:17 +1000 Subject: [PATCH] + /articles/2017/03/29/sheepdog-and-ceph/ --- .../03/24/distributed-storage/index.markdown | 2 +- .../2017/03/29/sheepdog-and-ceph/ceph.conf | 18 +++ .../2017/03/29/sheepdog-and-ceph/fs-stat.pl | 56 +++++++ .../03/29/sheepdog-and-ceph/index.markdown | 141 ++++++++++++++++++ 4 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 articles/2017/03/29/sheepdog-and-ceph/ceph.conf create mode 100644 articles/2017/03/29/sheepdog-and-ceph/fs-stat.pl create mode 100644 articles/2017/03/29/sheepdog-and-ceph/index.markdown diff --git a/articles/2017/03/24/distributed-storage/index.markdown b/articles/2017/03/24/distributed-storage/index.markdown index 81b653d..c13bf0e 100644 --- a/articles/2017/03/24/distributed-storage/index.markdown +++ b/articles/2017/03/24/distributed-storage/index.markdown @@ -144,4 +144,4 @@ Sheepdog Если нужна максимальная производительность для qemu, а кластер располагается в одном ДЦ - sheepdog. Во всех остальных случаях - ceph. -Про производительность последних двух (в цифрах) напишу в следующий раз. +Про производительность последних двух (в цифрах) напишу [в следующий раз](/articles/2017/03/29/sheepdog-and-ceph/). diff --git a/articles/2017/03/29/sheepdog-and-ceph/ceph.conf b/articles/2017/03/29/sheepdog-and-ceph/ceph.conf new file mode 100644 index 0000000..d439b92 --- /dev/null +++ b/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 diff --git a/articles/2017/03/29/sheepdog-and-ceph/fs-stat.pl b/articles/2017/03/29/sheepdog-and-ceph/fs-stat.pl new file mode 100644 index 0000000..3fe39ae --- /dev/null +++ b/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; diff --git a/articles/2017/03/29/sheepdog-and-ceph/index.markdown b/articles/2017/03/29/sheepdog-and-ceph/index.markdown new file mode 100644 index 0000000..8131086 --- /dev/null +++ b/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 - это запросто.