* ความต้องการของระบบ
o ในที่นี้ผมใช้ kernel 2.4.x
เป็นตัวทดสอบนะครับ (Version ผมไม่ทราบนะครับ)
o อุปกรณ์ Network
ที่ใช้ต้องเป็น Switch นะครับ จะเป็น stack หรือไม่ stack ก็ได้นะครับ
o Lan Card เป็นแบบทั่วไปนะครับ ที่ Support linux นะครับ
เริ่มการ
config โดยการใช้ Bonding กันเลยนะครับ
* ในที่นี้ใช้ bonding เป็น
module นะครับ สำหรับคนที่ไม่มี Module bonding ต้อง compile ให้ support
ก่อนนะครับ โดยการเลือก
Network device support
--->
[*] Network device support
Dummy net driver support
การ Config Module Bonding การแก้ไข
file /etc/modules.conf โดยการเพิ่มบรรทัดนี้ลงไปนะครับ
alias
bond0 bonding
* โปรแกรมที่ใช้ config lan card ให้เป็น slave ของ
bonding คือโปรแกรม ifenslave ซึ่งสามารถ compile โปรแกรมได้จาก source ของ kernel
linux ดังนี้
o gcc -Wall -Wstrict-prototypes -O
-I/usr/src/linux/include ifenslave.c -o ifenslave
o cp
ifenslave /sbin/ifenslave
* ในส่วนนี้เป็นวิธีการ config โดยผมใช้
ifconfig down eth(x) ลงก่อนทุกตัวนะครับ
o /sbin/modprobe
bonding mode=1 (mode=0 เป็น trunking ซึ่ง switch ต้อง support
นะครับดูหมายเหตุข้างล่างนะครับ mode=1 เป็น active backup policy mode=2 เป็น XOR)
ในที่นี้ผมได้ทดลองโดยการใช้ switch ที่ไม่มี mode trunking นะครับ
o /sbin/ifconfig bond0 192.168.0.254 broadcast 192.168.0.255 netmask
255.255.255.0 up นี้เป็น config interface bond0 ให้ทำงานที่ ip 192.168.0.254
นะครับ
o /sbin/ifenslave bond0 eth1 eth0
อันนี้เป็นการใช้โปรแกรม ifenslave ในการสร้าง eth0 eth1 เป็น slave ของ bonding
นะครับ ถ้าเราใช้ ifconfig ในการตรวจสอบจะพบดังนี้
�
bond0 Link encap:Ethernet HWaddr 00:50:04:C1:A6:B8
inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX
packets:9098 errors:0 dropped:0 overruns:0 frame:0
TX
packets:2426 errors:0 dropped:0 overruns:0 carrier:0
collisions:21 txqueuelen:0
eth0 Link encap:Ethernet HWaddr
00:20:AF:30:71:D4
inet addr:192.168.0.254 Bcast:192.168.0.255
Mask:255.255.255.0
UP BROADCAST DEBUG NOTRAILERS RUNNING NOARP
PROMISC SLAVE MULTICAST DYNAMIC MTU:1500 Metric:1
RX
packets:5762 errors:0 dropped:0 overruns:0 frame:0
TX packets:0
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:100
Interrupt:3 Base address:0x210
eth1 Link encap:Ethernet HWaddr 00:50:04:C1:A6:B8
inet
addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
UP
BROADCAST DEBUG NOTRAILERS RUNNING PROMISC SLAVE MULTICAST DYNAMIC MTU:1500
Metric:1
RX packets:3336 errors:0 dropped:0 overruns:0
frame:0
TX packets:2426 errors:0 dropped:0 overruns:0
carrier:0
collisions:21 txqueuelen:100
Interrupt:5 Base address:0xf480
o หมายเหตุ
ซึ่งวิธีการนี้ผมเป็นการใช้ linux connect lan card 2 ตัว ต่อกับ switch
ตัวเดียวกัน 2 port นะครับ โดยที่ swith ไม่มี mode trunking นะครับ
วิธีการที่จะใช้ bonding ในรูปแบบอื่นๆสามารถหาอ่านเพิ่มเติมได้จาก
Documentation/networking/bonding.txt ใน source ของ kernel นะครับ
วันจันทร์ที่ 12 มีนาคม พ.ศ. 2555
ถ้าเป็น NIC 2 interface แล้วทำเป็น IP เดียว ethernet bonding
มนตรี เทพไพศาล บอย[ด่านมะขามเตี้ย]:
ถ้าเป็น 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 จะยังคงเป็นหลักในการรับส่งข้อมูลอยู่
ถ้าเป็น 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 จะยังคงเป็นหลักในการรับส่งข้อมูลอยู่
Ethernet bonding on Debianv
Ethernet bonding on Debian
โดย: โสทร รอดคงที่ srk@hospital-os.com
วันที่: วันที่เขียน 22 สิงหาคม 2548
ปรังปรุงจาก: -
ปรับปรุงล่าสุด: -
แหล่งข้อมูล:http://glasnost.beeznest.org/articles/179http://www.jebus.ca/Linux/ethernet_bonding.php
http://lists.debian.org/debian-user-spanish/2004/05/msg00220.html
เกริ่นนำ:
หลังจากที่ได้ทำลองทำ Ethernet Bonding บน Red Hat สำเร็จ ก็ได้ทดลองทำ บน Debian บ้าง
ปรากฏว่ามีอะไรหลายอย่างที่ไม่เหมือน Red Hat เอกสารบางอย่างที่ค้นมาทำไม่สำเร็จก็มี
ที่ทดลองทำสำเร็จ มี 2 วิธีซึ่งไม่ทราบเหมือนกันว่าอันไหนจะดีกว่ากัน ที่เขียนไม่ได้หวัง ว่าจะให้ทำ bonding ได้นะครับ
คิดว่ามาเริ่มต้นเรียนรู้ Debian กันดีกว่า
สิ่งจำเป็น:คอมพิวเตอร์ ใส่ Lan Card 2 อัน ติดตั้ง linux Debian
ขั้นตอนการทำ
ทั้งสองวิธีมีวิธีการทำที่เหมือนกันคือ
ติดตั้ง package ifenslave-2.4 (kernel 2.4) ifenslave-2.6 (kernel 2.6)
ใครใช้ kernel ไหนอยู่ก็ติดตั้ง ตาม Kernel นั้นนะครับ
การติดตั้ง เครื่องที่จะติดตั้งต้องสามารถใช้ งาน Internet ได้
แก้ไฟล์ /etc/apt/sources.list เพื่อระบุที่ที่เราจะไปดาวน์โหลดโปรแกรม
vi /etc/apt/sources.list
เพิ่ม
deb http://ftp.au.debian.org/debian/ stable main
deb-src http://ftp.au.debian.org/debian/ stable main
deb http://security.debian.org/ stable/updates main
#ผมชอบดาวน์โหลดจากออสเตรเลีย รู้สึกว่าเร็วกว่า
apt-get update
apt-get install ifenslave-2.4หรือ
apt-get install ifenslave-2.6
แค่นี้ก็ติดตั้งเสร็จแล้ว
การใช้งาน apt-get ดูรายละเอียดจากของพี่อุทัยนะครับ
แก้ไฟล์ /etc/modules.conf
เพิ่มบรรทัดนี้เข้าไป
alias bond0 bonding
options bonding maxbonds=4 mode=6 miimon=100 หรือ
/etc/modprobe.d/arch/i386
alias bond0 bonding
options bonding mode=1 miimon=100 downdelay=200 updelay=200
option ต่างๆ ดูได้จาก
http://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/Documentation/networking/bonding.txt
ยังไม่ชำนาญ Debian นะครับ ไม่สามารถอะธิบายได้ว่า
/etc/modules.conf และ /etc/modprobe.d/arch/i386 มีหน้าที่ยังไง
ดูๆ แล้วก็เหมือน ๆ กัน ใครเซียน Debian ก็บอกมาหน่อยก็แล้วกันนะครับ
วิธีการทำ Bonding 2 วิธีนี้ อันนี้เป็นตัวอย่าง
ประยุกต์ใช้งานเอาเองนะครับ
วิธีที่ 1
สร้างไฟล์ rc.local ใน /etc/init.d
cd /etc/init.d
touch rc.local
แล้วก็ทำ link
ln -s /etc/init.d/rc.local /etc/rc2.d/S99rc.local
chmod 755 rc.local
แก้ไฟล์ /etc/init.d/rc.local
อาจจะใช้ VI หรือ Text Editor ที่ ท่านถนัด
vi rc.local
โดยเพิ่มข้อคความเหล่านี้
/etc/init.d/networking stop
modprobe bonding max_bonds=2
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth0 up
ifconfig eth1 up
ifenslave bond0 eth0 eth1
route add default gw 192.168.1.254
วิธีที่ 2
แก้ไฟล์ /etc/network/interface
auto bond0
iface bond0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.254
pre-up ifconfig eth0 up
pre-up ifconfig eth1 up
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1
post-down ifconfig eth0 down
post-down ifconfig eth1 down
เสร็จแล้วครับทั้งสองวิธีนี้สามารถใช้งานได้
โดย: โสทร รอดคงที่ srk@hospital-os.com
วันที่: วันที่เขียน 22 สิงหาคม 2548
ปรังปรุงจาก: -
ปรับปรุงล่าสุด: -
แหล่งข้อมูล:http://glasnost.beeznest.org/articles/179http://www.jebus.ca/Linux/ethernet_bonding.php
http://lists.debian.org/debian-user-spanish/2004/05/msg00220.html
เกริ่นนำ:
หลังจากที่ได้ทำลองทำ Ethernet Bonding บน Red Hat สำเร็จ ก็ได้ทดลองทำ บน Debian บ้าง
ปรากฏว่ามีอะไรหลายอย่างที่ไม่เหมือน Red Hat เอกสารบางอย่างที่ค้นมาทำไม่สำเร็จก็มี
ที่ทดลองทำสำเร็จ มี 2 วิธีซึ่งไม่ทราบเหมือนกันว่าอันไหนจะดีกว่ากัน ที่เขียนไม่ได้หวัง ว่าจะให้ทำ bonding ได้นะครับ
คิดว่ามาเริ่มต้นเรียนรู้ Debian กันดีกว่า
สิ่งจำเป็น:คอมพิวเตอร์ ใส่ Lan Card 2 อัน ติดตั้ง linux Debian
ขั้นตอนการทำ
ทั้งสองวิธีมีวิธีการทำที่เหมือนกันคือ
ติดตั้ง package ifenslave-2.4 (kernel 2.4) ifenslave-2.6 (kernel 2.6)
ใครใช้ kernel ไหนอยู่ก็ติดตั้ง ตาม Kernel นั้นนะครับ
การติดตั้ง เครื่องที่จะติดตั้งต้องสามารถใช้ งาน Internet ได้
แก้ไฟล์ /etc/apt/sources.list เพื่อระบุที่ที่เราจะไปดาวน์โหลดโปรแกรม
vi /etc/apt/sources.list
เพิ่ม
deb http://ftp.au.debian.org/debian/ stable main
deb-src http://ftp.au.debian.org/debian/ stable main
deb http://security.debian.org/ stable/updates main
#ผมชอบดาวน์โหลดจากออสเตรเลีย รู้สึกว่าเร็วกว่า
apt-get update
apt-get install ifenslave-2.4หรือ
apt-get install ifenslave-2.6
แค่นี้ก็ติดตั้งเสร็จแล้ว
การใช้งาน apt-get ดูรายละเอียดจากของพี่อุทัยนะครับ
แก้ไฟล์ /etc/modules.conf
เพิ่มบรรทัดนี้เข้าไป
alias bond0 bonding
options bonding maxbonds=4 mode=6 miimon=100 หรือ
/etc/modprobe.d/arch/i386
alias bond0 bonding
options bonding mode=1 miimon=100 downdelay=200 updelay=200
option ต่างๆ ดูได้จาก
http://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/Documentation/networking/bonding.txt
ยังไม่ชำนาญ Debian นะครับ ไม่สามารถอะธิบายได้ว่า
/etc/modules.conf และ /etc/modprobe.d/arch/i386 มีหน้าที่ยังไง
ดูๆ แล้วก็เหมือน ๆ กัน ใครเซียน Debian ก็บอกมาหน่อยก็แล้วกันนะครับ
วิธีการทำ Bonding 2 วิธีนี้ อันนี้เป็นตัวอย่าง
ประยุกต์ใช้งานเอาเองนะครับ
วิธีที่ 1
สร้างไฟล์ rc.local ใน /etc/init.d
cd /etc/init.d
touch rc.local
แล้วก็ทำ link
ln -s /etc/init.d/rc.local /etc/rc2.d/S99rc.local
chmod 755 rc.local
แก้ไฟล์ /etc/init.d/rc.local
อาจจะใช้ VI หรือ Text Editor ที่ ท่านถนัด
vi rc.local
โดยเพิ่มข้อคความเหล่านี้
/etc/init.d/networking stop
modprobe bonding max_bonds=2
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth0 up
ifconfig eth1 up
ifenslave bond0 eth0 eth1
route add default gw 192.168.1.254
วิธีที่ 2
แก้ไฟล์ /etc/network/interface
auto bond0
iface bond0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.254
pre-up ifconfig eth0 up
pre-up ifconfig eth1 up
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1
post-down ifconfig eth0 down
post-down ifconfig eth1 down
เสร็จแล้วครับทั้งสองวิธีนี้สามารถใช้งานได้
วิธีการทำ Bonding NIC แบบต่างๆ
posted on 19 May 2009 07:14 by smartsoft in Linux
การ bonding นั้นมี อัลกอริทึม
หลายแบบหากที่เห็นนิยมจะมีอยู่ สองแบบ คือ active-backup และ balance-rr ซึ่ง
Server ปัจจุบันมักให้ NIC มากกว่าหนึ่งเสมอๆ active-backup เอาภาษาชาวบ้าน เราก็คือ Card ไหนพัง
อีก Card ก็จะทำงานแทนครับ
balance-rr (Round-robin) คือ การสลับ session กันทำงานครับ
นอกจากสองวิธีนี้ยังมีอัลกอริทึมอื่นๆอีกนะครับ ลองอ่านได้จาก /usr/share/doc/
ขั้นตอนที่ 1. สร้าง file ifcfg-bond0
#vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
NETWORK=xxx.xxx.xxx.xxx
BROADCAST=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
ขั้นตอนที่ 2. แก้ไข files /etc/sysconfig/network-scripts/ifcfg-eth0, ifcfg-eth1
#/etc/sysconfig/network-scripts/ifcfg-ethX (x=Card ใบไหน)
# Intel Corporation 82573E Gigabit Ethernet Controller (Copper)
**DEVICE=ethX
**HWADDR=00:14:5E:E3:F1:X1 (ระวังตรงนี้ครับควร fix Hardware add ด้วยเพราะจะได้ไม่สับสนเรื่อง Card)
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
**ทำทั้งสอง filesc แต่ card ใคร card มันนะครับอย่าซ้ำกัน ส่วนที่ไม่ได้ comment เหมือนกันหมดครับ
ขั้นตอนที่ 3. แก้ไข file /etc/modprobe.conf
#vi /etc/modprobe.conf ให้เพิ่หลัง load alias eth นะคัรบ
alias bond0 bonding
options bonding mode=active-backup miimon=100
อยากได้การทำงานแบบ active-backup หรือ balance-rr ก็แก้ไขหลัง mode ครับหลังจากนั้นเอา ชัวๆ ก็ restart เครื่องเลยครับดูว่ามี error อะไรหรือไม่
หลังจากนั้น checkได้จาก
#cat /proc/net/bonding/bond0 จะไ้ด้ผลประมาณนี้ครับ
Ethernet Channel Bonding Driver: v3.x.x (May 02, 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: eth0
MII Status: down
Link Failure Count: 0
Permanent HW addr: 00:11:3f:5c:xx:fd
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:11:3f:7c:4d:21
แถมให้หน่อยครับ Command #ethtool -p ethx เป็นการสั่งให้ LED กระพริบครับ
เพื่อใครมี Card เยอะจะได้เอาไว้หาว่าใบไหนเป็นใบไหน
balance-rr (Round-robin) คือ การสลับ session กันทำงานครับ
นอกจากสองวิธีนี้ยังมีอัลกอริทึมอื่นๆอีกนะครับ ลองอ่านได้จาก /usr/share/doc/
ขั้นตอนที่ 1. สร้าง file ifcfg-bond0
#vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
NETWORK=xxx.xxx.xxx.xxx
BROADCAST=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
ขั้นตอนที่ 2. แก้ไข files /etc/sysconfig/network-scripts/ifcfg-eth0, ifcfg-eth1
#/etc/sysconfig/network-scripts/ifcfg-ethX (x=Card ใบไหน)
# Intel Corporation 82573E Gigabit Ethernet Controller (Copper)
**DEVICE=ethX
**HWADDR=00:14:5E:E3:F1:X1 (ระวังตรงนี้ครับควร fix Hardware add ด้วยเพราะจะได้ไม่สับสนเรื่อง Card)
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
**ทำทั้งสอง filesc แต่ card ใคร card มันนะครับอย่าซ้ำกัน ส่วนที่ไม่ได้ comment เหมือนกันหมดครับ
ขั้นตอนที่ 3. แก้ไข file /etc/modprobe.conf
#vi /etc/modprobe.conf ให้เพิ่หลัง load alias eth นะคัรบ
alias bond0 bonding
options bonding mode=active-backup miimon=100
อยากได้การทำงานแบบ active-backup หรือ balance-rr ก็แก้ไขหลัง mode ครับหลังจากนั้นเอา ชัวๆ ก็ restart เครื่องเลยครับดูว่ามี error อะไรหรือไม่
หลังจากนั้น checkได้จาก
#cat /proc/net/bonding/bond0 จะไ้ด้ผลประมาณนี้ครับ
Ethernet Channel Bonding Driver: v3.x.x (May 02, 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: eth0
MII Status: down
Link Failure Count: 0
Permanent HW addr: 00:11:3f:5c:xx:fd
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:11:3f:7c:4d:21
แถมให้หน่อยครับ Command #ethtool -p ethx เป็นการสั่งให้ LED กระพริบครับ
เพื่อใครมี Card เยอะจะได้เอาไว้หาว่าใบไหนเป็นใบไหน
วันอาทิตย์ที่ 4 มีนาคม พ.ศ. 2555
กำหนดค่า IP Address สำหรับ linux
กำหนดค่า Ip สำหรับ Linux
Command กำหนดค่าได้ที่ไฟล์
Command กำหนดค่าได้ที่ไฟล์
ifcfg-eth0 จะอยู่ที่ Path "/etc/sysconfig/network-scripts"
เมื่อกำหนดค่าให้ใช้คำสั่่ง restart service network ให้ระบบ linux ใช้งาน
สำหรับ Linux Debian หรือ Ubuntu กำหนดค่าไฟล์ interfaces
จะอยู่ที่ Path "/etc/network"
Restart network ให้ด้วยคำสั่ง restart service networking
กำหนดค่า DNS
แก้ไขที่ไฟล์
/etc/resolv.conf
กำหนดค่า่ Hostname
กำหนดค่าได้ที่ไฟล์
/etc/hosts
กำหนดค่า DNS
แก้ไขที่ไฟล์
/etc/resolv.conf
กำหนดค่า่ Hostname
กำหนดค่าได้ที่ไฟล์
/etc/hosts
สมัครสมาชิก:
บทความ (Atom)