본문으로 바로가기

이더채널 본딩 ( Ether Channel Bonding )

category Linux/Linux Network 2017. 9. 7. 20:18
  • 이더채널 본딩 ( Ether Channel Bonding )
2개 이상의 NIC 카드를 가상의 하나의 카드로 묶어서 사용하는 방법
-> 한개의 IP를 사용하지만 여러개의 NIC 를 사용하므로 NIC가 하나 고장나도 통신에는 이상이 없다. 
 보통 짝수개의 NIC 를 사용하고  2개나 4개를 주로 사용한다.

RedHat             이더채널 본딩
Window            티밍 (Teaming)
Oracle              IPMP
IBM AIX            EtherChannel
HP HP-UX         APA


자원을 제공하는 서버, 정보를 제공하는 서버에는 필요하다.

정보 제공 서버 :  DB 서버 , 인증서버 ( LDAP, NIS+)

자원 제공 서버 :  NFS 서버 ( EX: NAS )


- 기능

1) 장애 극복 기능 ( Failover )

2) 부하 분산 기능 ( Load Balancing )


- 모드 종류

이더채널 본딩 모드 종류는 7가지가 존재한다.  ( 몇가지만 알아보자 )


mode 0  : balance -rr ( Active-Active)

-> 두개의 포트를 사용하여 부하분산과 장애극복을 제공한다. 기본설정

-> 통신할때 두개의 포트 모두 사용한다.


mode 1 : active-backup ( Active-Standby)

-> 하나의 포트만을 사용하고 장애 발생시 대기중인 포트가 사용된다.


mode 4 : 802.3ad

-> L2 스위치를 필요로 하고 속도가 빠르다.


- 관련 용어

miimon  

-> 링크 감시가 발생할때 밀리 초 단위로 감시한다.  보통 100 miimon = 0.1초 사용하지 않으려면 0을 준다


primary 

-> mode 1 과같이 주 포트를 정해줘야할때 사용된다. primary 포트가 아닌 포트는 Standby  상태가 된다.


  • 이더채널 설정

mode 0 ( Active - Active )


[시나리오] 

서버 1 - 이더채널 

서버 2 - 테스트용

통신확인

서버 1에서 하나의 포트 제거

통신확인 ( 하나의 포트가 망가져도 통신은 잘 될것이다. )


[사전 준비]

서버가 2개 필요하므로 간단하게 link clone을 만들어 확인한다.

서버 1에는 NIC 하나를 추가한다 (NAT)



[설정]


서버2 

# vi /etc/hosts

192.168.17.150    linux150.example    linux150 추가


# system-config-network-tui

IP -> 192.168.17.150


# service network restart


서버 1

본딩 설정

 eth0 --- eth 1 --------> bond0 ( 192.168.17.100 )


( 작업 순서 )

/etc/modprobe.conf 설정

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

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

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


1) /etc/modprobe.conf 설정

 

 alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptspi

alias scsi_hostadapter2 ata_piix

alias eth1 vmxnet

alias bond0 bonding


 


2) /etc/sysconfig/network-scripts/ifcfg-bond0 설정

 -> 자동생성이 안되므로 eth0 파일을 복사해서 사용한다

# cd /etc/sysconfig/nework-scripts

# cp ifcfg-eth0 ifcfg-bond0

# vi bond0

 

 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=bond0

BOOTPROTO=none

BROADCAST=192.168.17.255

IPADDR=192.168.17.100

NETMASK=255.255.255.0

NETWORK=192.168.17.0

ONBOOT=yes

USERCTL=no

BONDING_OPTS="mode=0 miimon=100"

 

-> mode=0 번으로 설정하고 miimon=100 : 0.1초


3)/etc/sysconfig/network-scripts/ifcfg-eth0 설정

# vi ifcfg-eth0

 

 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no


 

-> MASTER는 bond0  SLAVE= yes 추가


4)/etc/sysconfig/network-scripts/ifcfg-eth1 설정

# vi ifcfg-eth1

 

 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no


 


[정리]


# reboot


# ifconfig

 

 bond0     Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          inet addr:192.168.17.100  Bcast:192.168.17.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe32:4a62/64 Scope:Link

          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

          RX packets:43 errors:0 dropped:0 overruns:0 frame:0

          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:4073 (3.9 KiB)  TX bytes:2839 (2.7 KiB)


eth0      Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:22 errors:0 dropped:0 overruns:0 frame:0

          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:2193 (2.1 KiB)  TX bytes:1336 (1.3 KiB)

          Interrupt:75 Base address:0x2024 


eth1      Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:21 errors:0 dropped:0 overruns:0 frame:0

          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:1880 (1.8 KiB)  TX bytes:1503 (1.4 KiB)

          Interrupt:59 Base address:0x20a4 


 

 -> IP 정보는 bond0 에게만 있는것을 확인 할 수있다. 

 -> eth0 과 eth1의 MAC Address는 bond0의 MAC Address 와 같다는 것을 알 수있다.


# cat /proc/net/bonding/bond0

 

 Ethernet Channel Bonding Driver: v3.4.0-2 (October 7, 2008)


Bonding Mode: load balancing (round-robin)

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0


Slave Interface: eth0

MII Status: up

Speed: Unknown

Duplex: Unknown

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:62


Slave Interface: eth1

MII Status: up

Speed: Unknown

Duplex: Unknown

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:6c


 


[확인]

서버 2

# ping 192.168.17.100 /* 서버 1에 ping 신호 */


서버 1 

eth0 포트 끊기 

# ifconfig eth1 down

# cat /proc/net/bonding/bond

 

 Ethernet Channel Bonding Driver: v3.4.0-2 (October 7, 2008)


Bonding Mode: load balancing (round-robin)

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0


Slave Interface: eth0

MII Status: up

Speed: Unknown

Duplex: Unknown

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:62


Slave Interface: eth1

MII Status: down

Speed: Unknown

Duplex: Unknown

Link Failure Count: 1

Permanent HW addr: 00:0c:29:32:4a:6c

 


서버 2 

 -> 서버 1의 eth1 이 고장나도 ping은 잘 가고있는것을 확인 할 수 있다. 



mode 2 ( Active - Standby )

-> mode 0 에 이어서 할것이기 때문에 간단히 설정파일들을 바꿔 확인해보자.


[시나리오] 

서버 1 - 이더채널 

서버 2 - 테스트용

통신확인

서버 1에서 하나의 포트 제거

통신확인 ( 하나의 포트가 망가져도 통신은 잘 될것이다. )


( 작업 순서 )

/etc/modprobe.conf 설정

/etc/sysconfig/network-scripts/ifcfg-bond1 설정

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

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


1) vi /etc/modprobe.conf 설정

# vi /etc/modprobe.conf

 

 alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptspi

alias scsi_hostadapter2 ata_piix

alias eth1 vmxnet

alias bond1 bonding


 


2) /etc/sysconfig/network-scripts/ifcfg-bond1 설정

# cd /etc/sysconfig/network-scripts/

# vi ifcfg-bond0 /* 위에서 했던 파일 고쳐줍니다 */ 

/* mode 0 실습 안했으면 # cp ifcfg-eth0 ifcfg-bond1 */

 

 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=bond1

BOOTPROTO=none

BROADCAST=192.168.17.255

IPADDR=192.168.17.100

NETMASK=255.255.255.0

NETWORK=192.168.17.0

ONBOOT=yes

USERCTL=no

BONDING_OPTS="mode=1 miimon=100 primary=eth0"


 

-> primary 주 포트설정 


# mv ifcgf-bond0 ifcgf-bond1 /* 처음에 bond0을 바꿧으면 이름변경 */


3) /etc/sysconfig/network-scripts/ifcfg-eth0 설정

4) /etc/sysconfig/network-scripts/ifcfg-eth1 설정

vi 편집기로 열어서 MASTER=bond0 을 MASTER=bond1 로 바꿔줍니다. 

 

 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

MASTER=bond1

SLAVE=yes

USERCTL=no



# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond1

SLAVE=yes

USERCTL=no


 


(정리)


# reboot


# ifconfig

 

bond1     Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          inet addr:192.168.17.100  Bcast:192.168.17.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe32:4a62/64 Scope:Link

          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

          RX packets:6 errors:0 dropped:0 overruns:0 frame:0

          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:360 (360.0 b)  TX bytes:6004 (5.8 KiB)


eth0      Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:0 (0.0 b)  TX bytes:6004 (5.8 KiB)

          Interrupt:75 Base address:0x2024 


eth1      Link encap:Ethernet  HWaddr 00:0C:29:32:4A:62  

          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

          RX packets:6 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:360 (360.0 b)  TX bytes:0 (0.0 b)

          Interrupt:59 Base address:0x20a4 


 


# cat /proc/net/bonding/bond1

 

 Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)


Bonding Mode: fault-tolerance (active-backup)

Primary Slave: eth2 (primary_reselect always)

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: 100 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:62


Slave Interface: eth1

MII Status: up

Speed: 100 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:6c


 



(확인) 

mode 0 번의 확인과 같은 방법으로 확인해본다. 


서버 2 

# ping 192.168.17.100


서버 1

# ifconfig eth0 down

# cat /porc/net/bonding/bond1

 

 Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)


Bonding Mode: fault-tolerance (active-backup)

Primary Slave: eth2 (primary_reselect always)

Currently Active Slave: eth1

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0


Slave Interface: eth0

MII Status: down

Speed: 100 Mbps

Duplex: full

Link Failure Count: 1

Permanent HW addr: 00:0c:29:32:4a:62


Slave Interface: eth1

MII Status: up

Speed: 100 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:32:4a:6c


 

-> eth0 이 down 되니 자동으로 eth1 이 연결된다. 

-> # ifconfig eth0 up 으로 eth0을 다시 연결하면 eth0으로 연결하고 eth1은 다시 Standby 된다.


서버 2

-> 서버 1의 eth0이 down 됬지만 ping은 멈추지 않고 잘 된다. 


  • 복구
(본딩 삭제)
/etc/modprobe.conf 편집 /* alias bond1 bonding 삭제 */
/etc/sysconfig/network-scripts/ifcfg-bond1 삭제
/etc/sysconfig/network-scripts/ifcfg-eth0 편집
/etc/sysconfig/network-scripts/ifcfg-eth1 편집
/etc/sysconfig/networking/* 확인     /* devices/ profiles/ 내부의 파일 삭제 */















'Linux > Linux Network' 카테고리의 다른 글

WEB Server ( Apache )  (0) 2017.09.11
DNS_2 ( Master DNS / Slave DNS )  (0) 2017.09.11
DNS_1 ( 도메인 부하분산, 도메인 위임 )  (0) 2017.09.08
네트워크 설정  (0) 2017.09.07
xinetd 방식과 standalone 방식  (0) 2017.09.06