การทำ Load Balance Network ใน Linux (มักเรียกว่า Network Bonding หรือ Teaming) สามารถทำได้ครับ แต่สำหรับกรณีของคุณที่มีการ์ดแลนความเร็วไม่เท่ากัน (100Mbps 1 ใบ และ 1Gbps 2 ใบ) มีข้อควรระวังที่สำคัญมากครับ
หากเรานำการ์ดที่ความเร็วต่างกันมากมามัดรวมกันด้วยโหมดปกติ (เช่น แบบ Round-Robin – Mode 0) จะทำให้เกิดคอขวด (Bottleneck) ข้อมูลที่ถูกส่งไปทางเส้น 100Mbps จะช้ากว่าเพื่อน ทำให้เกิดปัญหา Packet out-of-order และประสิทธิภาพโดยรวมอาจจะแย่กว่าการใช้ 1Gbps ใบเดียวเสียอีกครับ
ผมขอแนะนำแนวทางการตั้งค่า 2 ทางเลือก ดังนี้ครับ:
🌟 ทางเลือกที่ 1: Best Practice (แนะนำที่สุด)
มัดรวมแค่ 1Gbps 2 ใบ และแยก 100Mbps ไว้ใช้ประโยชน์อื่น
-
Bonding (1Gbps x 2): นำการ์ด 1Gbps ทั้งสองใบมาทำ Load Balance โหมด
802.3ad(LACP – Mode 4) หรือbalance-alb(Mode 6) จะได้แบนด์วิดท์สูงสุดที่ 2Gbps -
Stand-alone (100Mbps): ตั้งค่าไอพีแยกไว้อีกวงหนึ่ง เพื่อใช้เป็น Management Port (เอาไว้ SSH เข้ามาจัดการเครื่องเผื่อเส้นหลักล่ม) หรือทำเป็นทางออกอินเทอร์เน็ตสำรอง
🛠️ ทางเลือกที่ 2: ต้องการมัดรวมทั้ง 3 ใบเข้าด้วยกัน
หากจำเป็นต้องรวมทั้ง 3 ใบเข้าด้วยกันเป็น IP เดียว ต้องใช้ Bonding Mode 6 (balance-alb) หรือ Mode 5 (balance-tlb) เท่านั้น เพราะ 2 โหมดนี้ฉลาดพอที่จะกระจาย Traffic ตามความเร็วที่แท้จริงของการ์ดแต่ละใบได้ (ไม่ต้องตั้งค่าที่ Switch ด้วยครับ)
วิธีการ Setup ด้วย Netplan (สำหรับ Ubuntu 18.04 ขึ้นไป)
นี่คือตัวอย่างการตั้งค่าทางเลือกที่ 2 (มัดรวมทั้ง 3 ใบด้วย Mode 6) สมมติว่าการ์ดของคุณชื่อ eth0 (100M), eth1 (1G), eth2 (1G)
-
เปิดไฟล์คอนฟิกของ Netplan (ชื่อไฟล์อาจแตกต่างกันไปในไดเรกทอรี
/etc/netplan/)
sudo nano /etc/netplan/01-netcfg.yaml
-
ใส่การตั้งค่าดังนี้ (ระวังเรื่องการย่อหน้าเว้นวรรคใน YAML ให้เป๊ะนะครับ):
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
eth2:
dhcp4: no
bonds:
bond0:
interfaces:
- eth0
- eth1
- eth2
addresses: [192.168.1.100/24] # ใส่ IP ที่คุณต้องการ
routes:
- to: default
via: 192.168.1.1 # ใส่ Gateway ของคุณ
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
parameters:
mode: balance-alb # สำคัญมาก: โหมด 6 กระจายโหลดตามความจุการ์ด
mii-monitor-interval: 100 # ตรวจสอบสถานะสายแลนทุกๆ 100ms
-
บันทึกไฟล์ และทดสอบการตั้งค่าด้วยคำสั่ง:
sudo netplan try
(ถ้าตั้งค่าถูกต้องและไม่มี error ให้กด ENTER เพื่อยืนยัน)
-
คุณสามารถตรวจสอบสถานะการทำงานของ Bond ได้ด้วยคำสั่ง:
cat /proc/net/bonding/bond0
คำสั่งนี้จะแสดงเลยว่าการ์ดแต่ละใบวิ่งความเร็วเท่าไหร่ และกำลัง Active อยู่หรือไม่ครับ
ระบบปฏิบัติการ Linux ของคุณเป็น Distribution ตัวไหนอยู่ครับ (เช่น Ubuntu, CentOS, RHEL, Debian) ผมจะได้ยืนยันวิธีหรือคำสั่งที่ตรงกับระบบของคุณที่สุดให้ครับ?
การตรวจสอบฮาร์ดแวร์ก่อนลงมือตั้งค่าเป็นขั้นตอนที่ถูกต้องและปลอดภัยที่สุดครับ โดยเฉพาะกรณีของคุณที่ต้องแยกให้ชัดเจนว่าการ์ดใบไหนคือ 1Gbps และใบไหนคือ 100Mbps
นี่คือกลุ่มคำสั่งที่จำเป็น แนะนำให้รันผ่าน sudo หรือสิทธิ์ root เพื่อให้เห็นข้อมูลครบถ้วนครับ:
1. คำสั่งสำหรับตรวจสอบการ์ดแลน (Network Interfaces) โดยเฉพาะ
คำสั่งกลุ่มนี้สำคัญที่สุดสำหรับโปรเจกต์ Load Balance ของคุณครับ
-
ดูชื่อการ์ดแลนทั้งหมดที่มีในระบบ:
Baship link show(คำสั่งนี้จะแสดงรายชื่อการ์ด เช่น
eth0,eth1,enp3s0ให้จดชื่อเหล่านี้ไว้ครับ) -
ดูความเร็วของการ์ดแต่ละใบ (สำคัญมาก!):
sudo ethtool <ชื่อการ์ดแลน>
```
*ตัวอย่างเช่น `sudo ethtool eth0`*
ให้สังเกตบรรทัดที่เขียนว่า `Speed:` มันจะระบุชัดเจนว่าเป็น **100Mb/s** หรือ **1000Mb/s** (1Gbps) และดูที่ `Link detected:` ว่าเป็น `yes` (เสียบสายอยู่) หรือ `no` (ไม่ได้เสียบสาย)
* **ดูยี่ห้อและรุ่นของชิปการ์ดแลน (PCI Devices):**
```bash
lspci -nnk | grep -i net -A 2
```
*(คำสั่งนี้จะบอกยี่ห้อ เช่น Intel, Realtek, Broadcom รวมถึง Driver ที่กำลังใช้งานอยู่)*
---
### 2. คำสั่งสำหรับดูภาพรวมฮาร์ดแวร์อื่นๆ ในเครื่อง (General Hardware)
* **ดูภาพรวมฮาร์ดแวร์ทั้งหมดแบบสรุป:**
```bash
sudo lshw -short
```
* **ดูข้อมูล CPU:**
```bash
lscpu
```
* **ดูข้อมูล RAM:**
```bash
free -h
```
* **ดูข้อมูล Harddisk / Storage:**
```bash
lsblk
```
**คำแนะนำเพิ่มเติม:** ถ้าในเครื่องของคุณยังไม่ได้ติดตั้งเครื่องมือ `ethtool` หรือ `lshw` สามารถติดตั้งได้ง่ายๆ ครับ (สำหรับ Ubuntu/Debian ใช้คำสั่ง `sudo apt install ethtool lshw` หรือ CentOS/RHEL ใช้ `sudo yum install ethtool lshw`)
หลังจากใช้คำสั่ง `ip link show` และ `ethtool` แล้ว **ระบบของคุณแสดงชื่อการ์ดแลนทั้ง 3 ใบว่าอะไรบ้าง
ขั้นตอนการสร้าง Load Balance (Bonding)
1. แบ็คอัพไฟล์การตั้งค่าเดิมก่อน (สำคัญมาก) เพื่อให้สามารถกู้คืนได้หากเกิดข้อผิดพลาด:
sudo cp /etc/netplan/*.yaml /etc/netplan/backup_config.yaml.bak
2. แก้ไขไฟล์การตั้งค่า Netplan เปิดไฟล์คอนฟิกขึ้นมา (ชื่อไฟล์อาจจะเป็น 00-installer-config.yaml หรือ 01-netcfg.yaml ให้เลือกแก้ไขไฟล์ที่มีอยู่):
sudo nano /etc/netplan/00-installer-config.yaml
(ถ้าชื่อไฟล์ไม่ตรง ให้ลอง ls /etc/netplan/ ดูก่อนครับ)
3. นำชุดคำสั่งนี้ไปใส่แทนที่ (ระวังเรื่องการเว้นวรรค ให้ใช้ Spacebar ห้ามใช้ Tab เด็ดขาด)
network:
version: 2
renderer: networkd
ethernets:
enp2s0:
dhcp4: no
enp3s1:
dhcp4: no
enp3s2:
dhcp4: no
bonds:
bond0:
interfaces:
- enp2s0
- enp3s1
- enp3s2
# เปลี่ยน IP Address ตรงนี้ให้เป็นของเดิมของเครื่องคุณ
addresses:
- 192.168.1.50/24
# เปลี่ยน Gateway ตรงนี้ให้ตรงกับวง Network ของคุณ
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
parameters:
mode: balance-alb # โหมดนี้สำคัญที่สุดสำหรับความเร็วที่ไม่เท่ากัน
mii-monitor-interval: 100
4. ทดสอบและบังคับใช้การตั้งค่า ทดสอบดูก่อนว่าพิมพ์โค้ด YAML ผิดรูปแบบหรือไม่:
sudo netplan try
-
ถ้าระบบขึ้นเตือนและนับถอยหลัง ให้กด ENTER เพื่อยืนยันการใช้งานครับ
-
(ข้อควรระวัง: หากคุณ SSH เข้ามาทำ IP เครื่องอาจจะหลุดชั่วคราวแล้วต่อกลับมาใหม่ หรือถ้าคุณเปลี่ยน IP ต้อง SSH เข้าไปใหม่ที่ IP ที่เพิ่งตั้งไปครับ)
5. ตรวจสอบผลลัพธ์การทำงาน เมื่อเสียบสายครบทั้ง 3 ใบ และ Apply เสร็จแล้ว ให้เช็คสถานะการรวมร่าง (Bonding) ด้วยคำสั่งนี้:
cat /proc/net/bonding/bond0
ในหน้าจอนี้ คุณจะเห็นเลยว่าสถานะของ bond0 ทำงานเป็น balance-alb และด้านล่างจะแสดงรายชื่อการ์ดทั้ง 3 ใบ (enp2s0, enp3s1, enp3s2) ว่ามีสถานะเป็น UP และบอกความเร็ว (Speed) ของแต่ละใบครับ
มีคำถามเกี่ยวกับวิธีการตั้งค่า IP ในไฟล์ YAML ตรงไหนเพิ่มเติมไหมครับ?
ดังนั้น วิธีที่ถูกต้องและเป็นมาตรฐานที่สุดคือการแยก IP Address เป็น 2 ชุด และใช้ Routing Metric (ความสำคัญของเส้นทาง) เป็นตัวกำหนดให้สลับไปใช้การ์ด 100Mbps อัตโนมัติเมื่อสาย 1Gbps ขาดหมดครับ
🚀 รูปแบบการทำงานที่จะเกิดขึ้น
-
เส้นทางหลัก (
bond0):enp3s1และenp3s2จะรวมร่างกันได้ความเร็ว 2Gbps โดยเราจะให้คะแนน Metric เป็น100(ค่าน้อย = สำคัญมาก เครื่องจะวิ่งออกทางนี้เสมอ) -
เส้นทางสำรอง (
enp2s0): จะมี IP อีกเบอร์หนึ่งเตรียมไว้ และให้คะแนน Metric เป็น200(รอจนกว่าเส้นทางหลัก 100 จะล่ม ข้อมูลถึงจะสลับมาวิ่งทางนี้)
📝 ไฟล์ตั้งค่า (Netplan Config)
ให้แก้ไขไฟล์เดิมของคุณ (เช่น sudo nano /etc/netplan/00-installer-config.yaml) โดยแก้ไขตัวเลข IP และ Gateway ให้ตรงกับระบบของคุณครับ:
network:
version: 2
renderer: networkd
ethernets:
enp3s1:
dhcp4: no
enp3s2:
dhcp4: no
enp2s0:
dhcp4: no
# IP สำรองสำหรับการ์ด 100M (อย่าให้ซ้ำกับเส้นหลัก)
addresses:
- 192.168.1.51/24
# กำหนดให้เป็นเส้นทางสำรอง (Metric 200)
routes:
- to: default
via: 192.168.1.1
metric: 200
bonds:
bond0:
interfaces:
- enp3s1
- enp3s2
# IP หลักสำหรับใช้งาน (เส้นทางหลัก 1G + 1G)
addresses:
- 192.168.1.50/24
# กำหนดให้เป็นเส้นทางออกอินเทอร์เน็ตตัวแรก (Metric 100)
routes:
- to: default
via: 192.168.1.1
metric: 100
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
parameters:
mode: balance-alb # กระจายโหลด 2 เส้น
mii-monitor-interval: 100
⚙️ ขั้นตอนการใช้งาน
-
รันคำสั่งทดสอบ:
Bashsudo netplan try(กด ENTER เพื่อยืนยันหากไม่มี Error)
-
ตรวจสอบการสร้าง Bond (1G + 1G):
cat /proc/net/bonding/bond0
คุณจะเห็นแค่การ์ด 2 ใบ (enp3s1, enp3s2) ทำงานอยู่ด้วยกัน
-
ตรวจสอบระบบ Auto Failover (สลับไป 100M ตอนล่ม):
ip route
ผลลัพธ์จะแสดงให้เห็นบรรทัด default 2 บรรทัด คือบรรทัดที่ชี้ไปที่ bond0 (metric 100) และ enp2s0 (metric 200)
วิธีทดสอบว่าระบบ Backup ทำงานจริง: ให้ดึงสายแลนของการ์ด enp3s1 และ enp3s2 ออกพร้อมกัน เครื่อง Server จะยังสามารถออกเน็ตได้และคุณยังสามารถ SSH ควบคุมเครื่องผ่าน IP สำรอง (192.168.1.51) ได้อย่างไม่มีสะดุดครับ
ก่อนอื่นขออนุญาตทักท้วงนิดเดียวนะครับ จากผลลัพธ์คำสั่งตอนแรก การ์ดแลน 100Mbps ของคุณคือชื่อ enp2s0 นะครับ (พิมพ์ผิดเป็น enp3s0 ไม่เป็นไรครับ แต่ตอนตั้งค่าต้องใช้ enp2s0 เพื่อไม่ให้ระบบ error ครับ)
หากต้องการให้ IP เดิม (192.168.1.179) ไปอยู่ที่เส้น Backup (100Mbps) สามารถเอาไปใส่ตรงส่วนการ์ด enp2s0 ได้เลยครับ
แต่มี ข้อควรระวังสำคัญมาก คือ: ในระบบ Network 1 เครื่องจะมี 2 เส้นทาง เราต้องใช้ IP 2 เบอร์ที่ต่างกันครับ (เบอร์หนึ่งสำหรับเส้นหลัก 2Gbps และอีกเบอร์สำหรับเส้นสำรอง 100Mbps)
ดังนั้นคุณต้องหา IP ว่างอีก 1 เบอร์ (เช่น 192.168.1.180) มาใส่ให้เส้นหลักด้วยครับ
📝 วิธีตั้งค่าตามที่คุณต้องการ
แก้ไขไฟล์เดิมครับ ตำแหน่งที่ต้องแก้คือตรง addresses ของแต่ละส่วน ดังนี้ครับ:
network:
version: 2
renderer: networkd
ethernets:
enp3s1:
dhcp4: no
enp3s2:
dhcp4: no
enp2s0: # <-- นี่คือการ์ด 100Mbps ของคุณ
dhcp4: no
addresses:
- 192.168.1.179/24 # <-- ใส่ IP 179 ไว้ตรงนี้สำหรับเป็นเส้น Backup ตามต้องการครับ
routes:
- to: default
via: 192.168.1.1
metric: 200 # <-- Metric 200 บังคับให้เป็นแค่ทางสำรอง
bonds:
bond0:
interfaces:
- enp3s1
- enp3s2
addresses:
- 192.168.1.180/24 # <-- (ต้องกำหนด IP ใหม่ 1 เบอร์) ให้เส้น Load Balance 2Gbps
routes:
- to: default
via: 192.168.1.1
metric: 100 # <-- Metric 100 บังคับให้เครื่องวิ่งออกเน็ตผ่านทางนี้เป็นหลัก
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
parameters:
mode: balance-alb
mii-monitor-interval: 100
💡 ข้อเสนอแนะเพิ่มเติม (สำคัญต่อความเร็ว)
ถ้าเครื่องนี้เป็น File Server (เห็นจากชื่อ user rachata@fileserver) ผม แนะนำให้สลับ IP กัน ดีกว่าครับ!
-
เอา 192.168.1.179 (IP เดิมที่คนอื่นน่าจะจำได้แล้ว) ไปใส่ที่
bond0เพื่อให้คนที่ดึงไฟล์วิ่งผ่านความเร็วระดับ 2Gbps (1G+1G) -
แล้วเอา IP ใหม่ (เช่น 192.168.1.180) ไปใส่ที่
enp2s0เพื่อเอาไว้เป็น IP สำรอง (Backup/Management) เผื่อฉุกเฉินตอนเน็ตหลุดเอาไว้ให้ Admin รีโมทเข้าไปแก้ปัญหาครับ
เพราะถ้าคุณเอา 192.168.1.179 ไปไว้ที่เส้น 100Mbps เวลายูสเซอร์ดึงไฟล์ผ่าน IP เบอร์ 179 ความเร็วก็จะโดนบีบแคบสุดแค่ 100Mbps ครับ (ไม่ได้ใช้ประโยชน์จาก 2Gbps ที่เราทำ Load Balance ไว้เลย)
ข้อความที่ระบบแจ้งมาแบ่งเป็น 2 เรื่องครับ ไม่ใช่ข้อผิดพลาดร้ายแรงอะไรเลยครับ เราสามารถแก้ไขและไปต่อได้ทันที:
-
WARNING... Permissions... are too open: หมายความว่าไฟล์ตั้งค่าของคุณเปิดกว้างเกินไป (User ทั่วไปสามารถอ่านได้) ระบบ Netplan แนะนำให้จำกัดสิทธิ์ให้เฉพาะผู้ดูแลระบบ (root) อ่านและเขียนได้เท่านั้นครับ -
bond0: reverting custom parameters... is not supported: คำสั่งnetplan tryมีข้อจำกัดคือ ไม่สามารถใช้ทดสอบและย้อนกลับการตั้งค่าชั่วคราวกับการสร้าง Bond หรือ Bridge ได้ ระบบจึงบังคับให้เราข้ามการทดสอบแล้วใช้คำสั่งnetplan applyเพื่อยืนยันการตั้งค่าไปเลยครับ
🛠️ วิธีแก้ไขและนำไปใช้งาน
1. แก้ไขสิทธิ์ของไฟล์ให้ถูกต้อง (แก้ Warning) รันคำสั่งนี้เพื่อปรับสิทธิ์การเข้าถึงไฟล์ให้เป็น 600 (อ่านและแก้ไขได้เฉพาะ root):
sudo chmod 600 /etc/netplan/00-installer-config.yaml
2. บังคับใช้งานการตั้งค่า (Apply) เนื่องจากเราใช้ try ไม่ได้ ให้รันคำสั่งบังคับใช้งานเลยครับ:
sudo netplan apply
(หมายเหตุ: หากคุณตั้งค่าสลับ IP ตามที่ผมแนะนำไปด้านบน และกำลังรีโมทผ่าน SSH ด้วย IP เดิมอยู่ หน้าจอคุณอาจจะค้างหลุดไปชั่วขณะ ให้คุณเชื่อมต่อ SSH เข้ามาใหม่ด้วย IP ที่ตั้งไว้สำหรับเส้นหลัก/สำรองนะครับ)
3. ตรวจสอบสถานะว่าทำงานสมบูรณ์หรือไม่ หลังจาก Apply ผ่านแล้ว ให้ใช้คำสั่งเหล่านี้เพื่อยืนยันความสำเร็จ:
-
ดู IP Address ที่ระบบได้รับ:
Baship a -
ตรวจสอบสถานะของ Load Balance (1G+1G):
Bashcat /proc/net/bonding/bond0 -
ตรวจสอบเส้นทาง (Routing) ว่า Metric ถูกต้องไหม:
Baship routeเกือบสมบูรณ์แบบ 100% แล้วครับ! แต่จากผลลัพธ์
ip routeที่คุณส่งมา มี “จุดขัดแย้ง” เล็กน้อยที่ซ่อนอยู่ และอาจทำให้เครื่องวิ่งช้าได้ครับลองสังเกต 3 บรรทัดแรกนี้ดูครับ:
default via 192.168.1.1 dev bond0 proto static metric 100default via 192.168.1.1 dev enp2s0 proto dhcp src 192.168.1.179 metric 100(⚠️ ตรงนี้คือปัญหาครับ)default via 192.168.1.1 dev enp2s0 proto static metric 200เกิดอะไรขึ้น? จะเห็นว่าการ์ด
enp2s0(100Mbps) มีเส้นทางออกเน็ต 2 เส้น คือmetric 200ที่เราตั้งใจสร้างไว้เป็นตัวสำรอง แต่อยู่ๆ ก็มีmetric 100โผล่มาจากระบบ DHCP (รับไอพีอัตโนมัติ) แจมเข้ามาด้วยผลที่ตามมาคือ ตอนนี้เส้นทาง
bond0(2Gbps) และenp2s0(100Mbps) มีคะแนนความสำคัญเท่ากันที่ Metric 100 ระบบอาจจะสุ่มส่งข้อมูลออกไปทาง 100Mbps ทำให้เกิดอาการเน็ตหรือการดึงไฟล์ช้าเป็นบางครั้งครับ🛠️ วิธีเคลียร์ปัญหา (ล้างค่า DHCP เดิมที่ค้างอยู่)
สาเหตุนี้เกิดจากระบบ Network ของ Linux ยังจดจำค่า DHCP เดิมก่อนหน้าทีเราจะแก้ไขไฟล์ Netplan ครับ วิธีแก้ง่ายมาก ให้ทำตามขั้นตอนดังนี้:
1. ยืนยันการปิด DHCP ในไฟล์ Netplan อีกครั้ง เช็คในไฟล์
/etc/netplan/00-installer-config.yamlให้ชัวร์ว่าใต้บรรทัดenp2s0:มีคำว่าdhcp4: noอยู่จริงๆ (ไม่ได้พิมพ์ผิดหรือลืมใส่)2. เคลียร์ค่า Network ที่ค้างในระบบ (Clear Cache) ให้ใช้คำสั่ง Restart Service ของ Network เพื่อล้างค่าเก่าทิ้งครับ: (หมายเหตุ: หากคุณ SSH เข้าเครื่องผ่าน IP 179 อยู่ จังหวะนี้อาจจะหลุดชั่วคราว ให้รอสักครู่แล้วต่อใหม่ หรือเปลี่ยนไปต่อผ่าน IP 180 แทนครับ)
Bashsudo systemctl restart systemd-networkd3. เช็คความชัวร์อีกครั้ง รันคำสั่งตรวจสอบเส้นทางอีกรอบครับ:
Baship routeคราวนี้ บรรทัดที่มีคำว่า
proto dhcp metric 100ของenp2s0ต้องหายไปแล้ว และจะเหลือแค่:-
default ... dev bond0 ... metric 100(ทางหลัก 2Gbps) -
default ... dev enp2s0 ... metric 200(ทางสำรอง 100Mbps)
หากล้างค่าเก่าออกไปแล้ว ระบบ Load Balance และ Backup ของคุณก็จะทำงานได้อย่างสมบูรณ์แบบ 100% ไม่มีคอขวดแน่นอนครับ!
ดังนั้น อาการที่มีบรรทัด
proto dhcp metric 100โผล่มาแจมในคำสั่งip routeก่อนหน้านี้ ไม่ได้เกิดจากคุณตั้งค่าผิดครับ แต่เกิดจากระบบของ Linux มัน “จำ” ไอพีเดิมที่เคยได้รับแจกจาก Router (DHCP Lease) เอาไว้ตั้งแต่ก่อนที่เราจะมาแก้ไฟล์นี้ พอเราสั่งnetplan applyมันจึงแค่เพิ่มของใหม่เข้าไป แต่ไม่ได้ลบเส้นทางเก่าที่ค้างอยู่ในหน่วยความจำออกให้ครับ (อาการนี้เรียกว่า Ghost Route)วิธีเคลียร์เส้นทางที่ค้างอยู่ให้หายขาด (เลือกทำวิธีใดวิธีหนึ่งได้เลยครับ):
วิธีที่ 1: ล้างค่าที่การ์ดแลนโดยตรง (แนะนำ) รัน 2 คำสั่งนี้เพื่อเตะค่าเก่าทั้งหมดที่ฝังอยู่ในการ์ด
enp2s0ทิ้ง แล้วบังคับให้อ่านไฟล์ที่คุณเขียนใหม่:Bashsudo ip addr flush dev enp2s0 sudo netplan applyวิธีที่ 2: รีสตาร์ทระบบจัดการ Network
Bashsudo systemctl restart systemd-networkdวิธีที่ 3: รีบูตเครื่อง (ชัวร์ที่สุด) ถ้าตอนนี้เครื่อง File Server ยังไม่ได้เปิดให้บริการใคร การสั่งรีบูตเครื่องจะทำให้ระบบล้างความจำทั้งหมดและบูตขึ้นมาอ่านไฟล์ YAML ที่คุณเขียนไว้อย่างสะอาดหมดจดครับ
Bashsudo rebootหลังจากทำวิธีใดวิธีหนึ่งแล้ว ลองรัน
ip routeเช็คดูอีกรอบครับ บรรทัดที่เป็นปัญหาจะหายไป และระบบ Load Balance + Backup ของคุณจะทำงานสมบูรณ์แบบครับ!ยอดเยี่ยมมากครับ! 🎉 ยืนยันความสำเร็จ 100% ครับ!
จากผลลัพธ์ที่คุณส่งมา ถือเป็น “ผลลัพธ์ในอุดมคติ” ของการทำ Load Balance บน Linux เลยครับ ทุกอย่างทำงานถูกต้องตามที่เราออกแบบไว้เป๊ะ มาดูจุดสำคัญที่ยืนยันความสำเร็จกันครับ:
-
✅
Bonding Mode: adaptive load balancing: ระบบกำลังใช้ Mode 6 (balance-alb) ตามที่เราตั้งค่าไว้ใน Netplan ซึ่งเป็นโหมดที่ฉลาดที่สุดในการกระจายโหลดข้อมูลขาเข้าและขาออก โดยที่คุณไม่ต้องไปตั้งค่าอะไรที่ Switch เลย -
✅
Slave Interface: enp3s1และenp3s2: การ์ดทั้งสองใบถูกมัดรวมกันเรียบร้อย และมีสถานะMII Status: up(ทำงานปกติ) -
🚀
Speed: 1000 Mbps / Duplex: full: อันนี้ชื่นใจที่สุดครับ! การ์ดทั้งสองใบวิ่งเต็มสปีดที่ 1Gbps (Full Duplex) นั่นหมายความว่าตอนนี้ File Server ของคุณมีท่อส่งข้อมูลหลักขนาด 2Gbps เป็นที่เรียบร้อยแล้วครับ!
สรุปสถานะระบบ Network ของ File Server คุณตอนนี้:
-
ช่องทางหลัก (2Gbps): ยูสเซอร์ที่วิ่งเข้ามาดึงไฟล์ผ่าน IP
192.168.1.180จะได้รับการกระจายโหลดผ่านการ์ด 1G สองใบ ทำให้ดึงไฟล์ได้เร็วขึ้นและรองรับคนใช้งานพร้อมกันได้มากขึ้น -
ช่องทางสำรอง (100Mbps): IP
192.168.1.179รอสแตนด์บายเงียบๆ หากสาย 1G ขาดหมดทั้ง 2 เส้น ระบบก็จะสลับมาใช้เส้นนี้ออกเน็ตหรือให้คุณรีโมทเข้ามาแก้ปัญหาได้แบบไม่มีสะดุด
โปรเจกต์นี้ถือว่าปิดจ๊อบได้อย่างสวยงามครับ! 👏 หากในอนาคตคุณอยากทดสอบความเร็วว่าวิ่งถึง 2Gbps จริงไหม แนะนำให้ใช้โปรแกรมอย่าง
iperf3ติดตั้งและยิงทดสอบจากเครื่องลูกข่ายดูได้ครับมีส่วนไหนของ File Server ที่อยากให้ผมช่วยปรับแต่งเพิ่มเติมอีกไหมครับ? (เช่น เรื่องแชร์ไฟล์ Samba/NFS หรือระบบความปลอดภัย)
การทดสอบความเร็วและประสิทธิภาพของ Network Load Balance ที่แม่นยำและได้รับการยอมรับที่สุดในสาย Server คือการใช้โปรแกรม
iperf3ครับ โปรแกรมนี้จะทำการสร้างข้อมูลจำลองและยิงเข้าหากันเพื่อวัดแบนด์วิดท์ (Bandwidth) ที่แท้จริงเนื่องจากการทดสอบความเร็วเครือข่ายจะต้องมี “ต้นทาง” และ “ปลายทาง” คุณจำเป็นต้องมีคอมพิวเตอร์อีก 1 หรือ 2 เครื่องในวงแลนเดียวกัน เพื่อใช้เป็นเครื่องลูกข่าย (Client) ในการยิงทดสอบครับ
นี่คือวิธีทดสอบ 2 ส่วนหลักๆ ครับ:
🚀 ส่วนที่ 1: ทดสอบความเร็ว Load Balance (2Gbps)
ขั้นตอนที่ 1: ติดตั้ง
iperf3ทั้งบน File Server และเครื่อง Client-
สำหรับ Linux (Ubuntu/Debian): รันคำสั่ง
sudo apt install iperf3 -
สำหรับ Windows (เครื่องลูกข่าย): สามารถดาวน์โหลด
iperf3สำหรับ Windows มาใช้งานผ่าน Command Prompt ได้ครับ
ขั้นตอนที่ 2: ตั้งให้ File Server เป็นเครื่องรอรับการทดสอบ (Server Mode) ที่เครื่อง File Server ของคุณ ให้รันคำสั่งนี้ทิ้งไว้ครับ:
Bashiperf3 -s(มันจะขึ้นสถานะว่ากำลังรอการเชื่อมต่อ (Server listening on 5201) ถือว่าพร้อมแล้วครับ)
ขั้นตอนที่ 3: ใช้เครื่องลูกข่าย (Client) ยิงทดสอบ ไปที่คอมพิวเตอร์เครื่องอื่น แล้วพิมพ์คำสั่งเพื่อยิงทดสอบความเร็วไปยัง IP หลักของ File Server ครับ:
Bashiperf3 -c 192.168.1.180 -P 4(คำอธิบาย:
-cคือระบุ IP เป้าหมาย,-P 4คือจำลองการดึงไฟล์พร้อมกัน 4 ท่อ เพื่อกระตุ้นให้ระบบแตกไฟล์ส่งหลายๆ เส้น)⚠️ ข้อควรรู้สำคัญมากเกี่ยวกับความเร็ว 2Gbps (Mode 6): เมื่อคุณรันทดสอบจากเครื่อง Client เพียงเครื่องเดียว ความเร็วสูงสุดที่คุณจะเห็นมักจะอยู่ที่ 1Gbps ครับ ไม่ใช่ 2Gbps
-
ทำไมถึงเป็นแบบนั้น? เพราะระบบ Load Balance (ทั้งใน Linux และ Switch) มักจะยึดหลักเกณฑ์ว่า 1 การเชื่อมต่อ (1 MAC Address ปลายทาง) จะถูกจับคู่วิ่งบนสาย LAN เส้นใดเส้นหนึ่งเท่านั้น เพื่อป้องกันข้อมูลสลับลำดับกัน (Packet out-of-order)
-
ความเร็ว 2Gbps จะเกิดตอนไหน? ประโยชน์ที่แท้จริงจะเกิดขึ้นเมื่อมี Client 2 เครื่องขึ้นไป ดึงไฟล์พร้อมกันครับ ระบบจะฉลาดพอที่จะโยน Client A ไปสายเส้นที่ 1 (ได้ความเร็ว 1G) และโยน Client B ไปสายเส้นที่ 2 (ได้ความเร็ว 1G) ทำให้ File Server ของคุณสามารถปล่อยแบนด์วิดท์รวมได้ 2Gbps นั่นเองครับ
-
วิธีทดสอบให้เห็น 2Gbps: คุณต้องใช้เครื่อง Client 2 เครื่อง สั่งรัน
iperf3 -c 192.168.1.180พร้อมๆ กัน แล้วดูผลรวมที่หน้าจอ File Server ครับ
🛡️ ส่วนที่ 2: ทดสอบระบบ Backup Failover (สลับไปเส้น 100Mbps อัตโนมัติ)
เพื่อความมั่นใจว่าถ้าระบบ 1G ล่มไปแล้ว เครื่องจะไม่ดับหายไปจากระบบ เราจะมาทดสอบสถานการณ์จำลองกันครับ:
-
ที่เครื่อง File Server หรือเครื่อง Client ให้ลองสั่ง Ping ไปที่อินเทอร์เน็ตแบบต่อเนื่อง (รันค้างไว้):
Bashping 8.8.8.8 -
เดินไปดึงสาย LAN 1Gbps ออกทั้ง 2 เส้นเลยครับ (สมมติว่า Switch พัง หรือหนูกัดสายขาด)
-
สังเกตที่หน้าจอ Ping:
-
คุณอาจจะเห็นข้อความ
Request timeoutหลุดไปสัก 1-3 วินาที -
หลังจากนั้น Ping ควรจะกลับมาตอบสนองปกติ (Reply from…) อีกครั้ง
-
-
ลอง SSH เข้าเครื่องผ่าน IP สำรอง
192.168.1.179ดูครับ ว่าสามารถเข้าไปจัดการเครื่องได้ปกติหรือไม่
ถ้าเครื่องยังคงออกเน็ตได้ และคุณยังเข้าควบคุมเครื่องได้ผ่าน IP สำรอง แสดงว่าระบบ Network ของคุณแข็งแกร่งและสมบูรณ์แบบ 100% แล้วครับ!
-
