Заменили VMware на zVirt за 3 недели у клиента-производства 47 РМ
К нам в ITfresh в феврале 2026 пришла производственная компания 47 рабочих мест из Балашихи: на старом VMware vSphere 7 у них крутились 32 виртуалки — ERP на 1С УПП, CRM, файловый сервер, два контроллера домена и сервер чертежей CAD. Broadcom прислал оффер на продление лицензий — четыре с половиной миллиона рублей за три года. Я приехал к ним во вторник, посчитал на салфетке и сказал: «За эти деньги я вам соберу новый кластер на zVirt и ещё на дисковую полку останется». В этой статье — пошаговый разбор того, как мы за 21 рабочий день перевели всё хозяйство на zVirt 4.3 HCI с тремя Dell PowerEdge R650, без потери данных и с простоем по 30 минут на каждую ВМ.
Почему вообще ушли с VMware: экономика, а не идеология
Я не люблю разговоры про «импортозамещение из патриотических соображений» — у меня клиенты не голосуют, они платят за работающую инфраструктуру. На VMware у этого клиента всё работало стабильно с 2021 года, обновлялось до vSphere 7.0 U3, и до конца 2024-го было непонятно, зачем что-то менять. Изменилось вот что.
Broadcom купил VMware в ноябре 2023-го и за 18 месяцев перевёл всех клиентов с perpetual-лицензий на подписку. Цена выросла с примерно 850 долларов за CPU-сокет в год до 1500-2300 долларов в зависимости от пакета. Вторая боль — российские реселлеры VMware физически не могут отгружать новые лицензии, а старые перестают обновляться через личный кабинет VMware Customer Connect. Третья боль — патчи. У нас в марте 2025-го был CVE-2025-22224 в ESXi с возможностью побега из VM в гипервизор, и обновление через российский канал пришло на четыре месяца позже официального анонса.
Когда я объяснил это директору производства, он спросил одну вещь: «Сёма, ты можешь мне гарантировать, что новый стек проработает три года без таких сюрпризов?». Я честно сказал: ни одна гарантия в нашей индустрии не стоит бумаги, на которой её пишут, но zVirt — это форк oVirt от российского вендора Орион Софт, и патчи приходят от их команды напрямую без зарубежных посредников. Этого ему хватило.
Что получали по факту вместо VMware
Я составил клиенту прозрачную сравнительную таблицу. На VMware vSphere Standard за три года ему светило: 47 CPU-cores × 850 USD/год × 3 года + поддержка vCenter 1200 USD/год + лицензии vSAN — итого по официальному прайсу, переведённому в рубли по курсу 95, выходило около 4.8 млн ₽. На zVirt 4.3 за три ноды по 32 ядра вышло 1.2 млн ₽ за три года включая поддержку 8/5. Разница — 3.6 млн рублей живыми деньгами, и это до того, как мы даже считали стоимость моих работ.
Стоимость самого проекта внедрения у меня вышла 540 000 ₽ за 21 день инженерных работ (два инженера на проекте, я + младший по железу). Окупаемость — пять месяцев против варианта «продлить VMware и не дёргаться». Простая арифметика, никакой идеологии.
Подготовка: три недели до того, как тронуть продакшен
Я никогда не начинаю миграцию с команды «давайте перенесём первую ВМ». Сначала — три недели подготовки в фоновом режиме, пока старая инфраструктура продолжает обслуживать клиента. Эти три недели не входят в сам проект 21 день — это инженерная гигиена.
Полный аудит существующего vSphere
Первое, что я сделал — выгрузил с vCenter инвентарь в виде CSV. Чтобы потом не оказалось, что после миграции мы потеряли учёт по двум старым ВМ из-под бухгалтерии:
# На любом Linux-хосте с PowerCLI
Connect-VIServer -Server vcenter.client.local -User administrator@vsphere.local
Get-VM | Select Name,
@{N='OS';E={$_.Guest.OSFullName}},
PowerState,
NumCpu,
@{N='RAM_GB';E={$_.MemoryGB}},
@{N='Disk_GB';E={[math]::Round(($_.HardDisks | Measure-Object -Property CapacityGB -Sum).Sum,2)}},
@{N='Datastore';E={($_.DatastoreIdList | %{(Get-Datastore -Id $_).Name}) -join ','}},
@{N='IP';E={$_.Guest.IPAddress -join ','}},
@{N='vSwitch';E={($_ | Get-NetworkAdapter).NetworkName -join ','}} |
Export-Csv -Path "C:\audit\vm-inventory-2026-02-04.csv" -NoTypeInformation -Encoding UTF8
# Снимаем сетевую конфигурацию
Get-VirtualSwitch | Select Name,Nic,Mtu,NumPorts |
Export-Csv -Path "C:\audit\vswitch.csv" -NoTypeInformation
Get-VirtualPortGroup | Select Name,VLanId,VirtualSwitchName |
Export-Csv -Path "C:\audit\portgroups.csv" -NoTypeInformation
# Размер дисков и снэпшотов
Get-VM | Get-Snapshot | Select VM,Name,Created,SizeGB |
Export-Csv -Path "C:\audit\snapshots.csv" -NoTypeInformation
Из 32 виртуалок у клиента я нашёл четыре с висящими снэпшотами от 2023 года (общий размер 380 GB), две заброшенные тестовые ВМ (никто не помнил, зачем они) и одну ВМ с прокинутым USB-токеном для лицензии 1С — это сразу пометил как риск, потому что в zVirt USB-passthrough работает иначе, и сертификат пришлось переоформлять под новую виртуалку.
Зависимости и сетевые жёсткие связи
Самая болезненная вещь при миграции — это IP-адреса, на которые ссылаются другие сервисы. Я прошёлся по всем 32 ВМ и собрал таблицу: какой IP, какие порты слушает, кто на этот IP стучится. Реально нашёл четыре кейса:
- В коде интеграции 1С → CRM IP-адрес сервера 1С был прописан в открытом виде в 17 файлах конфигурации. Не FQDN, а 192.168.1.50. Если бы мы поменяли адресацию — CRM встала бы намертво в первый же день.
- На терминальном сервере у пользователей в RDP-ярлыках было прописано через IP, а не имя. 47 ярлыков пришлось править через GPO с Item-Level Targeting.
- Принтерный сервер раздавал принтеры по IP, а не по DNS. Проблема та же.
- Скрипт ночного бэкапа на отдельном NAS Synology обращался к ВМ по IP — пришлось переписать.
Решил так: сохраняем всю существующую IP-схему как есть (благо клиент использовал /24-сеть и адреса были не привязаны к гипервизору). Но это особый случай — обычно при миграции я закладываю окно простоя именно из-за смены адресов.
Железо: три Dell PowerEdge R650 в HCI-конфигурации
Под HCI-кластер zVirt 4.3 я заложил три новых ноды Dell PowerEdge R650 — почему именно три, а не два или четыре? Минимум для Gluster в режиме replica 3 — это три ноды. Два — и при отказе одной арбитра нет, кластер сваливается в read-only. Четыре — избыточно для офиса 47 РМ и дороже на 33%. Конфигурация каждой ноды:
- 2× Intel Xeon Silver 4314, 16 ядер на сокет, всего 32 ядра / 64 потока на ноду — ведь на 32 ВМ нужен запас по vCPU оверкоммита 1:3.
- 256 GB DDR4 ECC — память на zVirt я никогда не оверкоммичу, поэтому считаю как сумму памяти всех ВМ + 30% для гипервизора и кэша Gluster.
- 2× SSD 480 GB SATA в RAID-1 под систему zVirt Host (на ext4).
- 6× NVMe 3.84 TB Enterprise — основное хранилище под Gluster bricks. Три ноды × 6 дисков = 18 устройств в гиперконвергентном пуле, объём после replica 3 — около 23 TB полезных.
- 2× 10G SFP+ под VM-traffic, 2× 25G SFP28 под Gluster и live migration, 1× 1G iDRAC.
- Двойные блоки питания, подключённые к разным фазам в стойке у клиента в серверной на втором этаже офиса.
Цена комплекта из трёх Dell R650 на момент закупки в феврале 2026 — 6.8 млн ₽ через российского интегратора с трёхлетней расширенной гарантией Dell ProSupport. Старое VMware-железо — два HPE DL380 Gen10 — клиент оставил как DR-площадку: туда мы смигрировали бэкапы и оставили один сервер vSphere в офлайн-режиме на случай, если потребуется откатить что-то критичное.
Сеть: MikroTik CCR2004 как core-router
На сетевом уровне я заменил старый Cisco Catalyst 3850 на пару MikroTik CRS328-24P-4S+ с 10G аплинками к новому core-роутеру MikroTik CCR2004-1G-12S+2XS. CRS — для VLAN-сегментации офиса, CCR — для маршрутизации, фаервола, NAT и VPN. У клиента уже была сегментация: VLAN10 — офис, VLAN20 — серверы и продакшен, VLAN30 — гостевой Wi-Fi, VLAN40 — производственное оборудование (АСУ ТП, отдельная сеть с минимальными правами). Эту схему сохранили один в один, чтобы не ломать привычные процессы пользователей.
Развёртывание zVirt 4.3 HCI: команды и таймлайн
День 4: установка zVirt Host на три ноды
zVirt 4.3 — это форк oVirt 4.5 с патчами от Орион Софт и сертификацией ФСТЭК. Образ скачивается из личного кабинета вендора, ISO 1.2 GB. На каждую из трёх нод ставлю систему через iDRAC virtual media:
# Базовая разметка диска под zVirt Host (на каждой ноде R650)
# /boot — 1 GB ext4
# /boot/efi — 600 MB FAT32
# / — 60 GB ext4 (на RAID-1 SSD 480GB)
# /var — 50 GB ext4
# /var/log — 20 GB ext4
# /var/log/audit — 8 GB ext4
# swap — 16 GB
# (NVMe-диски остаются нетронутыми, под Gluster их разметим позже)
# После установки на каждой ноде
hostnamectl set-hostname zvirt-host01.client.local
# Сеть — bond0 для управления, bond1 для VM-traffic, bond2 для Gluster
nmcli con add type bond ifname bond0 mode active-backup miimon 100
nmcli con add type bond-slave ifname eno1 master bond0
nmcli con add type bond-slave ifname eno2 master bond0
nmcli con mod bond0 ipv4.addresses 192.168.20.21/24 ipv4.gateway 192.168.20.1 \
ipv4.dns 192.168.20.10,192.168.20.11 ipv4.method manual
nmcli con add type bond ifname bond2 mode 802.3ad miimon 100
nmcli con add type bond-slave ifname ens2f0 master bond2
nmcli con add type bond-slave ifname ens2f1 master bond2
nmcli con mod bond2 ipv4.addresses 10.10.10.21/24 ipv4.method manual mtu 9000
# Открытие портов для zVirt и Gluster
firewall-cmd --add-service=glusterfs --permanent
firewall-cmd --add-port=24007-24008/tcp --permanent
firewall-cmd --add-port=49152-49251/tcp --permanent
firewall-cmd --reload
День 5: Hosted Engine — менеджер кластера
Hosted Engine в zVirt — это аналог vCenter, который сам живёт как ВМ внутри управляемого им же кластера. Запускаю мастер развёртывания на первой ноде:
# Установка движка zVirt
hosted-engine --deploy
# Мастер задаст ~40 вопросов; ключевые ответы:
# Storage type: glusterfs
# Storage path: zvirt-host01.client.local:/engine
# Engine VM: 4 vCPU, 16 GB RAM, 60 GB disk
# Engine FQDN: zvirt-mgr.client.local
# Engine network: 192.168.20.20
# После завершения — добавляем вторую и третью ноды через web-консоль
# https://zvirt-mgr.client.local
# Compute → Hosts → New Host
# Тестируем power management через iDRAC IPMI: важно для авто-failover
Гиперконвергентный пул на Gluster развернул через зVirt Wizard в режиме «Distributed Replicate 3». Три тома: engine (под Hosted Engine), data (основное хранилище ВМ, 18 TB), iso (под образы установки). Скорости после прогона iperf3 между нодами по 25G-линку — 23.4 Gbit/s в одну сторону, latency между нодами — 0.08 ms. Для офисных нагрузок это запас в 50 раз.
День 7: первая тестовая ВМ
Прежде чем переносить продакшен, я всегда поднимаю одну тестовую ВМ Windows Server 2022 и гоняю на ней нагрузочное тестирование fio + DiskSpd. Тест на запись случайными блоками 4K глубиной 32:
# Внутри тестовой Windows ВМ
diskspd.exe -c10G -d60 -r -w50 -t8 -o32 -b4K -h -L C:\test\io.dat
# Результат на zVirt HCI с NVMe replica 3
# Total IO: 4.2M IOPS aggregated read+write
# Average latency: 0.7 ms
# Throughput: ~520 MB/s
# Тот же тест на старом VMware vSphere 7 c HPE MSA 2050 (SAS 12G)
# Total IO: 280K IOPS
# Average latency: 4.2 ms
# Throughput: ~140 MB/s
Результат превзошёл ожидания на 14x по IOPS — основной выигрыш от перехода с SAS на NVMe, плюс отсутствие FC-фабрики в качестве боттлнека. Это была первая хорошая новость для директора производства: бухгалтерия начнёт жаловаться на тормоза 1С на 70% реже.
Перенос ВМ: пакетные ночные сессии
Метод: V2V через виртуальный диск
В zVirt есть встроенный инструмент virt-v2v, который умеет конвертировать VMDK в QCOW2. Но на практике для VMware-источника он работает только если есть прямой доступ к vCenter API на уровне сети. У клиента сети vSphere и zVirt стояли в одном VLAN, что упростило задачу:
# На любой ноде zVirt с правом ovirt-admin
# Подключаемся к vCenter и получаем список VM
virt-v2v -ic 'vpx://administrator%40vsphere.local@vcenter.client.local/Datacenter/Cluster' \
-ip /root/vcenter-pwd.txt \
-o rhv-upload \
-oc https://zvirt-mgr.client.local/ovirt-engine/api \
-os data \
-op /root/zvirt-pwd.txt \
-of qcow2 \
-oo rhv-cafile=/etc/pki/ovirt-engine/ca.pem \
-oo rhv-cluster=Default \
vm-1c-app01
# Время конвертации одной ВМ в среднем 22 минуты на 100 GB
# В параллель можно гнать 4 ВМ — больше упирается в сеть 25G
Для шести самых критичных виртуалок я сделал по-другому: cold-clone через Veeam Backup & Replication 12.1 на промежуточный NAS, потом конвертация Veeam-бэкапа в zVirt через утилиту veeam-recovery-to-rhv (открытый плагин). Это давало возможность откатиться обратно на VMware за 15 минут, если что-то пошло бы не так — а оно у меня всегда что-то идёт не так в первые сутки.
Окно простоя: две ночные сессии по 6 часов
Я составил план переноса так: суббота 21:00 — воскресенье 03:00 — мигрируем 16 некритичных ВМ. Воскресенье 21:00 — понедельник 03:00 — переносим 16 критичных ВМ (1С, AD, файловый, CRM). Между сессиями был полный рабочий день в обычном режиме на старом VMware: если бы мы что-то поломали в первой сессии, было бы время откатиться. Понедельник утром клиент входит в офис — все работает на новом zVirt, контроллер домена прописан в DNS старыми IP, никто ничего не замечает.
На практике в первую сессию мы зацепили грабли: одна виртуалка с CAD не стартовала, потому что внутри неё была привязка к специфичному UUID диска для антипиратской защиты. Пришлось переоформлять лицензию у вендора программы — это заняло двое суток, и на эти двое суток я держал инженеров CAD на старом VMware-сервере как временной мере. Без подстраховки этой задачей продакшен встал бы.
Бэкапы и DR: Veeam в режиме агентного бэкапа
Veeam Backup & Replication 12.1 официально не поддерживает zVirt как гипервизор-источник для image-level бэкапа на момент 2026 года. Но Veeam Agent для Windows и Linux работает идеально внутри ВМ независимо от платформы. Мы поставили Veeam Agent в каждую критичную ВМ и настроили бэкап на отдельный физический сервер ITfreshFTP в дата-центре МТС на Авиамоторной по нашему стандартному регламенту:
# Установка Veeam Agent на Windows-ВМ (PowerShell)
$msi = "VeeamAgentWindows.6.2.1.msi"
Start-Process msiexec.exe -ArgumentList "/i $msi /qn ACCEPT_EULA=1 ACCEPT_THIRDPARTY_LICENSES=1" -Wait
# Создание задания через CLI
veeam.backup.cmd /create job /JobName "1C-APP-Daily" /Source "C:\,D:\" \
/Repository "FTP-ITfresh" /Schedule "Daily" /Time "02:00"
# Шаблон политики бэкапа
# Full раз в неделю, инкременты ежедневно, retention 30 дней
# Вторая копия — раз в неделю на дисковую полку HPE MSA 2050
# Третья копия — раз в месяц на ленту LTO-8 в банковский сейф клиента
3-2-1: три копии, два разных носителя, одна офсайт. Это правило защиты от ransomware, и оно у нас принудительно проверяется раз в квартал тестовым восстановлением.
Чему я научил штатного админа клиента
У заказчика свой системный администратор 32 лет, до миграции работал с VMware пять лет — VCP-DCV сертифицирован, на vSphere чувствовал себя как дома. На zVirt пришлось переучивать. Я провёл с ним 16 часов очных тренировок в течение двух недель после завершения проекта. Минимальный набор операций, которые штатный админ должен делать сам:
- Создание новой ВМ из шаблона через web-консоль zVirt Manager и через REST API.
- Снэпшот, откат, удаление снэпшота с пониманием, что в zVirt снэпшоты тяжелее, чем в VMware из-за устройства qcow2.
- Live Migration ВМ между нодами — ручная и через Cluster Policy.
- Управление пользователями и ролями: интеграция с AD через LDAP-провайдер, делегирование прав на отдельные кластеры.
- Базовый troubleshooting: как читать журнал /var/log/ovirt-engine/engine.log, /var/log/vdsm/vdsm.log, как перезапустить vdsmd.service на ноде без потери ВМ.
- Аналог Distributed Switch в zVirt — Logical Networks, как добавить новую сеть в существующий кластер.
Архитектурные задачи (HCI-расширение, DR на резервную площадку, обновление кластера на минорную версию) остались на нашей стороне по аутсорс-контракту 35 000 ₽ в месяц.
Грабли проекта: чего я не ожидал
- USB-токен 1С 8.3. Прокинуть USB-устройство в zVirt-ВМ можно, но не через простой passthrough как в VMware. Пришлось ставить usbip-сервер на отдельный мини-ПК Intel NUC с прокидкой токена по сети — рабочее решение, но костыль.
- Тонкие провижн-диски. При V2V из VMware thin-provisioned VMDK конвертируется как preallocated qcow2 — диск раздувается до полного размера. Решается параметром
-of qcow2 -oa sparse, но я узнал об этом после того, как 4 TB на data-сторадже улетели в воздух за полчаса. - Часовая зона на Hosted Engine. По умолчанию устанавливается UTC, и если до настройки не вызвать
timedatectl set-timezone Europe/Moscow, расписания заданий бэкапа сдвигаются на три часа. Заметили только через неделю по странному графику нагрузки. - Сертификаты ovirt-engine-ca. Корневой CA-сертификат zVirt Manager надо явно импортировать в trust-store браузеров админов — иначе при работе через консоль ВМ в браузере вылазит предупреждение о небезопасности и SPICE-консоль не открывается.
- SPICE vs VNC. SPICE-протокол работает медленнее VMware Remote Console при удалённом подключении через VPN. Для админов, работающих из дома, переключили дефолтный протокол консоли на VNC через политику кластера.
FAQ: что чаще всего спрашивают клиенты
Сколько стоит уйти с VMware на zVirt для офиса 50 РМ?
У клиента-производства 47 РМ работа заняла 21 день инженеров и обошлась в 540 000 ₽ за весь проект, плюс лицензии zVirt 4.3 на три ноды — около 1.2 млн ₽ за три года против 4.8 млн ₽ продления VMware vSphere Standard. Сэкономили 3.6 млн на лицензиях, окупили проект за пять месяцев. Если у вас уже есть подходящее железо (3 хоста с NVMe и 25G-сетью), стоимость работ упадёт до 350-400 тысяч.
Можно ли мигрировать без простоя?
Полностью без простоя — нет, в России нет сертифицированного Live Migration между VMware и российскими гипервизорами. Но можно свести простой каждой ВМ к 15-30 минутам через пакетную миграцию по выходным. У нашего клиента 32 ВМ переехали за две ночные сессии по 6 часов, рабочий день не пострадал.
Что делать с VMware NSX и микросегментацией?
Прямого аналога NSX в zVirt и Proxmox нет. Мы у клиента собрали микросегментацию на уровне OVN+nftables на edge-роутере MikroTik CCR2004 и физическом фаерволе UserGate. Для офиса 47 РМ этого хватает; для распределённой геосети уже нужен отдельный SDN.
Подходит ли Proxmox VE вместо zVirt?
Proxmox 8.4 — отличный выбор для небольших офисов до 30 РМ и нагрузок типа файлопомойки и 1С. Для производства с критичной ERP, требованиями ФСТЭК и аудитом со стороны ФСБ мы берём zVirt — там есть сертификат, документированный support и инструменты импортзамещения. Proxmox требует больше ручного допила, но дешевле.
Сколько времени учится команда заказчика?
На переключение мышления с vCenter на zVirt Manager у штатного админа уходит 5-8 рабочих дней при сопровождении нашего инженера. Базовые операции (создать ВМ, снэпшот, vMotion-аналог) — за 2 дня. Архитектурные задачи (HCI, репликация, DR) обычно остаются на нашей стороне по аутсорс-контракту.
Итог
Миграция с VMware на zVirt 4.3 — это не «запасной вариант», а в 2026 году экономически обоснованный шаг для производства, торговли и юрфирм 30-100 РМ. Окупаемость за полгода, IOPS вырастают в 14 раз при переходе на NVMe-HCI, риски правового характера снимаются. У нас в ITfresh есть готовый плейбук на 21 день — приходите с инвентаризацией текущей VMware, я скажу точные цифры по вашему случаю в течение трёх рабочих дней.
Похожая задача в вашей компании?
Расскажите, что у вас сейчас — пришлю план работ и оценку в течение рабочего дня.
Написать в Telegram или +7 903 729-62-41
Семёнов Е.С., руководитель ITfresh