LINUX.ORG.RU
решено ФорумAdmin

Контейнеры против виртуальных машин, HDD

 , , , ,


2

1

Всем привет!

В наличии есть сервер с парой десятков виртуальных машин на нем. Виртуальные машины используются для тестирования ПО. На виртуалках стали появляться сообщения о длинных задержках от жесткого диска.

Есть ли у кого опыт, что переезд на контейнеры сможет немного сгладить ситуацию? Или идея тухлая?

Сейчас там для хранилища используется первое, что пришло в голову — raid6 из ssd-дисков. Но, думаю, это было ошибкой, и лучше сделать это по другому. Как по опыту лучше всего?

Процессора, памяти и объема хранилища в Гб там еще очень много, затык только в скорости жесткого диска.


Что используется в качестве виртуального HDD (qcow, raw, lvm, etc)? Какая выставлена шина (virtio, sata, ide, etc)? Какое выставлено кэширование (none, writethrough, writeback)? Что выставлено в io (native, threads)? Какие замеры io в виртуалке и на гипервизоре?

Overhead контейнера стремится к нулю в отличие от виртуалок, поэтому чисто теоретически прирост должен быть. Но по сравнению с оптимизированной виртуалкой он будет незаметен.

ivn86 ()
Ответ на: комментарий от ivn86

qcow2, virtio scsi контроллер, virtio-диски, cache=none, aio=native.

Гипервизор:

/dev/mapper/mpathb-part1:
 Timing cached reads:   14366 MB in  2.00 seconds = 7188.79 MB/sec
 Timing buffered disk reads: 884 MB in  3.00 seconds = 294.27 MB/sec

/dev/mapper/mpathb-part1:
 Timing cached reads:   13656 MB in  2.00 seconds = 6834.47 MB/sec
 Timing buffered disk reads: 1032 MB in  3.00 seconds = 343.95 MB/sec

/dev/mapper/mpathb-part1:
 Timing cached reads:   13896 MB in  2.00 seconds = 6953.78 MB/sec
 Timing buffered disk reads: 964 MB in  3.01 seconds = 320.36 MB/sec

Виртуалка:

/dev/vda1:
 Timing cached reads:   9646 MB in  2.00 seconds = 4825.49 MB/sec
 Timing buffered disk reads: 736 MB in  3.00 seconds = 244.96 MB/sec

/dev/vda1:
 Timing cached reads:   10818 MB in  2.00 seconds = 5412.43 MB/sec
 Timing buffered disk reads: 690 MB in  3.00 seconds = 229.73 MB/sec

/dev/vda1:
 Timing cached reads:   9344 MB in  2.00 seconds = 4676.11 MB/sec
 Timing buffered disk reads: 596 MB in  3.01 seconds = 198.08 MB/sec

Я так понимаю, мне запись нужно потестить?

ien ()
Последнее исправление: ien (всего исправлений: 2 )

raid6 на каком-то контроллере или через mdadm сделан? Скорее всего им ты убил производительность своих ssd. Сделай 10.

Davyd ★★ ()
Ответ на: комментарий от Davyd

Контроллер. HP Smart Array. Какой точно прямо сейчас сказать не могу.

Ну я понял, если есть raid6 на 2n дисках и raid10 на 2n дисках, то на raid10 теряем в надежности, но зато iops-ов будет в n больше.

ien ()
Ответ на: комментарий от ivn86

Проявляется на гостевой в логах ядра:

[Сбт Авг  6 19:40:47 2016] INFO: task postgres:4214 blocked for more than 120 seconds.
[Сбт Авг  6 19:40:47 2016]       Tainted: G           O  3.16.0-16-generic
[Сбт Авг  6 19:40:47 2016] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

ien ()
Ответ на: комментарий от ien

iops-ов будет больше на столько, насколько слаб был твой контроллер в расчете двойной четности при записи. В надежности особо не потеряешь, потеряешь место, будет половина суммарной емкости.

Davyd ★★ ()
Последнее исправление: Davyd (всего исправлений: 1 )
Ответ на: комментарий от ien

все верно. в raid10 можно потерять 1 любой, если теряем 2 и более дисков, то главное, чтоб из разных зеркал. В raid6 - не более 2 любых.

Davyd ★★ ()
Ответ на: комментарий от ien

raid10 100% переживает поломку 1 диска, и если сильно повезет то полумку 50% всех дисков - но если не повезет то при поломке 2х дисков будет потеря данных.

Но вероятность такого развития событий не велика (чтоб вот прям сразу слетели 2 диска из одного сегмента).

Вобще Raid6 рекомундуется использовать для очень больших масивов на HDD (не SSD) которые используются для хранения архивной инфы с небольшой IO нагрузкой.

zaz ★★★★ ()

Не, raid6 ограничивает иопсы одним диском, в реале даже меньше. Я для виртуалок на сервере использую чистый серверный ssd, а для некритичных к иопсам машин raid10.

Lordwind ★★★★★ ()
Ответ на: комментарий от ien

Кто сломается, ssd? Ну это серверная модель для датацентров, такие вот так просто не ломаются. А бекапы и так делаю. Я надеюсь не надо объяснять, что raid массивы и бекапы это разные вещи и друг друга не заменяют?

Lordwind ★★★★★ ()

Оказалось там msa 2040 с 16-ю ssd-дисками по 400Гб.

Оно цепляется к серверу через оптику двумя каналами и на сервере настроен multipath.

Я пытался посмотреть количество iops для raid6 на 16 и raid10 на 2*6 + 4 spare, и оказалось, что на raid10 iops вдвое меньше.

Сейчас сделал два разных vdisk-а raid6 на 4 и raid10 на 4. По прежнему raid6 быстрее.

Измерял:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Пишу непосредственно в /dev/mapper/mpath?.

Уважаемые ivn86 Davyd zaz Lordwind, что я не понимаю или где мог накосячить?

ien ()
Ответ на: комментарий от ien

raid6 на 4 и raid10 на 4

В теории вроде так... RAID6 x4 = Rs x2 / Ws x1 (скорость чтения/записи) и Ri x1 / Wi x1 (иопсы). RAID10 x4 = Rs x4 / Ws x2 и Ri x4 / Wi x2.

Проверь выравнивание vdisk'ов и попробуй измерить случайное чтение и запись, только с dev/null и dev/zero с очисткой кеша, dev/random на таких скоростях будет тормозить.

Lordwind ★★★★★ ()

raid6 из ssd-дисков

Raid из ssd это плохая идея. К сожалению скорость записи ячеек ssd очень неравномерна и при одновременной записи на несколько ssd время записи значительно возрастает. Статья на хабре на эту тему.

dnf83 ()
Ответ на: комментарий от ien

Лучше используй стандартный линуксовый софтовый рейд, если нет каких-то особых причин. SmartArray это такой же софтовый рейд, только с проприетарным форматом и закрытой реализацией неизвестного качества.

Legioner ★★★★★ ()
Ответ на: комментарий от ien

Попробуй writeback поставить, если данные в виртуалках допустимо терять. Сильно увеличит производительность.

Legioner ★★★★★ ()
Ответ на: комментарий от ien

как вариант, из ssd делать зеркала и в LVM использовать набор зеркал

targitaj ★★★★★ ()
Ответ на: комментарий от ien

В теории RAID10 даст больше перфоманса при записи RAID6 даст больше перфоманса при последовательном чтении, и на нормальном контроллере при рандомном чтении должен показывать такуюже производительность как и RAID10.

Мой пост был больше направлен на то что я бы вам посоветовал использовать RAID5 вместо 6. Он более производителен (как на чтение так и на запись) + там будет меньше износ ячеек SSD (так как при записи 1 блока запись будет идти на 2 носителя, а у RAID6 запись идет на 3 носителя + более тяжолый расщет четности).

RAID6 изначально был придуман для решения проблем каскадного отказа архивных систем, вероятность которого на SSD дисках стремится к нулю.

А так еще много чего зависит от того как реализован именно ваш сторедж, может там RAID5/6 оптимизирован а RAID10 - нет, возможно есть смысл поробовать RAID01 вместо 10 часто бывает существенная разница в производительности из-за особенностей реализации.

zaz ★★★★ ()
Ответ на: комментарий от ien

Я пытался посмотреть количество iops для raid6 на 16 и raid10 на 2*6 + 4 spare, и оказалось, что на raid10 iops вдвое меньше.

Сколько намерялось?

Davyd ★★ ()
Ответ на: комментарий от Davyd

Да я перемерил и получились совсем другие числа.

Никакой закономерности и системы я в выхлопе fio не вижу. iopsы могут доходить до 10k и опускаться до 3k как на raid10 и raid6. и это при том, что на них нет никакой нагрузки, помимо fio.

ien ()
Ответ на: комментарий от Davyd

Там вроде пометка:

For MSA 2040 Solid State Drives (SSD) results, 200 GB Enterprise Mainstream SSDs were used in a dual controller configuration of 4 vdisks consisting of two disks per vdisk, 200 GB volumes, and 1 volume per host. 4 hosts directly attached to the HP MSA 2040 array were used in this test configuration (results cannot be expected with a single host).

Если я правильно понял, то они делали 4 RAID1 из SSD и цепляли к разным хостам свой диск. А потом сложили полученные на 4 хостах IOPS-ы ?

У меня Fibre Channel-вариант. Будет ли разумным сделать из 16 дисков 8xRAID1, а затем mdadm-ом сделать RAID0 ? Или их слова нужно трактовать так, что таких IOPS-ов я никогда не получу на одной машине?

Софт контроллера вроде как не позволяет протащить в систему голые диски.

ien ()
Ответ на: комментарий от zaz

Конечно, RAID5 должен быть побыстрее RAID6, но RAID10 должен быть еще быстрее! Да и износ SSD с RAID10 должен быть меньше, разве не так? Но на практике убедится в этом не получается, вот я и не понимаю, что делаю не так.

RAID01 контроллер не поддерживает =(

ien ()
Ответ на: комментарий от Legioner

Лучше используй стандартный линуксовый софтовый рейд, если нет каких-то особых причин. SmartArray это такой же софтовый рейд, только с проприетарным форматом и закрытой реализацией неизвестного качества.

Да вроде это железка, да с «батарейкой». Там writeback по умолчанию.

ien ()
Ответ на: комментарий от ien

я тоже очень долго смотрел «косо». Ниче, норм штука.

targitaj ★★★★★ ()
Ответ на: комментарий от ien

Конечно, RAID5 должен быть побыстрее RAID6, но RAID10 должен быть еще быстрее! Да и износ SSD с RAID10

В чтении RAID5/6 выигрывает у RAID10. При записи - смотря какая запись, если писать большими блоками (в вашем случае порядка 64К) то перфоманс RAID5/6 будет ВЫШЕ чем 10 (CPU затраты не учитываем так как отдельная железка) - если же писать рандомно мелкие блоки (до 4К) то RAID 10 будет выигрывать.

Но есть одно «НО» если в железке RAID 10 сделан «в лоб» тоесть это RAID1 оперирует с 2 большими виртуальными дисками без распаралеливания - то будет большая просадка (в этом случае можно накастылить через lvm).

RAID01 контроллер не поддерживает

Налипить 6 RAID1 и смержить их через lvm уже на хосте, в принципе костыль но по идее получите тотже RAID01 стабильность потерятся не должна.

zaz ★★★★ ()
Ответ на: комментарий от ien

Да вроде это железка, да с «батарейкой». Там writeback по умолчанию.

Если железка, тогда ладно. Вроде под брендом SmartArray у них софтовые рейды шли, наверное ошибся.

Legioner ★★★★★ ()

Кстати а кикие вообще цифры у вас (iops + bandwidth) ? И если массив очень сильно нагружался то может просто начали умирать SSD ? Насколько я понимаю через RAID truncate не протаскивается - как следствие износ SSD идет очень не равномерный, и некоторые блоки уже могли исчерпать свой ресурс - отсюда и тормоза (можно попробовать разобрать рейт и посмотреть смарт/потестить) каждый отдельно.

Прошлим летом гонял HP на (RAID5 на 6 SAS HDD) но postgresql сервере - скоростя были заоблачные (чтото порядка 5Gb/sec чтения и записи (full duplex) iops уже не помню).

zaz ★★★★ ()
Ответ на: комментарий от zaz

Контроллер пишет, что диски 100% здоровые.

Провел еще пару экспериментов. Сделал 6x(raid1 из 2 дисков) и обнаружил закономерность. Там два контроллера A, B. Получилось 6 LUN-ов, 3 на одном, 3 на другом.

Запускал fio вот так:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --bs=4k --iodepth=64 --readwrite=randrw --rwmixread=75 --filename=/dev/mapper/mpath?

Если запускать только на одном LUN с контроллера A, получается:
[132.4M/45052K /s] [33.9K/11.3K iops].

Если запускать только на одном LUN с контроллера B, получается:
[52528K/17632K /s] [13.2K/4408  iops].

Если одновременно на двух LUN из разных контроллеров:
A: [77748K/25468K /s] [19.5K/6604  iops]
B: [43616K/14352K /s] [10.1K/3588  iops]

Если одновременно на двух LUN из одинаковых контроллеров:
A: [75056K/24856K /s] [18.8K/6214  iops]
   [73816K/25220K /s] [18.5K/6305  iops]
B: [33628K/11396K /s] [8407 /2849  iops]
   [34320K/11196K /s] [8580 /2799  iops]

Если я правильно понял, то все упирается в контроллеры? Или в связь массива с хостом? Там 2 пары FC 8Gbit. Т.е. массив видит 2 хоста. А хост ходит в каждый raid1 по multipath.

Соседний сервер, где 16 дисков в raid6 на fio-тест на файлах выдает:
[82131K/27273K /s] [20.6K/6818  iops]

Это все вообще нормальные чиселки?

Правильно, ли я понимаю, что если я сейчас руками сделаю из этих 6 бедолаг общий диск, то будет работать в пределе с [13.2K/4408 iops] до [33.9K/11.3K iops] в зависимости от удачи?

Т.е. в среднем я получу тоже самое, что и с raid6 ?

И что нужно сделать, чтобы ситуация драматически поменялась? Другой контроллер?

ien ()
Ответ на: комментарий от bigbit

multipath -l:

mpathe (3600c0ff0001ea1096a77a95701000000) dm-1 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:1 sdc 8:32  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:1 sdi 8:128 active undef running
mpathd (3600c0ff0001e5c385977a95701000000) dm-3 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:0 sdb 8:16  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:0 sdh 8:112 active undef running
mpathi (3600c0ff0001ea1099277a95701000000) dm-6 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:5 sdg 8:96  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:5 sdm 8:192 active undef running
mpathh (3600c0ff0001ea1097f77a95701000000) dm-5 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:3 sde 8:64  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:3 sdk 8:160 active undef running
mpathg (3600c0ff0001e5c388977a95701000000) dm-4 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:4 sdf 8:80  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:4 sdl 8:176 active undef running
mpathf (3600c0ff0001e5c387577a95701000000) dm-2 HP,MSA 2040 SAN
size=372G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:0:2 sdd 8:48  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 2:0:0:2 sdj 8:144 active undef running

multipathd -k'show config': http://pastebin.com/quLpXuXv

ien ()
Ответ на: комментарий от ien

Контроллер пишет, что диски 100% здоровые.

Я бы ему не доверял, там скорее просто смотрится SMART (на предмет реалокейтов и долгочитаемых блоков) но только для SSD его нужно интерпретировать по другому. Нужно посмотреть именно SSD health (c этим немного проблемы там у разных вендеров по разному).

Это все вообще нормальные чиселки?

Смотря что у вас там за диски. Вообще цифры неплохие - но както маловато как для SSD - я бы ради интереса достал 1 SSD втыкнул бы его в SATA на сервере и провел точно такой-же тест (дальше можно былобы думать что теоретичски можно выжать из рейда собраного на нем). + неплохо посмотреть тест на последовательное чтение запись (там не iops смотреть а bandwidth).

Там два контроллера A, B. Получилось 6 LUN-ов, 3 на одном, 3 на другом.

На сколько дисков вообще расщитан массив ? Обычно контроллеры вибираются не рандомно а по подключению дисков. Тоесть у Контроллера A есть свои SATA порты у контроллера B - свои. Когда собирается RAID выжно собрать его на дисках одного контроллера и LUN привязать к нему-же. У вас выглядет так что все диски (или большинство) подключены (физически проводами) к контроллеру A и контроллеру B до них тяжело добиратся и он просаживается по скорости сильно.

/dev/mapper/mpath?

Это немного не то о чем я говорил, в вашей конфигурации я бы объеденил /dev/mapper/mpath[0..5] в один lvm раздел (или raid0 через md но мне кажется lvm будет полутчше особенно в плане виртуалок - можно прямо на нем нарезать диски не теряя перфоманса на драйвере FS) поидее скорость рандом доступа должна вырасти в несколько раз.

Соседний сервер, где 16 дисков в raid6 на fio-тест на файлах выдает

Ну в принципе RAID1 на A контроллере показывает значительно больше iops

Если одновременно на двух LUN из одинаковых контроллеров

скорость выше чем на 1 но далеко не в 2 раза, тоесть упираемся в пропускную способность чегото (возможно контроллера, возможно сети (хотя там меньше 2Gb получается), возможно PCI-e карточки в сервере) - неплохо бы помониторить загрузку CPU на самих контроллерах - возможно упираемся там, также тут поможет тест на линейную скорость чтения / записи - если сможем протянуть значительно больше чем 2Gb то с сетью все впорядке - если нет то нужно думать, может у вас не 5G а таки старая 2G фибра (раньше на массивах ставили 5-10Gb порты а вот на хост контроллерах 2Gb) и multipath настроен на backup без RR.

Вобщем мысли опять возвращаются к софтверному LVM (или MDADM RAID0) из кучи мелких RAID1. В идиале можно былобы 6 дисков подключить к контроллеру A (3xRADI1) и 6 дисков к контроллеру B (3xRAID) далее их завести на хост и склеить через один (A0 B0 A1 B1 A2 B2)

zaz ★★★★ ()
Ответ на: комментарий от ien

status=active status=enabled

Вот мне это не нравится, насколько я помню должно быть active + active (тоесть у вас используется только один канал - второй бекапный)

В данном свете увеличивается подозрение что у вас таки 2Gb порты на хосте и вы упираетесь в них посколько используется только один канал

zaz ★★★★ ()
Ответ на: комментарий от ien

Кстати еще интересно былобы посмотреть на цифры без multipath (тоесть напрямую sdc/sdi по однуму и паралельно)

zaz ★★★★ ()
Ответ на: комментарий от zaz

Вобщем мысли опять возвращаются к софтверному LVM (или MDADM RAID0) из кучи мелких RAID1. В идиале можно былобы 6 дисков подключить к контроллеру A (3xRADI1) и 6 дисков к контроллеру B (3xRAID) далее их завести на хост и склеить через один (A0 B0 A1 B1 A2 B2)

Чего-то такой бутер доверия не вызывает )). Я бы не рискнул.

Davyd ★★ ()
Ответ на: комментарий от Lordwind

Не, raid6 ограничивает иопсы одним диском, в реале даже меньше

Это на запись, и то, в конфах больше 4d+2p будет больше одного. На чтении будет сумма дисков.

EvgGad_303 ★★★★★ ()
Ответ на: комментарий от zaz

Налипить 6 RAID1 и смержить их через lvm уже на хосте, в принципе костыль но по идее получите тотже RAID01

Это тоже raid10 какбэ и довольно частая практика на таких вот псевдо-массивах.

EvgGad_303 ★★★★★ ()
Ответ на: комментарий от EvgGad_303

Сумма только по дискам данных и только для скорости, но не для иопсов. Для каждой операции IO с каждого диска запрашивается блок данных, т.к. они размазаны по массиву и еще и с избыточностью. Эта операция физически не может быть быстрее запроса соизмеримого блока с одного физического диска.

Lordwind ★★★★★ ()
Ответ на: комментарий от zaz

Вот мне это не нравится, насколько я помню должно быть active + active

Только для настоящих active-active массивов, либо если имеется несколько путей к активному контроллеру. Ни того, ни другого в данном случае не наблюдаем, так что все OK.

bigbit ★★★★★ ()
Ответ на: комментарий от ien

В общем у тебя весь ввод/вывод идет через контроллер A. Даже если луном владеет контроллер B, I/O все равно идет через A, отсюда и тормоза.
Поправь /etc/multipath.conf вот так:

path_grouping_policy   group_by_prio
prio                   alua 
После этого в multipath -l проверь, чтобы активным был путь до того контроллера, который владеет луном.

bigbit ★★★★★ ()
Ответ на: комментарий от zaz

В чтении RAID5/6 выигрывает у RAID10.

Почему? При правильной реализации не должно быть разницы при чтении с RAID-5, RAID-10 и RAID-0 на том же количестве дисков.

Там выше спеки давали:
RAID 10 Random Reads IOPS = 49,000
RAID 5 Random Reads IOPS = 49,000

bigbit ★★★★★ ()
Последнее исправление: bigbit (всего исправлений: 1 )
Ответ на: комментарий от bigbit

На RAID5 выше энтропия распределения блоков между дисками (нету 2 соседних блоков на одном диске) - как результат растет вероятность распаралеливани операций.

Например расмотрим ситуацию когда у нас размер блока 4К и 11 дисков в массиве и нам скажем нужно прочитать 1 последовательный блок на 40К. На RAID5 эту операцию можно распаралелить на 10 потоков и прочитать по 1 блоку с каждого диска, на RAID10 - можно распаралелить только на 2 потока по 5 блоков на диск.

zaz ★★★★ ()
Ответ на: комментарий от zaz

Это ты описал зеркалированный JBOD какой-то, а вовсе не R10. В R10 есть страйпинг.

bigbit ★★★★★ ()
Ответ на: комментарий от bigbit

Да, я когда постил, сам додумался стянуть настройки оттуда! Попробовал — получилось. Результаты стали более понятными.

В итоге буду делать два raid10 массива, один на каждый контроллер. Сшивать их не буду, чтобы не терять данные, если выйдет из строя только один из них.

Всем участвующим огромное спасибо, особенно bigbit-у!

ien ()
Ответ на: комментарий от Lordwind

Да что ты говоришь. У всех типов рэйда read penalty 1. У raid6 write penalty 6, т.е. в массиве 10d+2p будет 2x иопсов на запись.

EvgGad_303 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.