Network Failover

Párkrát jsem se setkal s požadavkem připojení serveru pomocí dvou síťových karet kvůli zabezpečení proti výpadku trasy připojení. Varianta kterou zde popíšu pro Solaris i Linux počítá s jednou veřejnou IP adresou pro server.

Solaris

Minimálně od Solarisu 8 je možné celkem jednoduše nastavit network failover. Postup je následující:

Potřebujeme celkem 3 IP adresy pro server ze stejné sítě. Jedna je klasické IP, se kterou normálně komunikuje okolní svět a zbývající 2 jsou pro síťovky. Obě síťovky je třeba přiřadit do stejné skupiny, u mě to je skupina production.

Záznam v /etc/hosts:

192.168.10.100   server
192.168.10.101   server-dummy0
192.168.10.102   server-dummy1

/etc/hostname.bge0

server-dummy0 netmask + broadcast + \
group production deprecated -failover up \
addif server netmask + broadcast +failover up

/etc/hostname.bge1

server-dummy1 netmask + broadcast + \
group production deprecated -failover standby up

Při vytažení kabelu se vlogu objeví záznam programu in.pathd, který se o faiover stará.

Linux

V Linuxu je spojení více rozhraní do jednoho také docela jednoduché. Je třeba podpora v jádře (zřejmě většina distribucí podporuje, modul bonding, nainstalovaný program ifenslave a pár změn v konfiguraci. Popis, který zde uvedu je platný pro RdeHat a Fedoru. Samozřejmě lze spojit více rozhraní i v jiných distribucích, ale zřejmě to nebude tak jednoduché. V počítači máme 2 síťovky a naše IP adresa je 192.168.1.11.

Do /etc/modprobe.conf přidejte řádek s alias bond0 bonding.

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
IPADDR=192.168.0.11
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.1
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Po restartu sítě (/etc/init.d/network restart) byste měli vidět výpis ifconfig -a podobný tomu mému.

bond0     Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
          inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:550490 errors:0 dropped:0 overruns:0 frame:0
          TX packets:799690 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:484539138 (462.0 MiB)  TX bytes:649697037 (619.5 MiB)

eth0      Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
          inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:278604 errors:0 dropped:0 overruns:0 frame:0
          TX packets:399819 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:244748673 (233.4 MiB)  TX bytes:324785741 (309.7 MiB)
          Interrupt:10 Base address:0x2000 

eth1      Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
          inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:271887 errors:0 dropped:0 overruns:0 frame:0
          TX packets:399872 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:239790531 (228.6 MiB)  TX bytes:324911410 (309.8 MiB)
          Interrupt:11 Base address:0x4000 

Podrobnější dokumentace k nastavení bondingu je u zdrojáků jádra.