การทำ Link aggregation หรือ Etherchannel คือการนำเอา Interface Ethernet มากกว่า 2 อัน มารวมกันเพื่อให้ได้ bandwidth ของ network ที่สูงขึ้น และยังช่วยเพิ่ม Availability ให้กับ network อีกด้วย

ในการทำ Etherchannel บนแต่ละ OS นั้นก็มีการใช้คำสั่งที่แตกต่างกัน มีตัวเลือกในการปรับแต่งที่แตกต่างกันไป โดยเราจะทำการยกตัวอย่างการ Setup link aggregation บน Solaris 10 (dladm) และ AIX5L (smitty)

Solaris 

dladm create-aggr -l passive -d e1000g0 -d nxge0 1

คือการสร้าง Link aggregate แบบ 802.3ad mode Passive (เลือกได้ระหว่าง Active, Passive, Off) โดยจะทำการ bond ระหว่าง e1000g0 และ nxge0 โดยให้ Key (index) เป็น 1

โดยผลลัพธ์เราจะได้ device aggr1 ออกมา สังเกตว่าจะมีชื่อตรงกับ index ที่เราได้กำหนดไว้ (การกำหนด index นั้นจะต้องไม่ซ้ำกับของเดิมที่มีอยู่ สามารถเป็นเลขอะไรก็ได้ )

คำสั่งเพิ่มเติมดูได้ที่ http://docs.oracle.com/cd/E19082-01/819-2240/dladm-1m/index.html

AIX

เป็น OS ที่สร้างความสับสนให้กับ Admin Unix/Linux ได้เป็นอย่างดี (โดนมาแล้ว) จึงจะขออธิบายเกี่ยวกับเรื่อง Ethernet device บน AIX ก่อน

Interface ethernet 1 interface บน AIX จะประกอบไปด้วย 2 device  คือ en0 และ ent0 โดย en0 จะเป็น device ที่ทำงานอยู่บน Layer 3 จัดการจำพวก TCP/IP ส่วน ent0 หรือ et0 จะเป็น device ที่ทำงานอยู่บน Layer2 ทำหน้าที่จัดการ Speed Flow Control ต่างๆ ถ้าเราทำการใช้คำสั่ง lsattr -El en0 เทียบกับ lsattr -El ent0 จะให้ผลลัพธ์ที่แตกต่างกันดังนี้

lsattr -El en0
alias4 IPv4 Alias including Subnet Mask True
alias6 IPv6 Alias including Prefix Length True
arp on Address Resolution Protocol (ARP) True
authority Authorized Users True
broadcast Broadcast Address True
mtu 1500 Maximum IP Packet Size for This Device True
netaddr Internet Address True
netaddr6 IPv6 Internet Address True
netmask Subnet Mask True
prefixlen Prefix Length for IPv6 Internet Address True
remmtu 576 Maximum IP Packet Size for REMOTE Networks True
rfc1323 Enable/Disable TCP RFC 1323 Window Scaling True
security none Security Level True
state down Current Interface Status True
tcp_mssdflt Set TCP Maximum Segment Size True
tcp_nodelay Enable/Disable TCP_NODELAY Option True
tcp_recvspace Set Socket Buffer Space for Receiving True
tcp_sendspace Set Socket Buffer Space for Sending True
lsattr -El ent0
alt_addr 0x000000000000 Alternate Ethernet address True
flow_ctrl no Request Transmit and Receive Flow Control True
jumbo_frames yes Request Transmit and Receive Jumbo Frames True
large_receive yes Enable receive TCP segment aggregation True
large_send yes Enable hardware Transmit TCP segmentation True
media_speed 1000_Full_Duplex Requested media speed True
multicore yes Enable Multi-Core Scaling True
rx_cksum yes Enable hardware Receive checksum True
rx_cksum_errd yes Discard RX packets with checksum errors True
rx_clsc 1G Enable Receive interrupt coalescing True
rx_clsc_usec 95 Receive interrupt coalescing window True
rx_coalesce 16 Receive packet coalescing True
rx_q1_num 8192 Number of Receive queue 1 WQEs True
rx_q2_num 4096 Number of Receive queue 2 WQEs True
rx_q3_num 2048 Number of Receive queue 3 WQEs True
tx_cksum yes Enable hardware Transmit checksum True
tx_isb yes Use Transmit Interface Specific Buffers True
tx_q_num 512 Number of Transmit WQEs True
use_alt_addr no Enable alternate Ethernet address True

ดังนั้นการจะ setup etherchannel เราจะต้องทำบน device แบบ ent ดังนี้

smitty etherchannel

Change / Show Characteristics of an EtherChannel / Link Aggregation

เลือก interface ที่ต้องการ แล้วกด Enter ได้เลย ง่ายมากๆ แล้วระบบจะทำการสร้าง et9 ขึ้นมาให้เรา ซึ่งจะเป็น interface etherchannel

แต่สิ่งที่อาจจะผิดกันก็คือ เวลาจะนำ interface ขึ้นมาใช้งาน เราจะต้องทำการ เรียกใช้งาน interface en9 เท่านั้น ไม่สามารถใช้งาน et9 ได้ โดยใช้คำสั่งง่ายๆดังนี้

smitty chinet

Cisco

ทำการสร้าง Port Channel ใหม่ขึ้นมา โดยมี mode ให้ตรงกับ AIX/Solaris โดยถ้าหาก Solaris เซทเป็น off แล้ว AIX เซทเป็น standard/Round Robin ให้ทำการเซท Port Channel mode on แต่ถ้าหาก Solaris/AIX เซทเป็น passive/Acitve หรือ 802.3ad ให้ทำการเซทเป็น Port Channel mode active/passive

สิ่งที่สำคัญในการ Set Port Channel บน cisco ก็คือ config ของ port ที่นำมาทำ Port Channel จะต้องตรงกันทั้งหมด ไม่งั้นระบบอาจจะสร้าง Secondary Port Channel ออกมา โดยจะมีหน้าตาเป็น Po1A

ข้อจำกัดในการทำ Link Aggregation

1. ต้องมีฝั่งใดฝั่งหนึ่งเป็น active หรือจะเป็น active ทั้งคู่ก็ได้

2. AIX ไม่สามารถเซท mode passive ได้ ระบบจะ Auto เป็น Active mode ตั้งแต่ต้น

ปัญหาที่อาจจะเกิดขึ้น

เมื่อเราทำการ bonding interface คนละผู้ผลิตเช่น Intel กับ Broadcom ผู้ผลิตอาจจะทำการ Set attribute บนตัว card มาไม่เหมือนกัน ทำให้เราไม่สามารถ bond interface ได้ โดยปัญหาที่พบบ่อยคือ Flow control บน card ทั้งสองตัวนั้นไม่ตรงกัน ตัวนึงเป็น on อีกตัวหนึ่งเป็น off

ใน Solaris เราสามารถเข้าไปแก้ flow_control ได้ที่ /kernel/drv/xxx.conf (ปรึกษา Oracle)

สำหรับ AIX เราสามารถใช้สำสั่ง chdev -P -l ent0 -a flow_ctrl=no เพื่อทำการเปลี่ยน attribute ได้ทันที