понедельник, 14 августа 2017 г.

vSAN All-Flash с дедупликацией и компрессией для домашней лаборатории

Обновление 12.12.2017: Найден обходной вариант, который позволяет настроить VSAN и включить дедупликацию и компрессию без использования vCenter Server. Смотрите ниже по тексту.

Для тех, кто планирует построить свою домашнюю лабораторию на базе гипервизора VMware ESXi и программной СХД VMware vSAN, может пригодится следующая уловка, позволяющая включить поддержку дедупликации и компрессии на standalone хосте.

Думаю, что многие из вас находили статьи по т.н. bootstrap установке, когда vSAN настраивает без сервера управления vCenter Server и без какого-либо промежуточного хранилища. В частности такой способ развертывания используется в гиперконвергентных платформах VxRail и VxRack. С учетом текущей стоимости flash накопиетелй и присутствия на рынке платформ типа Intel NUC, становится возможным собрать весьма производительний, компактный и не очень дорогой сервер для домашней лаборатории.

С гибридными конфигурациями vSAN все достаточно просто, в Интернете можно найти множество детальных руководств по такой настройке, однако, если вы решите использовать дедупликацию и компрессию на all-flash конфигурациях, то вам потребуется сделать несколько дополнительных шагов.

Поддержка компрессии и дедупликации появилась в vSAN 6.2, соответственно, вам потребуется использовать ESXi 6.0 U2 или выше.

Среди плюсов данного режима развертывания - отсутствие необходимости использования сервера управления vCenter Server для настройки и дальнейшей эксплуатации vSAN.
Для настройки также необходим функционирующий сервер vCenter Server. Это, пожалуй, главный недостаток данного варианта по сравнению с типовым vSAN Bootstrap, но это необходимый шаг для настройки Space Efficiency на дисковых группах с all-flash накопителями. В моем случае я развернул временный сервер vCenter на другом компьютере. После выполнения настроек сервер vCenter можно будет выключить и удалить.

Для настройки vSAN включите SSH на хосте и подключитесь к нему.

Включите на интерфейсе VMKernel поддержку vSAN, например:
esxcli vsan network ipv4 add -i vmk0
Проверьте, что интерфейс успешно добавлен:
esxcli vsan network list
При помощи команды vdq -q проверьте, что накопители опознаются гипервизором как SSD, а накопитель, предназначенный для хранения данных, имеет аттрибут isCapacityFlash:
vdq -q
[
   {
      "Name"     : "naa.6000c29f63422c9b752b4e16b0853303",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
      "IsSSD"    : "0",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
   },
   {
      "Name"     : "naa.6000c2914ef142687a2ea87a31a4c207",
      "VSANUUID" : "522af0ce-c313-dbfb-21b7-ba8e0b509778",
      "State"    : "In-use for VSAN",
      "Reason"   : "None",
      "IsSSD"    : "1",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
   },
   {
      "Name"     : "naa.6000c29dc7b03388ce238783d25a085c",
      "VSANUUID" : "52964ee8-1ad3-51ee-8850-8315e0ebceb6",
      "State"    : "In-use for VSAN",
      "Reason"   : "None",
      "IsSSD"    : "1",
"IsCapacityFlash": "1",
      "IsPDL"    : "0",
   },
]
Если накопитель не опознается как SSD устройство, то вы можете вручную пометить его. Выполните команду:
esxcli storage nmp device list
Выполните команды, подставив нужный идентификатор naa и satp из вывода предыдущей команды:
esxcli storage nmp satp rule add --satp=VMW_SATP_LOCAL --device naa.600508b1001cdb71c7edb8e80eb6abf3 --option "enable_ssd"
esxcli storage core claiming unclaim --type=device --device naa.600508b1001cdb71c7edb8e80eb6abf3
esxcli storage core claimrule load
esxcli storage core claimrule run
esxcli storage core claiming reclaim --device naa.600508b1001cdb71c7edb8e80eb6abf3
Если накопитель не помечен как CapacityFlash вы можете использовать команду, чтобы назначить на него нужный тэг (если этого не сделать, вы получите сообщение об ошибке при попытке добавить накопитель в дисковую группу в качестве capacity накопителя):
esxcli vsan storage tag add -d naa.6000c29dc7b03388ce238783d25a085c -t capacityFlash
Подключитесь к серверу vCenter, в виртуальной инфрастуруктуре создайте кластер и активируйте в нем поддержку vSAN.

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

Переведите хост в режим обслуживания (maintenance mode) и уберите его из кластера. Выведите хост из режима обслуживания.

Перед настройкой кластера требуется включить поддержку дедупликации и компрессии для триальной лицензии VSAN. Сделать это можно из консоли SSH хоста, выполнив команду:
vsish -e set /config/VSAN/strOpts/LicensedFeatures vit,allflash,stretchedcluster,erasurecoding,storageefficiency,encryption
В консоли SSH хоста создайте новый кластер vSAN:
esxcli vsan cluster new
Проверьте, что хост корректно добавился в кластер:
esxcli vsan cluster get
Cluster Information
   Enabled: true
   Current Local Time: 2017-08-11T22:01:45Z
   Local Node UUID: 598e2050-a425-2c28-5426-005056aacefb
   Local Node Type: NORMAL
   Local Node State: MASTER
   Local Node Health State: HEALTHY
   Sub-Cluster Master UUID: 598e2050-a425-2c28-5426-005056aacefb
   Sub-Cluster Backup UUID:
   Sub-Cluster UUID: 598e2050-a425-2c28-5426-005056aacefb
   Sub-Cluster Membership Entry Revision: 0
   Sub-Cluster Member Count: 1
   Sub-Cluster Member UUIDs: 598e2050-a425-2c28-5426-005056aacefb
   Sub-Cluster Membership UUID: 05298e59-0555-5bb1-c414-005056aacefb
   Unicast Mode Enabled: true
   Maintenance Mode State: OFF

Отредактируйте политики хранения на хосте, добавив опцию forceProvisioning. Данная опция игнорирует остальные параметры политики при создании объекта на vSAN в том случае, если они не могут быть соблюдены (а это как раз наш случай, т.к. для standalone хоста параметр hostFailuresToTolerate=1 соблюсти не получится):
esxcli vsan policy setdefault -c cluster -p "((\"hostFailuresToTolerate\" i1) (\"forceProvisioning\" i1))"
esxcli vsan policy setdefault -c vdisk -p "((\"hostFailuresToTolerate\" i1) (\"forceProvisioning\" i1))" 
esxcli vsan policy setdefault -c vmnamespace -p "((\"hostFailuresToTolerate\" i1) (\"forceProvisioning\" i1))"
Проверьте настройки политики при помощи команды:
esxcli vsan policy getdefault
Policy Class  Policy Value
------------  --------------------------------------------------------
cluster       (("hostFailuresToTolerate" i1) ("forceProvisioning" i1))
vdisk         (("hostFailuresToTolerate" i1) ("forceProvisioning" i1))
vmnamespace   (("hostFailuresToTolerate" i1) ("forceProvisioning" i1))
vmswap        (("hostFailuresToTolerate" i1) ("forceProvisioning" i1))
vmem          (("hostFailuresToTolerate" i1) ("forceProvisioning" i1))

Включите поддержку дедупликации и компрессии:
esxcli system settings advanced set -o "/VSAN/DedupScope" -i 2
Проверьте значение параметра:
esxcli system settings advanced list -o "/VSAN/DedupScope"
Добавьте диски в дисковую группу:
esxcli vsan storage add -d naa.6000c29dc7b03388ce238783d25a085c -s naa.6000c2914ef142687a2ea87a31a4c207
Проверьте, что диски добавлены и на них включена поддержка дедупликации и компрессии:
esxcli vsan storage list
naa.6000c2914ef142687a2ea87a31a4c207
   Device: naa.6000c2914ef142687a2ea87a31a4c207
   Display Name: naa.6000c2914ef142687a2ea87a31a4c207
   Is SSD: true
   VSAN UUID: 522af0ce-c313-dbfb-21b7-ba8e0b509778
   VSAN Disk Group UUID: 522af0ce-c313-dbfb-21b7-ba8e0b509778
   VSAN Disk Group Name: naa.6000c2914ef142687a2ea87a31a4c207
   Used by this host: true
   In CMMDS: true
   On-disk format version: 5
   Deduplication: true
   Compression: true
   Checksum: 6910810568216580648
   Checksum OK: true
   Is Capacity Tier: false
   Encryption: false
   DiskKeyLoaded: false

naa.6000c29dc7b03388ce238783d25a085c
   Device: naa.6000c29dc7b03388ce238783d25a085c
   Display Name: naa.6000c29dc7b03388ce238783d25a085c
   Is SSD: true
   VSAN UUID: 52964ee8-1ad3-51ee-8850-8315e0ebceb6
   VSAN Disk Group UUID: 522af0ce-c313-dbfb-21b7-ba8e0b509778
   VSAN Disk Group Name: naa.6000c2914ef142687a2ea87a31a4c207
   Used by this host: true
   In CMMDS: true
   On-disk format version: 5
   Deduplication: true
   Compression: true
   Checksum: 4407850188756192377
   Checksum OK: true
   Is Capacity Tier: true
   Encryption: false
   DiskKeyLoaded: false
   
Если вы используете неподдерживаемы устройства, отключите мониторинг, чтобы лишний раз не обращать внимание на оповещения:
esxcli system settings advanced set -o /LSOM/VSANDeviceMonitoring -i 0 
При развертывание ВМ из web-консоли ESXi я наткнулся на небольшой баг. При подключении к ESXi напрямую через web-клиент, имя хранилища отображается с пробелом "vSAN Datastore", тогда как в интерфейсе vSphere Web Client и через CLI, как "vSANDatastore", это приводит к ошибке при попытке развернуть ВМ через ESXi Web Client. Исправить это можно, просто переименовав хранилище в vSANDatastore.

К сожалению, ESXi Web Client не отображает достаточное количество информации о vSAN, поэтому об эффективности работы дедупликации и компрессии придется судить "на глаз".

3 комментария:

  1. Насколько такой вариант интереснее вот такого? https://b3n.org/wp-content/uploads/2015/07/vmware_all_in_one_with_storage_network.png

    Если vSAN скармливать диски в режиме passthrough, как при этом работает redundancy? К примеру, имеем 4 SSD диска под capacity и 2 под cache - что будет в случае отказа одного из дисков на standalone host?

    ОтветитьУдалить
    Ответы
    1. Я не в курсе текущих функциональных возможностей FreeNAS. Поддерживает ли он дедупликацию и компрессию данных?

      В standalone конфигурации vSAN отказоустойчивости нет, отказ любого накопителя cache tier приводит к потере всех данных, хранящихся на дисковой группе, отказ накопителя в capacity tier - к потере всех данных, которые на нем хранились.

      Удалить
    2. Фактически мы говорим не о FreeNAS, а ZFS. Последняя - это по сути файловая система all-in-one: программный raid, снапшоты, репликация, кеширование, дедупликация (дорого по оперативной памяти) и компрессия lz4. ZFS всем хороша, но лично мне не нравится как в ней устроено кеширование записи + дорогая дедупликация. Как на меня, если бы не эти минусы, это была бы чуть ли не идеальная файловая система, на которой можно было бы делать очень достойные программные СХД.

      То есть единственный способ получить какую-то отказоустойчивость - скармливать vSAN железный RAID-1? В этом плане ZFS, конечно, намного интереснее.

      Удалить