Я все еще новичок в 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+ мегабайт в секунду - это вполне разумно для таких недорогих дисков. (правда, большой размер блока)
Прочие примечания.