Назад | Перейти на главную страницу

Размещение сервера ZFS в качестве виртуального гостя

Я все еще новичок в ZFS. Я использовал Nexenta, но думаю о переходе на OpenIndiana или Solaris 11 Express. Прямо сейчас я подхожу к рассмотрению возможности виртуализации сервера ZFS в качестве гостя в ESXi, Hyper-V или XenServer (я еще не решил, какой из них - я склоняюсь к ESXi для поддержки VMDirectPath и FreeBSD).

Основная причина в том, что кажется, что у меня достаточно ресурсов для обхода, и я мог бы легко иметь 1-3 других виртуальных машины, работающих одновременно. В основном Windows Server. Может быть, и виртуальная машина Linux / BSD. Я бы хотел, чтобы виртуализированный сервер ZFS размещал все данные для других виртуальных машин, чтобы их данные могли храниться на физически отдельных дисках от дисков ZFS (монтируются как iscsi или nfs).

В настоящее время на сервере установлен AMD Phenom II с 6 ядрами (2 разблокированных), 16 ГБ ОЗУ (максимально возможное количество) и HBA-адаптер LSI SAS 1068E с (7) подключенными дисками SATA II емкостью 1 ТБ (планируется на RAIDZ2 с горячим резервом). У меня также есть (4) 32 ГБ SATA II SSD, подключенных к материнской плате. Я надеюсь отразить два SSD на загрузочном зеркале (для виртуального хоста), а два других SSD оставить для ZIL и L2ARC (для гостевой виртуальной машины ZFS). Я хочу добавить еще два диска для хранения гостевых виртуальных машин и выделить все семь текущих дисков в качестве хранилища ZFS. Примечание: материнская плата не есть поддержка IOMMU, поскольку 880G не поддерживает ее, но у меня есть плата 890FX, на которой есть IOMMU, если это имеет большое значение.

Мои вопросы:

1) Разумно ли это делать? Я не вижу очевидных недостатков (что заставляет меня задаться вопросом, почему об этом никто не упомянул). Я чувствую, что могу совершить огромную оплошность, и мне не хотелось бы брать на себя обязательства, перемещать все свои данные только для того, чтобы сойти с ума от какой-то мелкой детали, которую я пропустил.

2) Производительность виртуального гостя ZFS? Я готов немного снизить производительность, но я бы подумал, что если у гостевой виртуальной машины будет полный доступ к дискам, то, по крайней мере, производительность дискового ввода-вывода будет незначительной (по сравнению с невиртуализированной ZFS) . Может ли кто-нибудь сказать об этом, исходя из опыта размещения сервера ZFS в качестве гостя виртуальной машины?

Я создал несколько таких «универсальных» систем хранения ZFS. Первоначально вдохновлен отличными публикациями на сайте Вездесущий разговор, мое решение использует несколько иной подход к проектированию оборудования, но дает результат инкапсулированного виртуализированного хранилища ZFS.

Чтобы ответить на ваши вопросы:

  • Решение о том, действительно ли это мудрый подход, зависит от ваших целей. Что вы пытаетесь достичь? Если у вас есть технология (ZFS) и вы ищете для нее приложение, то это плохая идея. Лучше использовать подходящий аппаратный RAID-контроллер и запускать виртуальные машины в локальном разделе VMFS. Это путь наименьшего сопротивления. Однако, если у вас есть конкретная причина для использования ZFS (репликация, сжатие, безопасность данных, переносимость и т. Д.), То это определенно возможно, если вы готовы приложить усилия.

  • Производительность сильно зависит от вашего дизайна, независимо от того, работаете ли вы на «голом железе» или в виртуальном. С помощью PCI-проход (или AMD IOMMU в вашем случае) имеет важное значение, поскольку вы предоставляете своей виртуальной машине ZFS прямой доступ к контроллеру хранилища SAS и дискам. Пока вашей виртуальной машине выделен соответствующий объем ОЗУ и ресурсов ЦП, производительность близка к нормальной. Конечно, дизайн вашего бассейна имеет значение. Пожалуйста, рассмотрите зеркала по сравнению с RAID Z2. ZFS масштабируется по vdev, а не по количеству дисков.


Моя платформа VMWare ESXi 5 и моя предпочтительная операционная система с поддержкой ZFS - NexentaStor Community Edition.

Это мое домой сервер. Это HP ProLiant DL370 G6 запуск ESXi с внутренней SD-карты. Два зеркальных диска по 72 ГБ в центре подключены к внутреннему RAID-контроллеру Smart Array P410 и образуют том VMFS. Этот том содержит виртуальную машину NexentaStor. Помните, что виртуальная машина ZFS должна жить где-то на стабильном хранилище.

Есть Контроллер LSI 9211-8i SAS подключенный к отсеку для дисководов, шесть дисков SATA емкостью 1 ТБ справа. Он передается на виртуальную машину NexentaStor, что позволяет Nexenta видеть диски как конфигурацию RAID 1 + 0. Диски el-cheapo Western Digital Green WD10EARS диски выровнен правильно с измененным zpool двоичный.

Я не использую устройство ZIL или какой-либо кеш L2ARC в этой установке.

На виртуальной машине выделено 6 ГБ ОЗУ и 2 виртуальных ЦП. В ESXi, если вы используете PCI-passthrough, будет создано резервирование памяти для всего объема ОЗУ, назначенного виртуальной машине.

Даю ВМ NexentaStor два сетевых интерфейса. Один предназначен для управления трафиком. Другой является частью отдельного vSwitch и имеет интерфейс vmkernel (без внешнего восходящего канала). Это позволяет виртуальной машине предоставлять хранилище NFS, подключаемое ESXi через частную сеть. Вы можете легко добавить интерфейс восходящей связи для обеспечения доступа к внешним хостам.

Установите новые виртуальные машины в хранилище данных, экспортированное в ZFS. Обязательно установите параметры «Запуск / завершение работы виртуальной машины» в ESXi. Вы хотите, чтобы виртуальная машина хранилища загружалась раньше гостевых систем и завершала свою работу.


Вот Бонни ++ и iozone результаты запуска непосредственно на ВМ NexentaStor. Сжатие ZFS отключено, чтобы в тесте отображались более достоверные числа, но на практике сжатие ZFS по умолчанию (не gzip) должно всегда быть включенным.

# bonnie++ -u root -n 64:100000:16:64

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
saint           12G   156  98 206597  26 135609  24   410  97 367498  21  1478  17
Latency               280ms    3177ms    1019ms     163ms     180ms     225ms
Version  1.96       ------Sequential Create------ --------Random Create--------
saint               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
    64:100000:16/64  6585  60 58754 100 32272  79  9827  58 38709 100 27189  80
Latency              1032ms     469us    1080us     101ms     375us   16108us

# iozone -t1 -i0 -i1 -i2 -r1m -s12g

    Iozone: Performance Test of File I/O

    Run began: Wed Jun 13 22:36:14 2012

    Record Size 1024 KB
    File size set to 12582912 KB
    Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
    Output is in Kbytes/sec
    Time Resolution = 0.000001 seconds.
    Throughput test with 1 process
    Each process writes a 12582912 Kbyte file in 1024 Kbyte records

    Children see throughput for  1 initial writers  =  234459.41 KB/sec
    Children see throughput for  1 rewriters        =  235029.34 KB/sec
    Children see throughput for  1 readers          =  359297.38 KB/sec
    Children see throughput for 1 re-readers        =  359821.19 KB/sec
    Children see throughput for 1 random readers    =   57756.71 KB/sec
    Children see throughput for 1 random writers    =  232716.19 KB/sec

Это график NexentaStor DTrace, показывающий количество операций ввода-вывода в секунду и скорость передачи данных виртуальной машины хранилища во время тестового запуска. 4000 IOPS и 400+ мегабайт в секунду - это вполне разумно для таких недорогих дисков. (правда, большой размер блока)

Прочие примечания.

  • Вы захотите протестировать свои твердотельные накопители, чтобы увидеть, могут ли они быть представлены непосредственно виртуальной машине или DirectPath выбирает весь контроллер материнской платы.
  • У вас не так много мощности процессора, поэтому ограничьте единицу хранения до 2 виртуальных ЦП.
  • Не используйте RAIDZ1 / Z2 / Z3, если вам действительно не нужно место на диске.
  • Не используйте дедупликацию. Сжатие бесплатное и очень полезно для виртуальных машин. Чтобы дедупликация была эффективной, потребуется гораздо больше RAM + L2ARC.
  • Начните без твердотельных накопителей и при необходимости добавьте их. Определенные рабочие нагрузки не бейте ЗИЛ или L2ARC.
  • NexentaStor - это полный пакет. В наличии надежного графического интерфейса управления есть преимущество, однако я слышал об успехе с Напп-Оно также.