มนตรี เทพไพศาล บอย[ด่านมะขามเตี้ย]:
ถ้าเป็น NIC 2 interface แล้วทำเป็น
IP เดียว ethernet bonding
เพิ่ม Lan Card ใหม่โดยใช้ IP เดิม
เพื่อเพิ่มแบนด์วิธ (Bonding)
Ethernet Bonding Fedora Linux
พอร์ตแลน
(Ethernet) ของเครื่องเซิร์ฟเวอร์ถือว่าเป็นสิ่งสำคัญอย่างยิ่ง
เพราะเป็นส่วนที่จะรับส่งข้อมูลกับเคื่องอื่นๆ
ถ้าเซิร์ฟเวอร์มีแค่พอร์ตเดียวเชื่อมต่อเข้าเน็ตเวิร์ก แล้วสายที่เชื่อมต่อหลุดไป
หรือไม่สามารถรองรับปริมาณการรับส่งข้อมูลได้เพียงพอ
ก็อาจทำให้เกิดปัญหาการใช้งานได้
ในบทความนี้ขอแนะนำการคอนฟิก Ethernet
Bonding (หรือ Teaming) เพื่อแก้ปัญหาที่อาจเกิดขึ้น
โดยจะมีการจัดกลุ่มพอร์ตแลนเข้าด้วยกัน เพื่อช่วยในการรับส่งข้อมูล
รูปแบบการส่งจะมีสองแบบใหญ่ๆ คือ
* Active-backup
พอร์ตหนึ่งจะทำหน้าพอร์ตหลักเพื่อใช้รับส่งข้อมูล (Active) แต่อีกพอร์ตหนึ่งจะสำรอง
(Backup) ไว้เฉยๆ ไม่มีการรับส่งข้อมูลใดๆ ผ่านทางพอร์ตสำรอง
แต่เมื่อไรที่พอร์ตหลักมีปัญหาพอร์ตนี้จะรับส่งข้อมูลแทน สำหรับ Ethernet Bonding
จะเป็นคอนฟิกใน mode 1
* Load Balance
พอร์ตทั้งหมดในกลุ่มจะช่วยกันรับส่งข้อมูล
ส่วนเทคนิคในการรับส่งจะมีหลายแบบด้วยกันแล้วแต่ mode
ที่คอนฟิก
ในตัวอย่างจะเป็นการคอนฟิกบน Fedora 9 ซึ่งน่าจะประยุกต์ใช้กับ
Fedora เวอร์ชั่นอื่นๆ, CentOS, RedHat หรือลีนุกซ์ตัวอื่นๆ
ได้
เตรียมพอร์ตแลนที่จะคอนฟิกเป็น Ethernet
Bonding
ในตัวอย่างจะใช้พอร์ตแลน eth2 และ eth3 เพื่อคอนฟิกรวมเป็น
bond0
เริ่มต้นสร้างไฟล์ /etc/sysconfig/network-scripts/ifcfg-bond0
ซึ่งจะเป็นไฟล์คอนฟิกของ bond0 เป็นพอร์ต bonding
(ในเครื่องหนึ่งสามารถจัดกลุ่มทำได้หลาย bonding พอร์ตที่คอนฟิกก็จะเป็น bond1,
bond2 เป็นต้น) ในไฟล์จะมีคอนฟิก IP Address, Netmask เหมือนที่คอนฟิกพอร์ต
ethernet ทั่วไป
ตัวอย่างคอนฟิก ifcfg-bond0
[root@fc9-x1 ~]# cat
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=10.1.0.1
NETMASK=255.255.255.0
BROADCAST=10.1.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
คอนฟิกพอร์ต
(Physical) ให้อยู่ในกลุ่ม bond0 ตามตัวอย่าง
[root@fc9-x1 ~]# cat
/etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USECTL=no
[root@fc9-x1
~]# cat
/etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USECTL=no
แก้ไขไฟล์
/etc/modprobe.conf เพื่อให้โหลด kernel module สำหรับการทำ bonding
ตอนที่มีการโหลดคอนฟิก bond0
[root@fc9-x1 ~]# cat
/etc/modprobe.conf
alias bond0 bonding
options bonding miimon=100
mode=1
สามารถระบุว่าจะทำ bonding เพื่อรับส่งข้อมูลแบบไหนได้จากคอนฟิก mode
ดังนี้
* mode=0 (balance-rr) เป็นการส่งข้อมูลแบบ round-robin (load
balancing, fault tolerance)
* mode=1 (active-backup)
สถานการณ์ปกติจะมีพอร์ตเดียวเท่านั้นที่ใช้รับส่งข้อมูล (fault tolerance)
*
mode=2 (balance-xor) เป็นการส่งข้อมูลแบบใช้ XOR เพื่อหาพอร์ตที่จะส่ง
เช่นคำนวณจาก MAC Address ต้นทางปลายทางเป็นต้น (load balancing, fault
tolerance)
* mode=3 (broadcast)
* mode=4 (802.3ad)
เป็นส่งข้อมูลแบบ Link Aggregation Control Protocol (LACP) / 802.3ad
*
mode=5 (balance-tlb) ส่งข้อมูลแบบ Adaptive transmit load balancing
*
mode=6 (balance-alb) ส่งข้อมูลแบบ Adaptive load balancing
หมายเหตุ
รายละเอียดเพิ่มเติมดูได้จากไฟล์
/usr/share/doc/kernel-doc-2.6.25/Documentation/networking/bonding.txt จาก
kernel-doc-2.6.25-14.fc9.noarch.rpm
ในเริ่มต้นแนะนำให้ทดสอบกับ mode=1
เพื่อทดลอง active-backup ก่อน
หลังจากสร้างไฟล์คอนฟิกทั้งหมดแล้ว
รีบูตเครื่องหนึ่งครั้ง เผื่อให้ bond0 ถูกโหลดขึ้นมา
ตรวจสอบสถานะของ Ethernet
Bonding
เมื่อเครื่องบูตเสร็จเรียบร้อย ถ้าถูกต้องเมื่อรันคำสั่ง ifconfig
จะมีพอร์ต bond0 เพิ่มขึ้นมาตามตัวอย่าง
[root@server ~]#
ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:22:FF:11:55
inet addr:10.1.0.1 Bcast:10.1.0.255 Mask:255.255.255.0
UP
BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX
packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:19
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:1160 (1.1 KiB) TX bytes:1574 (1.5
KiB)
...
eth2 Link encap:Ethernet HWaddr
00:0C:22:FF:11:55
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500
Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1100 (1.0 KiB) TX bytes:1574
(1.5 KiB)
Interrupt:16 Base address:0x1824
eth3 Link
encap:Ethernet HWaddr 00:0C:22:FF:11:55
UP BROADCAST RUNNING SLAVE
MULTICAST MTU:1500 Metric:1
RX packets:1 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:60
(60.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base
address:0x18a4
ข้อสังเกตจากคำสั่ง ifconfig
* HWaddr หรือ MAC
Address ของแต่ละพอร์ตที่ทำ bonding ด้วยกันจะเป็นค่าเดียวกันหมด
ทั้งนี้เพื่อประโยชน์ในการทำ fail over
* ในโหมด active-backup
ปกติจะมีพอร์ตเดียวทำหน้าที่เป็นหลักใช้ในการรับส่งข้อมูล ซึ่งดูได้จากค่า RX, TX
packets
หากต้องการรู้ว่าพอร์ตไหนถูกใช้เป็นหลัก (active) ในการส่งข้อมูล
สามารถดูได้จากไฟล์ /proc/net/bonding/bond0
ตัวอย่างไฟล์
/proc/net/bonding/bond0
[root@fc9-x1 ~]# cat
/proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.5 (March 21,
2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave:
None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval
(ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface:
eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr:
00:0c:22:ff:11:55
Slave Interface: eth3
MII Status: up
Link Failure
Count: 0
Permanent HW addr:
00:0c:22:ff:11:56
จากตัวอย่างพอร์ตหลักที่ถูกใช้ในโหมด (active-backup)
คือพอร์ต eth2 ดูได้จาก Currently Active Slave: eth2
ทดสอบการ fail
over
แนะนำว่าก่อนที่จะดึงสายแลนให้รันคำสั่ง ping ทิ้งไว้
เพื่อดูว่าเวลาที่มีการ fail over
จะยังส่งข้อมูลต่อไปได้เลยไหม
ทดลองดึงสายออกจากพอร์ต eth2 แล้วตรวจสอบไฟล์
/proc/net/bonding/bond0 อีกครั้ง จะเห็นว่าพอร์ต eth3
จะถูกนำมาใช้เป็นหลักในการรับส่งข้อมูลแทน แล้วคำสั่ง ping ก็ยังคงทำงานอยู่
อาจมีสะดุดไปบ้างเล็กน้อย
[root@fc9-x1 ~]# cat
/proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.5 (March 21,
2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave:
None
Currently Active Slave: eth3
MII Status: up
MII Polling Interval
(ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface:
eth2
MII Status: down
Link Failure Count: 1
Permanent HW addr:
00:0c:22:ff:11:55
Slave Interface: eth3
MII Status: up
Link Failure
Count: 0
Permanent HW addr: 00:0c:22:ff:11:56
จากผลลัพธ์จะแสดงสถานะของ
bonding ต่างๆ ดังนี้
* Currently Active Slave: eth3
พอร์ตหลักที่ใช้รับส่งข้อมูลตอนนี้
* Slave Interface: eth2, MII Status:
down สถานะของพอร์ต eth2 down
* Link Failur Count: 1
แสดงตัวเลขจำนวนครั้งที่พอร์ตมีปัญหา
สุดท้ายทดสอบด้วยการเสียบสายกลับเข้าไปที่พอร์ตที่
2 จะเห็นว่าไม่มีการ fail over กลับมาที่พอร์ต eth2 พอร์ต eth3
จะยังคงเป็นหลักในการรับส่งข้อมูลอยู่
ไม่มีความคิดเห็น:
แสดงความคิดเห็น