Nettverk: Teaming av nettkort

Dette dokumentet beskriver hvordan man setter opp network teaming på RHEL7 og nyere.

Gjelder RHEL7 og nyere

1   Innledning

På RHEL er prosedyren for å sette opp to nettkort i standby-modus, klipp og lim-oppskrift, forutsetter at maskinen er installert med eth0 som nettkort.

Illustrasjon bonding mode=1

Denne figuren illustrerer hvordan den vanligste formen for teaming fungerer. Her er to nettkort eth0 og eth1 satt opp som failover for hverandre (runner: activebackup). Dersom det aktive nettkortet (eth0) feiler eller mister link, vil det passive (eth1) overta sømløst.

Denne veiledningen beskriver konfigurasjon av teaming ved å redigere på filer under /etc/sysconfig/network-scripts. Det er fullt mulig å bruke andre metoder, f.eks. nmtui for å sette opp teaming, men manuell redigering er vår anbefalte metode. Verktøyet nmtui vil gjøre ting endel annerledes enn det som er beskrevet i denne veiledningen.

2   Konfigurasjon av nett-interface

For å finne ut hvilke nettverkskort som er tilgjengelig på en maskin, kjøres følgende kommando:

maskin.uio.no# nmcli device
DEVICE  TYPE      STATE         CONNECTION
ens1f1  ethernet  connected     ens1f1
ens3f1  ethernet  connected     ens3f1

All konfigurasjon gjøres i katalogen /etc/sysconfig/network-scripts. Ta først en kopi av ifcfg-eth0 til ifcfg-team0:

maskin.uio.no# cd /etc/sysconfig/network-scripts
maskin.uio.no# cp ifcfg-eth0 ifcfg-team0

Editer ifcfg-team0 så den ser slik ut (eksempel):

DEVICE=team0
NAME="team0"
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
IPADDR=129.240.2.29
PREFIX=27
GATEWAY=129.240.2.1
DNS1=129.240.2.27
DNS2=129.240.2.40
DOMAIN=uio.no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6ADDR=2001:700:100:2::29/64
IPV6_DEFAULTGW=2001:700:100:2::1
TEAM_CONFIG='{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'

Opsjonen TEAM_CONFIG er spesiell. Syntaks skal være JSON, og ettersom det er et shell-script som leser denne filen må alt være på en linje. Det viktigste her er runner, som tilsvarer "mode" for bonding:

Runner Beskrivelse
broadcast Simple runner which directs the team device to transmit packets via all ports.
roundrobin Simple runner which directs the team device to transmits packets in a round-robin fashion.
activebackup Watches for link changes and selects active port to be used for data transfers.
loadbalance To do passive load balancing, runner only sets up BPF hash function which will determine port for packet transmit. To do active load balancing, runner moves hashes among available ports trying to reach perfect balance.
lacp Implements 802.3ad LACP protocol. Can use same Tx port selection possibilities as loadbalance runner.

For mer informasjon om disse, se dokumentasjon fra Red Hat: Configure teamd runners.

Notat

I denne veiledningen konsentrerer vi oss om de to vanligste, activebackup og lacp. Disse tilsvarer mode=1 og mode=4 for bonding (RHEL6 og eldre).

Editer ifcfg-eth0 slik at den ser slik ut (eksempel):

DEVICE=eth0
NAME=eth0
TYPE=TeamPort
ONBOOT=yes
HWADDR=3c:a8:2a:14:28:34
TEAM_MASTER=team0

Tilsvarende for ifcfg-eth1 (eksempel):

DEVICE=eth1
NAME=eth1
TYPE=TeamPort
ONBOOT=yes
HWADDR=5c:b9:01:8d:de:0d
TEAM_MASTER=team0

Nettverket restartes med service network restart.

Dersom man ønsker å sette prioritet på kortene, gjøres det ved å legge inn TEAM_PORT_CONFIG i ifcfg-ethX. F.eks. dersom vi ønsker at eth0 skal være default:

ifcfg-eth0:

TEAM_PORT_CONFIG='{"prio": 100}'

ifcfg-eth1:

TEAM_PORT_CONFIG='{"prio": -10, "sticky": true}'

Her har vi også valgt å gjøre eth1 "sticky", dvs. at den ikke vil bytte til et annet interface med høyere prioritet dersom det blir tilgjengelig ved en senere anledning.

3   Status for et team-interface

Man kan få status på et team-interface ved å gi kommandoen:

teamdctl <interface> state

Eksempel:

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  eno1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eno50
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: eno50

Se for øvrig manual-siden til teamdctl.

3.1   Logging av failover/nettverksproblemer

Om det oppstår en feil på den aktive linken, så vil dette bli logget til journald, og man kan se etter feilen i loggen på denne måten:

[root@nyserac ~]# journalctl -u NetworkManager  --since "5 minutes"
-- Logs begin at fr. 2017-05-19 14:18:11 CEST, end at ma. 2017-05-22 12:55:02 CEST. --
mai 22 12:49:17 nyserac.uio.no NetworkManager[1894]: em3: ethtool-link went down.
mai 22 12:49:17 nyserac.uio.no NetworkManager[1894]: Changed active port to "em4".
mai 22 12:53:32 nyserac.uio.no NetworkManager[1894]: em3: ethtool-link went up.
mai 22 12:53:32 nyserac.uio.no NetworkManager[1894]: <info>  [1495450412.2730] device (em3): link connected

5   IPv6 ekstra config

Linux sin IPv6 implementasjon har i skrivende stund noe som heter «duplicate address detection». Dette fører til feilaktig deteksjon av duplikat-adresser ved bruk av teaming og bør inntil videre slås av dersom IPv6 skal fungere stabilt på et team-interface.

Symptom på at dette er et problem vises slik:

# ip addr show dev team0
6: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP qlen 1000
link/ether 18:66:da:8b:23:7f brd ff:ff:ff:ff:ff:ff
inet 129.240.2.89/27 brd 129.240.2.95 scope global team0
valid_lft forever preferred_lft forever
inet6 2001:700:100:540::89/64 scope global tentative dadfailed   <--  HER
valid_lft forever preferred_lft forever
inet6 fe80::4857:77ff:fed5:d983/64 scope link
valid_lft forever preferred_lft forever

Workaround:

# cat /etc/sysctl.d/10-disable-dad-team0.conf
net.ipv6.conf.team0.accept_dad = 0
# reboot (eller reaload sysctl og restart nettverk)
Av Trond Hasle Amundsen
Publisert 7. feb. 2017 14:56 - Sist endret 29. mai 2017 09:36