Сетевые технологии · 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 должен поддерживать базовые драйверы для получения скорости каждого подчиненного.
- Предварительная заметка
Для этого учебника я использую Oracle Linux 6.4 в 32-битной версии. Обратите внимание, что, хотя конфигурация выполняется в Oracle Linux, шаги также применимы к дистрибутивам CentOS и Red Hat и к 64-битным системам. Конечный результат нашей примерной настройки покажет, что соединение с нашим сервером объединения останется подключенным, даже если я отключу 1 из Ethernet-сетей. В этом примере я покажу, как применить сетевое объединение, используя режим 1, который является политикой активного резервирования.
- Этап установки
Для этого процесса установка не требуется. Стандартная установка Linux-сервера включает все необходимые пакеты для конфигурации сетевого объединения.
- Этап конфигурации
Перед тем как начать конфигурацию, сначала нам нужно убедиться, что у нас настроены как минимум 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-bond0DEVICE=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-eth0DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes vi ifcfg-eth1DEVICE=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.confalias bond0 bonding
options bond0 mode=1 miimon=100 modprobe bonding На основе вышеуказанной конфигурации мы настроили модуль объединения, используя интерфейс BOND0. Мы также назначили конфигурацию объединения для использования режима = 1, который является политикой активного резервирования. Опция miimon = 100 представляет собой частоту мониторинга для нашего сервера объединения, чтобы следить за состоянием интерфейса в миллисекундах. Как указано выше, этот режим обеспечит функции отказоустойчивости в конфигурации сети сервера.
Когда все настроено, давайте перезапустим сетевую службу, чтобы загрузить новую конфигурацию. Ниже приведены шаги:
service network restartShutting 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.
ifconfigbond0 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/bond0Ethernet 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 будет резервным интерфейсом.
- Этап тестирования
Теперь, когда все настроено, как ожидалось. Давайте проведем простой тест, чтобы убедиться, что сделанная нами конфигурация правильная. Для этого теста мы войдем на новый сервер (или рабочий стол Linux) и начнем пинговать наш сервер объединения, чтобы увидеть, произойдет ли прерывание соединения во время теста. Ниже приведены шаги:
login as: root
[email protected]'s password:
Last login: Wed Sep 14 12:50:15 2016 from 172.20.43.80ping 172.20.43.110PING 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 eth0eth0 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/bond0Ethernet 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/bond0Ethernet 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 eth1cat /proc/net/bonding/bond0Ethernet 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 Отлично! Мы успешно настроили и доказали, что наш сервер объединения справляется с ситуацией восстановления после катастрофы в условиях сбоя сети.
Get new posts in your inbox
No spam. Unsubscribe anytime.