Сетевые технологии · 10 min read · Nov 30, 2025

Как настроить резервирование и высокую доступность сетевого объединения на Linux

Этот учебник объясняет, как настроить сетевое объединение на сервере Linux. Прежде чем я начну, позвольте мне объяснить, что такое сетевое объединение и что оно делает. В среде Windows сетевое объединение называется сетевым объединением, это функция, которая помогает любой серверной архитектуре обеспечивать высокую доступность и резервирование в сценариях, когда один из основных Ethernet-кабелей имеет неисправность или неправильно настроен.

Обычно это лучшая практика и обязательная функция, которую необходимо реализовать при настройке сервера для производственных целей. Хотя эта функция может быть выполнена в конфигурации Linux, вам сначала нужно подтвердить с вашим сетевым администратором, чтобы убедиться, что коммутаторы, подключенные к вашему серверу, поддерживают сетевое объединение. Существует несколько режимов объединения, которые вы можете реализовать в вашей серверной среде. Ниже приведен список доступных режимов и их функций:

  • Balance-rr
    Этот режим обеспечивает функции балансировки нагрузки и отказоустойчивости (резервирования) через политику кругового распределения. Это означает, что он передает пакеты в последовательном порядке от первого доступного подчиненного до последнего.
  • Active-Backup
    Этот режим обеспечивает функции отказоустойчивости через политику активного резервирования. Это означает, что как только Ethernet-соединение объединения активно, только 1 из подчиненных Ethernet активно. Другой подчиненный Ethernet станет активным только в том случае, если текущий активный подчиненный выйдет из строя. Если вы выберете этот режим, вы заметите, что MAC-адрес объединения виден только на одном сетевом адаптере. Это сделано для избежания путаницы с коммутатором.
  • Balance-xor
    Этот режим обеспечивает балансировку нагрузки и отказоустойчивость. Он передает данные на основе выбранной политики хеширования передачи. Альтернативные политики передачи могут быть выбраны через опцию xmit_hash_policy.
  • Broadcast
    Этот режим обеспечивает только отказоустойчивость. Он передает все данные на всех подчиненных Ethernet-интерфейсах.
  • 802.3ad
    Этот режим обеспечивает балансировку нагрузки и отказоустойчивость. Он создает группу агрегации, которая использует одинаковые настройки скорости и дуплекса. Он использует все подчиненные Ethernet-интерфейсы в активном агрегаторе, основанном на спецификации 802.3ad. Для реализации этого режима ethtool должен поддерживать базовые драйверы для получения скорости и режима дуплекса каждого подчиненного. Коммутатор также должен поддерживать динамическую агрегацию ссылок. Обычно это требует вмешательства сетевого инженера для детальной настройки.
  • Balance-TLB
    Этот режим обеспечивает возможности балансировки нагрузки, как указывает название TLB, представляющее балансировку нагрузки передачи. Для этого режима, если конфигурация tlb_dynamic_lb = 1, то исходящий трафик распределяется в соответствии с текущей нагрузкой на каждом подчиненном. Если конфигурация tlb_dynamic_lb = 0, то балансировка нагрузки отключена, и нагрузка распределяется только с использованием хеш-распределения. Для этого режима ethtool должен поддерживать базовые драйверы для получения скорости каждого подчиненного.
  • Balance-ALB
    Этот режим обеспечивает возможности балансировки нагрузки, как название TLB представляет адаптивную балансировку нагрузки. Похож на balance-tlb, за исключением того, что как передаваемый, так и принимаемый трафик объединены. Он получает балансировку нагрузки, достигая согласования ARP. Драйвер объединения перехватывает ответы ARP, отправленные локальной системой на выходе, и заменяет исходный аппаратный адрес уникальным аппаратным адресом одного из подчиненных в объединении. Для этого режима ethtool должен поддерживать базовые драйверы для получения скорости каждого подчиненного.

  1. Предварительная заметка

Для этого учебника я использую Oracle Linux 6.4 в 32-битной версии. Обратите внимание, что, хотя конфигурация выполняется в Oracle Linux, шаги также применимы к дистрибутивам CentOS и Red Hat и к 64-битным системам. Конечный результат нашей примерной настройки покажет, что соединение с нашим сервером объединения останется подключенным, даже если я отключу 1 из Ethernet-сетей. В этом примере я покажу, как применить сетевое объединение, используя режим 1, который является политикой активного резервирования.

  1. Этап установки

Для этого процесса установка не требуется. Стандартная установка Linux-сервера включает все необходимые пакеты для конфигурации сетевого объединения.

  1. Этап конфигурации

Перед тем как начать конфигурацию, сначала нам нужно убедиться, что у нас настроены как минимум 2 Ethernet-интерфейса на нашем сервере. Чтобы проверить это, перейдите в папку конфигурации сети и перечислите доступные Ethernet-интерфейсы. Ниже приведены шаги:

cd /etc/sysconfig/network-scripts/  
ls *ifcfg*eth*

Результат:

ifcfg-eth0 ifcfg-eth1 

Обратите внимание, что в данный момент у нас настроены 2 Ethernet-интерфейса на сервере, которые называются ETH0 и ETH1.

Теперь давайте настроим интерфейс объединения, называемый BOND0. Этот интерфейс будет виртуальным Ethernet-интерфейсом, который содержит физические Ethernet-интерфейсы ETH0 и ETH1. Ниже приведены шаги:

vi ifcfg-bond0
DEVICE=bond0  
ONBOOT=yes  
MASTER=yes  
IPADDR=172.20.43.110  
NETMASK=255.255.255.0  
GATEWAY=172.20.43.1  
BONDING_OPTS="mode=1 miimon=100"  
TYPE=Ethernet 

Затем выполните:

ls *ifcfg*bon*

Результат:

ifcfg-bond0 

Это все. Обратите внимание, что внутри интерфейса BOND0 я включил IP-адрес. Этот IP-адрес будет единственным IP-адресом, подключенным к нашему серверу. Чтобы продолжить процесс, нам нужно изменить физический Ethernet-интерфейс, связанный с интерфейсом BOND0. Ниже приведены шаги:

vi ifcfg-eth0
DEVICE=eth0  
TYPE=Ethernet  
ONBOOT=yes  
NM_CONTROLLED=no  
MASTER=bond0  
SLAVE=yes 
vi ifcfg-eth1
DEVICE=eth1  
TYPE=Ethernet  
ONBOOT=yes  
NM_CONTROLLED=no  
MASTER=bond0  
SLAVE=yes 

Готово. Мы внесли изменения в интерфейсы ETH0 и ETH1. Обратите внимание, что мы удалили IP-адрес из обоих интерфейсов и добавили MASTER = bond0. Это необходимо для подтверждения того, что оба интерфейса будут виртуальными интерфейсами, которые предназначены для Ethernet-интерфейса BOND0.

Чтобы продолжить конфигурацию, давайте создадим файл конфигурации объединения с именем bonding.conf в /etc/modprobe.d. Ниже приведены шаги:

vi /etc/modprobe.d/bonding.conf
alias bond0 bonding  
options bond0 mode=1 miimon=100 
modprobe bonding 

На основе вышеуказанной конфигурации мы настроили модуль объединения, используя интерфейс BOND0. Мы также назначили конфигурацию объединения для использования режима = 1, который является политикой активного резервирования. Опция miimon = 100 представляет собой частоту мониторинга для нашего сервера объединения, чтобы следить за состоянием интерфейса в миллисекундах. Как указано выше, этот режим обеспечит функции отказоустойчивости в конфигурации сети сервера.

Когда все настроено, давайте перезапустим сетевую службу, чтобы загрузить новую конфигурацию. Ниже приведены шаги:

service network restart
Shutting down interface eth0: [ OK ]  
Shutting down interface eth1: [ OK ]  
Shutting down loopback interface: [ OK ]  
Bringing up loopback interface: [ OK ]  
Bringing up interface bond0: [ OK ] 

Отлично, теперь мы загрузили новую конфигурацию, которую мы сделали выше. Вы заметите, что новый интерфейс, называемый BOND0, будет показан в списке сети. Вы также заметите, что IP-адрес не назначен интерфейсам ETH0 и ETH1, только интерфейс BOND0 показывает IP.

ifconfig
bond0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88  
inet addr:172.20.43.110 Bcast:172.20.43.255 Mask:255.255.255.0  
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link  
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1  
RX packets:1723 errors:0 dropped:0 overruns:0 frame:0  
TX packets:1110 errors:0 dropped:0 overruns:0 carrier:0  
collisions:0 txqueuelen:0  
RX bytes:147913 (144.4 KiB) TX bytes:108429 (105.8 KiB) 
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88  
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1  
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0  
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0  
collisions:0 txqueuelen:1000  
RX bytes:103486 (101.0 KiB) TX bytes:105439 (102.9 KiB) 
eth1 Link encap:Ethernet HWaddr 08:00:27:61:E4:88  
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1  
RX packets:632 errors:0 dropped:0 overruns:0 frame:0  
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0  
collisions:0 txqueuelen:1000  
RX bytes:44487 (43.4 KiB) TX bytes:3288 (3.2 KiB) 
lo Link encap:Local Loopback  
inet addr:127.0.0.1 Mask:255.0.0.0  
inet6 addr: ::1/128 Scope:Host  
UP LOOPBACK RUNNING MTU:16436 Metric:1  
RX packets:208 errors:0 dropped:0 overruns:0 frame:0  
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0  
collisions:0 txqueuelen:0  
RX bytes:18080 (17.6 KiB) TX bytes:18080 (17.6 KiB) 

Вы также можете проверить статус объединения с помощью этой команды:

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)  
Primary Slave: None  
Currently Active Slave: eth0  
MII Status: up  
MII Polling Interval (ms): 100  
Up Delay (ms): 0  
Down Delay (ms): 0 
Slave Interface: eth0  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:61:e4:88  
Slave queue ID: 0 
Slave Interface: eth1  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:c8:46:40  
Slave queue ID: 0 

Обратите внимание, что мы успешно преобразовали интерфейсы ETH0 и ETH1 в конфигурацию объединения, используя режим активного резервирования. Также теперь сервер использует интерфейс ETH0, а ETH1 будет резервным интерфейсом.

  1. Этап тестирования

Теперь, когда все настроено, как ожидалось. Давайте проведем простой тест, чтобы убедиться, что сделанная нами конфигурация правильная. Для этого теста мы войдем на новый сервер (или рабочий стол Linux) и начнем пинговать наш сервер объединения, чтобы увидеть, произойдет ли прерывание соединения во время теста. Ниже приведены шаги:

login as: root  
[email protected]'s password:  
Last login: Wed Sep 14 12:50:15 2016 from 172.20.43.80
ping 172.20.43.110
PING 172.20.43.110 (172.20.43.110) 56(84) bytes of data.  
64 bytes from 172.20.43.110: icmp_seq=1 ttl=64 time=0.408 ms  
64 bytes from 172.20.43.110: icmp_seq=2 ttl=64 time=0.424 ms  
64 bytes from 172.20.43.110: icmp_seq=3 ttl=64 time=0.415 ms  
64 bytes from 172.20.43.110: icmp_seq=4 ttl=64 time=0.427 ms  
64 bytes from 172.20.43.110: icmp_seq=5 ttl=64 time=0.554 ms  
64 bytes from 172.20.43.110: icmp_seq=6 ttl=64 time=0.443 ms  
64 bytes from 172.20.43.110: icmp_seq=7 ttl=64 time=0.663 ms  
64 bytes from 172.20.43.110: icmp_seq=8 ttl=64 time=0.961 ms  
64 bytes from 172.20.43.110: icmp_seq=9 ttl=64 time=0.461 ms  
64 bytes from 172.20.43.110: icmp_seq=10 ttl=64 time=0.544 ms  
64 bytes from 172.20.43.110: icmp_seq=11 ttl=64 time=0.412 ms  
64 bytes from 172.20.43.110: icmp_seq=12 ttl=64 time=0.464 ms  
64 bytes from 172.20.43.110: icmp_seq=13 ttl=64 time=0.432 ms 

В это время давайте вернемся к нашему серверу объединения и отключим Ethernet-интерфейс ETH0. Ниже приведены шаги:

ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88  
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1  
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0  
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0  
collisions:0 txqueuelen:1000  
RX bytes:103486 (201.0 KiB) TX bytes:105439 (122.9 KiB) 
ifdown eth0 

Теперь мы отключили службы для сетевого интерфейса ETH0. Давайте проверим статус объединения. Ниже приведены шаги:

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)  
Primary Slave: None  
Currently Active Slave: eth1  
MII Status: up  
MII Polling Interval (ms): 100  
Up Delay (ms): 0  
Down Delay (ms): 0 
Slave Interface: eth1  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:c8:46:40  
Slave queue ID: 0 

Вы заметите, что теперь интерфейс ETH0 больше не существует в статусе объединения. В это время давайте вернемся к предыдущему тестовому серверу и проверим непрерывный пинг к нашему серверу объединения.

64 bytes from 172.20.43.110: icmp_seq=22 ttl=64 time=0.408 ms  
64 bytes from 172.20.43.110: icmp_seq=23 ttl=64 time=0.402 ms  
64 bytes from 172.20.43.110: icmp_seq=24 ttl=64 time=0.437 ms  
64 bytes from 172.20.43.110: icmp_seq=25 ttl=64 time=0.504 ms  
64 bytes from 172.20.43.110: icmp_seq=26 ttl=64 time=0.401 ms  
64 bytes from 172.20.43.110: icmp_seq=27 ttl=64 time=0.454 ms  
64 bytes from 172.20.43.110: icmp_seq=28 ttl=64 time=0.432 ms  
64 bytes from 172.20.43.110: icmp_seq=29 ttl=64 time=0.434 ms  
64 bytes from 172.20.43.110: icmp_seq=30 ttl=64 time=0.411 ms  
64 bytes from 172.20.43.110: icmp_seq=31 ttl=64 time=0.554 ms  
64 bytes from 172.20.43.110: icmp_seq=32 ttl=64 time=0.452 ms  
64 bytes from 172.20.43.110: icmp_seq=33 ttl=64 time=0.408 ms  
64 bytes from 172.20.43.110: icmp_seq=34 ttl=64 time=0.491 ms 

Отлично, теперь вы увидите, что даже если мы отключили интерфейс ETH0, мы все равно можем пинговать и получать доступ к нашему серверу объединения. Теперь давайте проведем еще один тест. Включите интерфейс ETH0 и отключите интерфейс ETH1.

ifup eth0  
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)  
Primary Slave: None  
Currently Active Slave: eth1  
MII Status: up  
MII Polling Interval (ms): 100  
Up Delay (ms): 0  
Down Delay (ms): 0 
Slave Interface: eth1  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:c8:46:40  
Slave queue ID: 0 
Slave Interface: eth0  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:61:e4:88  
Slave queue ID: 0 

Поскольку интерфейс ETH0 уже был активен, давайте отключим интерфейс ETH1.

ifdown eth1
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)  
Primary Slave: None  
Currently Active Slave: eth0  
MII Status: up  
MII Polling Interval (ms): 100  
Up Delay (ms): 0  
Down Delay (ms): 0 
Slave Interface: eth0  
MII Status: up  
Speed: 1000 Mbps  
Duplex: full  
Link Failure Count: 0  
Permanent HW addr: 08:00:27:61:e4:88  
Slave queue ID: 0 

Теперь давайте вернемся к тестовому серверу и проверим, что происходит с непрерывным пингом, сделанным к нашему серверу объединения.

64 bytes from 172.20.43.110: icmp_seq=84 ttl=64 time=0.437 ms  
64 bytes from 172.20.43.110: icmp_seq=85 ttl=64 time=0.504 ms  
64 bytes from 172.20.43.110: icmp_seq=86 ttl=64 time=0.401 ms  
64 bytes from 172.20.43.110: icmp_seq=87 ttl=64 time=0.454 ms  
64 bytes from 172.20.43.110: icmp_seq=88 ttl=64 time=0.432 ms  
64 bytes from 172.20.43.110: icmp_seq=89 ttl=64 time=0.434 ms  
64 bytes from 172.20.43.110: icmp_seq=90 ttl=64 time=0.411 ms  
64 bytes from 172.20.43.110: icmp_seq=91 ttl=64 time=0.420 ms  
64 bytes from 172.20.43.110: icmp_seq=92 ttl=64 time=0.487 ms  
64 bytes from 172.20.43.110: icmp_seq=93 ttl=64 time=0.551 ms  
64 bytes from 172.20.43.110: icmp_seq=94 ttl=64 time=0.523 ms  

Отлично! Мы успешно настроили и доказали, что наш сервер объединения справляется с ситуацией восстановления после катастрофы в условиях сбоя сети.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.