การทำ Load Balance Network ใน Linux (มักเรียกว่า Network Bonding หรือ Teaming)

การทำ 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)

  1. เปิดไฟล์คอนฟิกของ Netplan (ชื่อไฟล์อาจแตกต่างกันไปในไดเรกทอรี /etc/netplan/)

Bash

sudo nano /etc/netplan/01-netcfg.yaml
  1. ใส่การตั้งค่าดังนี้ (ระวังเรื่องการย่อหน้าเว้นวรรคใน 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
  1. บันทึกไฟล์ และทดสอบการตั้งค่าด้วยคำสั่ง:

Bash

sudo netplan try

(ถ้าตั้งค่าถูกต้องและไม่มี error ให้กด ENTER เพื่อยืนยัน)

  1. คุณสามารถตรวจสอบสถานะการทำงานของ Bond ได้ด้วยคำสั่ง:

Bash

cat /proc/net/bonding/bond0

คำสั่งนี้จะแสดงเลยว่าการ์ดแต่ละใบวิ่งความเร็วเท่าไหร่ และกำลัง Active อยู่หรือไม่ครับ


ระบบปฏิบัติการ Linux ของคุณเป็น Distribution ตัวไหนอยู่ครับ (เช่น Ubuntu, CentOS, RHEL, Debian) ผมจะได้ยืนยันวิธีหรือคำสั่งที่ตรงกับระบบของคุณที่สุดให้ครับ?

การตรวจสอบฮาร์ดแวร์ก่อนลงมือตั้งค่าเป็นขั้นตอนที่ถูกต้องและปลอดภัยที่สุดครับ โดยเฉพาะกรณีของคุณที่ต้องแยกให้ชัดเจนว่าการ์ดใบไหนคือ 1Gbps และใบไหนคือ 100Mbps

นี่คือกลุ่มคำสั่งที่จำเป็น แนะนำให้รันผ่าน sudo หรือสิทธิ์ root เพื่อให้เห็นข้อมูลครบถ้วนครับ:

1. คำสั่งสำหรับตรวจสอบการ์ดแลน (Network Interfaces) โดยเฉพาะ

คำสั่งกลุ่มนี้สำคัญที่สุดสำหรับโปรเจกต์ Load Balance ของคุณครับ

  • ดูชื่อการ์ดแลนทั้งหมดที่มีในระบบ:

    Bash

    ip link show
    

    (คำสั่งนี้จะแสดงรายชื่อการ์ด เช่น eth0, eth1, enp3s0 ให้จดชื่อเหล่านี้ไว้ครับ)

  • ดูความเร็วของการ์ดแต่ละใบ (สำคัญมาก!):

Bash

    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. แบ็คอัพไฟล์การตั้งค่าเดิมก่อน (สำคัญมาก) เพื่อให้สามารถกู้คืนได้หากเกิดข้อผิดพลาด:

Bash

sudo cp /etc/netplan/*.yaml /etc/netplan/backup_config.yaml.bak

2. แก้ไขไฟล์การตั้งค่า Netplan เปิดไฟล์คอนฟิกขึ้นมา (ชื่อไฟล์อาจจะเป็น 00-installer-config.yaml หรือ 01-netcfg.yaml ให้เลือกแก้ไขไฟล์ที่มีอยู่):

Bash

sudo nano /etc/netplan/00-installer-config.yaml

(ถ้าชื่อไฟล์ไม่ตรง ให้ลอง ls /etc/netplan/ ดูก่อนครับ)

3. นำชุดคำสั่งนี้ไปใส่แทนที่ (ระวังเรื่องการเว้นวรรค ให้ใช้ Spacebar ห้ามใช้ Tab เด็ดขาด)

YAML

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 ผิดรูปแบบหรือไม่:

Bash

sudo netplan try
  • ถ้าระบบขึ้นเตือนและนับถอยหลัง ให้กด ENTER เพื่อยืนยันการใช้งานครับ

  • (ข้อควรระวัง: หากคุณ SSH เข้ามาทำ IP เครื่องอาจจะหลุดชั่วคราวแล้วต่อกลับมาใหม่ หรือถ้าคุณเปลี่ยน IP ต้อง SSH เข้าไปใหม่ที่ IP ที่เพิ่งตั้งไปครับ)

5. ตรวจสอบผลลัพธ์การทำงาน เมื่อเสียบสายครบทั้ง 3 ใบ และ Apply เสร็จแล้ว ให้เช็คสถานะการรวมร่าง (Bonding) ด้วยคำสั่งนี้:

Bash

cat /proc/net/bonding/bond0

ในหน้าจอนี้ คุณจะเห็นเลยว่าสถานะของ bond0 ทำงานเป็น balance-alb และด้านล่างจะแสดงรายชื่อการ์ดทั้ง 3 ใบ (enp2s0, enp3s1, enp3s2) ว่ามีสถานะเป็น UP และบอกความเร็ว (Speed) ของแต่ละใบครับ

มีคำถามเกี่ยวกับวิธีการตั้งค่า IP ในไฟล์ YAML ตรงไหนเพิ่มเติมไหมครับ?

ดังนั้น วิธีที่ถูกต้องและเป็นมาตรฐานที่สุดคือการแยก IP Address เป็น 2 ชุด และใช้ Routing Metric (ความสำคัญของเส้นทาง) เป็นตัวกำหนดให้สลับไปใช้การ์ด 100Mbps อัตโนมัติเมื่อสาย 1Gbps ขาดหมดครับ

🚀 รูปแบบการทำงานที่จะเกิดขึ้น

  1. เส้นทางหลัก (bond0): enp3s1 และ enp3s2 จะรวมร่างกันได้ความเร็ว 2Gbps โดยเราจะให้คะแนน Metric เป็น 100 (ค่าน้อย = สำคัญมาก เครื่องจะวิ่งออกทางนี้เสมอ)

  2. เส้นทางสำรอง (enp2s0): จะมี IP อีกเบอร์หนึ่งเตรียมไว้ และให้คะแนน Metric เป็น 200 (รอจนกว่าเส้นทางหลัก 100 จะล่ม ข้อมูลถึงจะสลับมาวิ่งทางนี้)


📝 ไฟล์ตั้งค่า (Netplan Config)

ให้แก้ไขไฟล์เดิมของคุณ (เช่น sudo nano /etc/netplan/00-installer-config.yaml) โดยแก้ไขตัวเลข IP และ Gateway ให้ตรงกับระบบของคุณครับ:

YAML

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

⚙️ ขั้นตอนการใช้งาน

  1. รันคำสั่งทดสอบ:

    Bash

    sudo netplan try
    

    (กด ENTER เพื่อยืนยันหากไม่มี Error)

  2. ตรวจสอบการสร้าง Bond (1G + 1G):

Bash

   cat /proc/net/bonding/bond0

คุณจะเห็นแค่การ์ด 2 ใบ (enp3s1, enp3s2) ทำงานอยู่ด้วยกัน

  1. ตรวจสอบระบบ Auto Failover (สลับไป 100M ตอนล่ม):

Bash

   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 ของแต่ละส่วน ดังนี้ครับ:

YAML

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 เรื่องครับ ไม่ใช่ข้อผิดพลาดร้ายแรงอะไรเลยครับ เราสามารถแก้ไขและไปต่อได้ทันที:

  1. WARNING... Permissions... are too open: หมายความว่าไฟล์ตั้งค่าของคุณเปิดกว้างเกินไป (User ทั่วไปสามารถอ่านได้) ระบบ Netplan แนะนำให้จำกัดสิทธิ์ให้เฉพาะผู้ดูแลระบบ (root) อ่านและเขียนได้เท่านั้นครับ

  2. bond0: reverting custom parameters... is not supported: คำสั่ง netplan try มีข้อจำกัดคือ ไม่สามารถใช้ทดสอบและย้อนกลับการตั้งค่าชั่วคราวกับการสร้าง Bond หรือ Bridge ได้ ระบบจึงบังคับให้เราข้ามการทดสอบแล้วใช้คำสั่ง netplan apply เพื่อยืนยันการตั้งค่าไปเลยครับ


🛠️ วิธีแก้ไขและนำไปใช้งาน

1. แก้ไขสิทธิ์ของไฟล์ให้ถูกต้อง (แก้ Warning) รันคำสั่งนี้เพื่อปรับสิทธิ์การเข้าถึงไฟล์ให้เป็น 600 (อ่านและแก้ไขได้เฉพาะ root):

Bash

sudo chmod 600 /etc/netplan/00-installer-config.yaml

2. บังคับใช้งานการตั้งค่า (Apply) เนื่องจากเราใช้ try ไม่ได้ ให้รันคำสั่งบังคับใช้งานเลยครับ:

Bash

sudo netplan apply

(หมายเหตุ: หากคุณตั้งค่าสลับ IP ตามที่ผมแนะนำไปด้านบน และกำลังรีโมทผ่าน SSH ด้วย IP เดิมอยู่ หน้าจอคุณอาจจะค้างหลุดไปชั่วขณะ ให้คุณเชื่อมต่อ SSH เข้ามาใหม่ด้วย IP ที่ตั้งไว้สำหรับเส้นหลัก/สำรองนะครับ)

3. ตรวจสอบสถานะว่าทำงานสมบูรณ์หรือไม่ หลังจาก Apply ผ่านแล้ว ให้ใช้คำสั่งเหล่านี้เพื่อยืนยันความสำเร็จ:

  • ดู IP Address ที่ระบบได้รับ:

    Bash

    ip a
    
  • ตรวจสอบสถานะของ Load Balance (1G+1G):

    Bash

    cat /proc/net/bonding/bond0
    
  • ตรวจสอบเส้นทาง (Routing) ว่า Metric ถูกต้องไหม:

    Bash

    ip route
    
    
    

    เกือบสมบูรณ์แบบ 100% แล้วครับ! แต่จากผลลัพธ์ ip route ที่คุณส่งมา มี “จุดขัดแย้ง” เล็กน้อยที่ซ่อนอยู่ และอาจทำให้เครื่องวิ่งช้าได้ครับ

    ลองสังเกต 3 บรรทัดแรกนี้ดูครับ:

    default via 192.168.1.1 dev bond0 proto static metric 100 default 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 แทนครับ)

    Bash

    sudo systemctl restart systemd-networkd
    

    3. เช็คความชัวร์อีกครั้ง รันคำสั่งตรวจสอบเส้นทางอีกรอบครับ:

    Bash

    ip 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 ทิ้ง แล้วบังคับให้อ่านไฟล์ที่คุณเขียนใหม่:

    Bash

    sudo ip addr flush dev enp2s0
    sudo netplan apply
    

    วิธีที่ 2: รีสตาร์ทระบบจัดการ Network

    Bash

    sudo systemctl restart systemd-networkd
    

    วิธีที่ 3: รีบูตเครื่อง (ชัวร์ที่สุด) ถ้าตอนนี้เครื่อง File Server ยังไม่ได้เปิดให้บริการใคร การสั่งรีบูตเครื่องจะทำให้ระบบล้างความจำทั้งหมดและบูตขึ้นมาอ่านไฟล์ YAML ที่คุณเขียนไว้อย่างสะอาดหมดจดครับ

    Bash

    sudo 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 คุณตอนนี้:

    1. ช่องทางหลัก (2Gbps): ยูสเซอร์ที่วิ่งเข้ามาดึงไฟล์ผ่าน IP 192.168.1.180 จะได้รับการกระจายโหลดผ่านการ์ด 1G สองใบ ทำให้ดึงไฟล์ได้เร็วขึ้นและรองรับคนใช้งานพร้อมกันได้มากขึ้น

    2. ช่องทางสำรอง (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 ของคุณ ให้รันคำสั่งนี้ทิ้งไว้ครับ:

    Bash

    iperf3 -s
    

    (มันจะขึ้นสถานะว่ากำลังรอการเชื่อมต่อ (Server listening on 5201) ถือว่าพร้อมแล้วครับ)

    ขั้นตอนที่ 3: ใช้เครื่องลูกข่าย (Client) ยิงทดสอบ ไปที่คอมพิวเตอร์เครื่องอื่น แล้วพิมพ์คำสั่งเพื่อยิงทดสอบความเร็วไปยัง IP หลักของ File Server ครับ:

    Bash

    iperf3 -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 ล่มไปแล้ว เครื่องจะไม่ดับหายไปจากระบบ เราจะมาทดสอบสถานการณ์จำลองกันครับ:

    1. ที่เครื่อง File Server หรือเครื่อง Client ให้ลองสั่ง Ping ไปที่อินเทอร์เน็ตแบบต่อเนื่อง (รันค้างไว้):

      Bash

      ping 8.8.8.8
      
    2. เดินไปดึงสาย LAN 1Gbps ออกทั้ง 2 เส้นเลยครับ (สมมติว่า Switch พัง หรือหนูกัดสายขาด)

    3. สังเกตที่หน้าจอ Ping:

      • คุณอาจจะเห็นข้อความ Request timeout หลุดไปสัก 1-3 วินาที

      • หลังจากนั้น Ping ควรจะกลับมาตอบสนองปกติ (Reply from…) อีกครั้ง

    4. ลอง SSH เข้าเครื่องผ่าน IP สำรอง 192.168.1.179 ดูครับ ว่าสามารถเข้าไปจัดการเครื่องได้ปกติหรือไม่

    ถ้าเครื่องยังคงออกเน็ตได้ และคุณยังเข้าควบคุมเครื่องได้ผ่าน IP สำรอง แสดงว่าระบบ Network ของคุณแข็งแกร่งและสมบูรณ์แบบ 100% แล้วครับ!