При установке ESXi автоматически создаётся виртуальный адаптер vmk0. И у него есть MAC адрес, который копируется с первого использующегося физического интерфейса. А потом не меняется, даже если физически сменить сетевую карту. Потом эту карту вставляем в другой сервер, устанавливаем ESXi и получаем vmk0 с тем же самым MAC адресом. И это очень плохо. Два гипервизора с одинаковым MAC адресом начинают глючить.
Добиться такого же эффекта можно разными способами:
- Использовать одну и туже сетевую карту при установке ESXi.
- Раскатывать ESXi на сервера из одного образа.
- Вручную изменить файл конфигурации ESXi.
- Использовать ESXi на флешке и переткнуть в другой сервер.
- Вставить диск с ESXi в другое шасси.
- Заменить материнскую плату со встроенной сетевой картой.
- Поменять сетевые карты.
Вот так и я переставил диски с VMFS в другой сервер, перенастроил его, сохранив ОС ESXi. А старый сервер какое-то время поработал под Windows, затем снова был переделан в гипервизор. И вот тут-то начались проблемы.
Интерфейс управления стал пропадать на время. vCenter — терять хост. Виртуалки перестали мигрироваться. Ошибки, разные, к примеру:
Failed waiting for data. Error 195887179. Connection reset by peer.
VMotionStream [168574494:1553682792364674222] timed out while waiting for disk 1's queue count to drop below the maximum limit of 32768 blocks. This could indicate either network or storage problems preventing proper block transfer.
Failed to copy source (/vmfs/volumes/60ffef52-911280f8-2ea4-48df37728a30/kafka01/kafka01_1.vmdk) to destination (/vmfs/volumes/59db4f58-78b7c9bc-f177-5820b1e03c90/kafka01/kafka01_1.vmdk): Timeout.
Failed to copy one or more disks.
A fatal internal error occurred. See the virtual machine's log for more details.
The migration transfer failed during the receive operation to socket 73780444154944: received 0/36 bytes: Connection reset by peer.
vMotion migration [168574494:1553682792364674222] failed to read stream keepalive: Connection reset by peer
Failed waiting for data. Error 195887179. Connection reset by peer.
Сетевики помогли обнаружить проблему с MAC адресами. Я начал ковыряться и нашёл корень зла.
Правильные настройки на первом гипервизоре. MAC адрес на физическом адаптере 48:df:37:72:8a:30:
MAC адрес на vmk0 первого сервера 48:df:37:72:8a:30:
MAC адреса совпали.
Правильные настройки на втором гипервизоре. MAC адрес на физическом адаптере 98:03:9b:3c:b4:62:
MAC адрес на vmk0 второго сервера 48:df:37:72:8a:30:
Проблема, на обоих серверах у vmk0 один и тот же MAC адрес.
Решение проблемы
Проблема известная:
https://kb.vmware.com/s/article/1031111
Наиболее правильное решение — автоматически распознавать новый MAC адрес физического адаптера и использовать его. Для этого используется команда:
esxcfg-advcfg -s 1 /Net/FollowHardwareMac
Мешает то, что после этого потребуется перезагрузка. А у меня на хосте работают виртуалки, их нельзя отключать. Виртуалки можно смигрировать, однако миграция отваливается с ошибкой, которую я описал выше. Что делать?
Создаём ещё один адаптер vmk1. Включаем на нём vMotion, а на vmk0 отключаем vMotion. Можно было бы и Management переключить, но не хочется возиться с адресами и DNS.
Настраиваем на vmk1 сеть, чтобы можно было с него мигрировать виртуалки. Теперь виртуалки мигрируются без ошибок. Освобождаем от них гипервизор. Удаляем адаптер vmk1.
Выполняем (по SSH если работает, или в ESXi Shell):
esxcfg-advcfg -s 1 /Net/FollowHardwareMac
Перезагружаем сервер.
Другое дело!