Troubleshooting IP-Hash outbound NIC selection

Troubleshooting IP-Hash outbound NIC selection

Оригинальная статья в VMware Knowledge Base
Troubleshooting IP-Hash outbound NIC selection (KB Article: 1007371)

Симптомы

Если вы настроили NIC Team (с использованием двух физических uplink'ов и EtherChannel) с целью увеличения пропускной способности до двух различных сетевых хранилищ (обычно NFS или iSCSI), и если для балансировки нагрузки вы используете IP-Hash (Route based on IP hash), то у вас могут возникнуть следующие проблемы:


  • Трафик на vSwitch не сбалансирован по uplink адаптерам
  • Весь трафик передается только через один uplink адаптер

Route based on IP hash - при использовании данной политики трафик от одного порта "виртуальной" стороны может выходить сразу через все порты "физической" стороны. Идентификатором условной "сессии", передаваемой через один pNIC, является не номер виртуального порта, как в первом случае, а хеш пары "IP-источник IP-получатель". Таким образом, трафик от одной ВМ к одному клиенту не займет больше одного pNIC, а вот трафик один-ко-многим может занять сразу все.

Выше приведенное описание Route based on IP hash взято из статьи, представленной в блоге Михаила Михеева www.vm4.ru.


Решение

Выше приведенные проблемы могут возникать из-за того, что при вычислении hash (хэш) для пары "IP-источник (source) IP-получатель (destination)", возвращается один и тот же результат. Чтобы решить данную проблему, воспользуйтесь ниже приведенными практическими примерами, чтобы вручную вычислить хэш для пары ip адресов. Эти примеры помогут вам выбрать два IP адреса так, чтобы использовались оба uplink адаптера на vSwitch.


Практический пример №1

В этом примере IP адреса для NFS хранилищ подобраны НЕПРАВИЛЬНО.


В данном примере мы использовали vSwitch с двумя uplink адаптерами, EtherChannel и политику балансировки нагрузки IP-Hash:


Links = 2 (0 и 1)

VMKnic 10.0.0.10 = 0xa00000a

NFS1 10.0.0.20 = 0xa000014

NFS2 10.0.0.22 = 0xa000016

  • Используйте следующую IP-Hash формулу, чтобы вычислить исходящий (outbound) адаптер:

VMKnic > NFS1 (0xa00000a Xor 0xa000014 =1E) % 2= 0

VMKnic > NFS2 (0xa00000a Xor 0xa000016 =1C) % 2= 0

    1. Откройте калькулятор, выберите Вид -> Программист (верное для Windows 2008 R2).
    2. Введите VMKnic IP адрес в HEX формате (a00000a) и нажмите Xor.
    3. Введите IP адрес NFS1 в HEX формате (a000014) и нажмите =.
    4. Нажмите Mod, потом 2 (кол-во uplink адаптеров) и затем нажмите =. Результат будет 0.
    5. Повторите действия с 1 по 5, используя при этом HEX IP адреса NFS2 (a000016) в шаге 3. Результат будет 0.

IP-Hash выберет первый uplink адаптер в группе потому, что у них один и тот же результат. То есть, в данном случае, когда у первого NFS сервера IP адрес 10.0.0.20, а у второго 10.0.0.22, политика балансировки нагрузки IP-Hash нам абсолютно ничем не поможет. Весь трафик будет ходить только через один физический сетевой интерфейс. Чтобы этого избежать, для NFS серверов нужно специальным образом подобрать необходимые IP адреса. Чуть ниже показан пример, в котором для NFS серверов подобраны правильные IP адреса.


Практический пример №2

В этом примере IP адреса для NFS хранилищ подобраны ПРАВИЛЬНО.


  • Измените IP адрес для NFS2 с 10.0.0.22 на 10.0.0.21
  • Используя любой online IP Hex Конвертер, преобразуйте IP адреса в Hex.

Links = 2 (0 и 1)

VMknic 10.0.0.10 = 0xa00000a

NFS1 10.0.0.20 = 0xa000014

NFS2 10.0.0.21 = 0xa000015

  • Используйте следующую IP-Hash формулу, чтобы вычислить исходящий (outbound) адаптер:

VMKnic > NFS2 (0xa00000a Xor 0xa000015 =1F) % 2= 1

    1. Откройте калькулятор, выберите Вид -> Программист.
    2. Введите VMKnic IP адрес в HEX формате (a00000a) и нажмите Xor.
    3. Введите IP адрес NFS2 в HEX формате (a000015) и нажмите =.
    4. Нажмите Mod, потом 2 (кол-во uplink адаптеров) и затем нажмите =. Результат будет 1.

Теперь IP-Hash алгоритм возвращает другой результат. А это значит, что IP-Hash будет распределять трафик, используя оба uplink адаптера на свиче (vSwitch). То, что нам и нужно.


Post Scriptum

Используя нехитрые инструменты (в частности, обычный windows калькулятор) и данную статью (либо статью в базе знаний VMware), можно избежать возможных ошибок при проектировании сетевой инфраструктуры. Как было видно, неправильно назначенный IP адрес для сетевого хранилища, может привести к тому, что мы не получим ожидаемого результата от политики балансировки нагрузки IP-Hash.


В общем, данный документ обязателен к прочтению каждому администратору виртуальной и сетевой инфраструктуры. Чуть ниже приведу пару ссылок на посты, так или иначе касающиеся темы балансировки нагрузки с использованием IP-Hash:



Если у вас на предприятии используется распределенный коммутатор (dvSwitch), то вам нужно использовать для балансировки нагрузки LBT, вместо Route based on IP hash. Почему именно так, написано в другом моём посте.

Version history
Revision #:
1 of 1
Last update:
‎05-25-2011 05:42 AM
Updated by: