Network failover – bonding
Požadavek na připojení serveru do sítě pomocí dvou síťových karet kvůli zabezpečení proti výpadku trasy připojení je běžný a v případě řešení HA clusteru i nevyhnutelný. V Linuxu je možné zdvojené připojení řešit velmi snadno pomocí tzv. bondingu. Skutečná síťová rozhraní se spojí do jednoho virtuálního přes které poté probíhá veškerá komunikace.
Požadavek na připojení serveru do sítě pomocí dvou síťových karet kvůli zabezpečení proti výpadku trasy připojení je běžný a v případě řešení HA clusteru i nevyhnutelný. V Linuxu je možné zdvojené připojení řešit velmi snadno pomocí tzv. bondingu. Skutečná síťová rozhraní se spojí do jednoho virtuálního přes které poté probíhá veškerá komunikace.
V případě výpadku jednoho ze skutečných fyzických rozhraní bonding tento výpadek odstíní a přesměruje komunikaci přes fungující rozhraní. Proto je vhodné podobné zapojení použít například pro propojení dvou serverů u DRDB (mirror disků přes síť) nebo u replikace MySQL a podobných aplikací.
Dnes používané distribuce jsou na bonding připravené – v jádře je třeba podpora (modul bonding) a nainstalovaný program ifenslave. Popis, který zde uvedu je platný pro RedHat a Fedoru. Samozřejmě lze spojit více rozhraní i v jiných distribucích, ale konfigurace se může mírně lišit. V počítači mám víc síťových karet, ale použiji pouze dvě. Je vhodné vybrat porty na různých kartách – například kartu integrovanou na desce a druhou přidanou do pci-e slotu. Pro konfiguraci použiji síťová rozhraní eth0 a eth1, vytvořím virtuální rozhraní bond0, které dostane IP adresu 172.16.100.10.
Bonding v Linuxu může pracovat ve více režimech, podrobnější popis je možné najít v dokumentaci u jádra nebo například na webu http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/s2-modules-bonding.html.
.
V souboru /etc/modprobe.conf si určím jaký modul pro které zařízení použít:
alias eth0 e1000e alias eth1 e1000e alias eth2 e1000e alias eth3 e1000e alias bond0 bonding
Soubor /etc/sysconfig/network-scripts/ifcfg-eth1:
DEVICE=eth1 ONBOOT=yes USERCTL=no MASTER=bond0 SLAVE=yes BOOTPROTO=none HWADDR=00:23:8b:cc:bb:aa
Soubor /etc/sysconfig/network-scripts/ifcfg-eth2:
DEVICE=eth2 ONBOOT=yes USERCTL=no MASTER=bond0 SLAVE=yes BOOTPROTO=none HWADDR=00:23:8b:ac:ab:ee
Soubor /etc/sysconfig/network-scripts/ifcfg-bond0:
DEVICE=bond0 IPADDR=172.16.100.10 NETMASK=255.255.255.0 NETWORK=172.16.100.0 BROADCAST=172.16.100.255 ONBOOT=yes BOOTPROTO=none USERCTL=no
Po nakonfigurování stačí spustit příkaz ifup bond0 a je hotovo. Konfiguraci a nahození rozhraní je samozřejmě nutné provést na obou serverech.
Výsledek po provedení konfigurace by měl být přibližně následující:
[root@clemenza network-scripts]# for i in eth1 eth2 bond0; do ip l show $i; done 5: eth1:mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff 2: eth2: mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff 7: bond0: mtu 1500 qdisc noqueue link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff [root@clemenza network-scripts]# for i in eth1 eth2 bond0; do ip a show $i; done 5: eth1:mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff 2: eth2: mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff 7: bond0: mtu 1500 qdisc noqueue link/ether 00:23:8b:64:da:0b brd ff:ff:ff:ff:ff:ff inet 172.16.100.10/24 brd 172.16.100.255 scope global bond0 inet6 fe80::223:8bff:fe64:da0b/64 scope link valid_lft forever preferred_lft forever Další témata