Вопрос или проблема
Недавно мне пришлось создать новое клонированное изображение для моей компании, так как мы мигрировали с более старой аппаратной конфигурации на новую. Из-за некоторых требований заказчиков мы все еще используем CentOS 7.9 (2009). Предыдущая модель материнской платы, которую мы использовали, была Advantech ASMB-923, а мы мигрировали на Advantech ASMB-935.
После создания базового образа ОС и установки на него некоторого программного обеспечения, мы создали клон дисков для развертывания на других машинах. Но у меня возникли проблемы с сетевой конфигурацией. У машины есть два порта Gigabit Ethernet, а также PCI-карта с двумя портами 10 GB Ethernet. Обычно мы используем только порты Gigabit Ethernet для двух отдельных сетей, а порты 10 GB зарезервированы для очень специфического сценария использования, который мы не часто используем, но который является частью требований заказчика.
Мы используем eth для именования наших сетевых устройств, и eth0 должен использоваться для программной связи, в то время как eth1 – для аппаратной связи. Однако у меня возникла проблема с этой конкретной материнской платой, с которой я не сталкивался на предыдущей материнской плате. По какой-то причине иногда происходит изменение назначения идентификаторов eth на разные физические порты. Например, иногда eth1 назначается одному из портов 10 GB вместо порта Gigabit, как мы и хотим. Это нарушает нашу внутреннюю связь.
Я попытался исправить это с помощью простого сценария, который сопоставляет адреса PCI портов с конкретными именами устройств eth и использует “ip link set name“, чтобы переименовать устройства в соответствующее имя устройства, а затем добавил свойства HWADDR и NM_CONTROLLED=no в файлы ifcfg для связанных устройств. Также в каталоге “save” под /etc/sysconfig/network-scripts переписывались все изменения, которые я вносил в файлы ifcfg, поэтому я переименовал каталог, чтобы предотвратить это.
Я полагаю, что этого должно быть достаточно, но основная проблема очень нестабильна по частоте ее возникновения, поэтому я не уверен, как однозначно проверить, будет ли это решение работать, если вообще будет. Может кто-нибудь дать мне представление об этой проблеме и возможных лучших решениях или хотя бы подтвердить, будет ли мое решение надежным?
ПРАВКА: Я снова проверил машины сегодня утром и заметил два тревожных новых аномалии, которые выбрасывают мой скрипт в окно:
- На одной машине, проверяя сопоставление от имени устройства к адресу PCI под /sys/class/net, я обнаружил, что адреса PCI для портов 10 GB Ethernet больше не были “0000:1a:00.0” и “0000:1a:00.1”, а стали “0000:af:00.0” и “0000:af:00.1”. Свойство HWADDR и свойство NM_CONTROLLED=no также отсутствовали в файле ifcfg для eth1 и eth2.
- На другой машине адреса PCI остались прежними, но свойства HWADDR и NM_CONTROLLED отсутствовали в файлах ifcfg для eth1 и eth2, как выше.
Ответ или решение
Проблема с назначением Ethernet-портов в CentOS 7: решение и рекомендации
Недавняя миграция на новое оборудование, в частности, переход с материнской платы Advantech ASMB-923 на Advantech ASMB-935, привела к проблемам с сетевой конфигурацией в системе CentOS 7.9. В этих условиях назначение сетевых интерфейсов, таких как eth0 и eth1, стало неустойчивым и иногда приводило к неожиданным результатам, включая присвоение идентификаторов интерфейсов к неожиданным физическим портам, что негативно сказывалось на коммуникации.
Проблема назначения Ethernet-портов
CentOS 7 использует механизм, основанный на udev, для назначения сетевых интерфейсов. Этот механизм может генерировать разные идентификаторы интерфейсов в зависимости от различных факторов, таких как порядок инициализации оборудования, его состояние и даже наличие конфликтов. В вашем случае Ethernet-порты иногда могут быть обозначены неверными идентификаторами, что, в свою очередь, разрушает ваши сетевые связи.
Возможные решения проблемы
1. Использование ‘udev’ правил
Для детального и предсказуемого управления назначением имен сетевых интерфейсов вы можете создать собственные правила для udev. Эти правила позволят вам более точно контролировать, как будут именоваться сетевые интерфейсы на базе их физических адресов (MAC):
- Создайте файл
/etc/udev/rules.d/70-persistent-net.rules
. - Добавьте в него строки с информацией о MAC-адресах и желаемых именах интерфейсов.
Пример:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="yy:yy:yy:yy:yy:yy", NAME="eth1"
2. Корректировка конфигурационных файлов ‘ifcfg’
Несмотря на то что вы уже использовали настройки HWADDR
и NM_CONTROLLED
, убедитесь, что они правильно прописаны в конфигурационных файлах для каждого интерфейса. Вам необходимо убедиться, что эти файлы обновляются корректно и не перезаписываются:
- Проверьте, нет ли конфликта с инструментами управления сетями (например,
NetworkManager
). - Убедитесь, что вы добавили
NM_CONTROLLED=no
в файлы/etc/sysconfig/network-scripts/ifcfg-ethX
, чтобы предотвратить изменения, вносимыеNetworkManager
.
3. Идентификация и устранение проблем с PCI
Как вы упомянули о том, что PCI-адреса изменяются, это может быть связано с тем, что оборудование не инициализируется должным образом. Убедитесь, что:
- Вы используете последние версии BIOS и микропрограммного обеспечения для вашей материнской платы.
- Перепроверьте конфигурацию в BIOS на предмет настроек инициализации PCI.
4. Использование скриптов для автоматизации
Если проблема сохраняется, вы можете использовать скрипты для автоматического переименования интерфейсов по определённым критериям при каждом перезапуске системы. Это может быть не идеальным решением, но временным обходным путем.
5. Мониторинг и тестирование
Ваши наблюдения о том, как конфигурация может изменяться между перезагрузками, подсказывают, что потребуется тщательный мониторинг. Регулярный контроль состояния сетевых интерфейсов и их конфигураций поможет выявить корень проблемы.
Заключение
Неустойчивая работа сетевых интерфейсов в среде CentOS 7 может быть следствием различных факторов, включая конфликты и неправильные назначения. Постоянное соблюдение принципов управления конфигурацией, использование специфичных правил для udev и мониторинг состояния оборудования помогут устранить данную проблему. Убедитесь также в актуальности драйверов и микропрограммного обеспечения вашего серверного оборудования.