Link Aggregation (LACP/802.3ad) cho Linux: Mở rộng băng thông và Dự phòng thực tế

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Bối cảnh & Lý do: Phá vỡ giới hạn 1Gbps

Năm ngoái, máy chủ lưu trữ chính của tôi đã gặp giới hạn về hiệu suất. Các kết nối 1Gbps tiêu chuẩn xử lý lưu lượng văn phòng thông thường một cách dễ dàng. Tuy nhiên, chúng gặp khó khăn khi các bản sao lưu hàng đêm 4TB diễn ra cùng lúc với việc pull các image Docker nặng từ hơn 25 container. Trong những lúc chồng chéo này, độ trễ mạng vọt từ mức 2ms ổn định lên hơn 300ms, khiến các dịch vụ web bị đình trệ. Tôi đứng trước hai lựa chọn: chi 2.500 USD cho switch 10Gbps và các module SFP+, hoặc tận dụng bốn cổng Ethernet đang rảnh rỗi trên thân máy chủ.

Triển khai Link Aggregation Control Protocol (LACP) là lựa chọn hợp lý nhất. Tiêu chuẩn IEEE 802.3ad này gộp nhiều interface vật lý thành một luồng logic duy nhất. Đây là một kỹ năng quan trọng cho bất kỳ ai muốn kéo dài tuổi thọ của phần cứng hiện có. LACP mang lại hai lợi ích lớn: tăng tổng băng thông (throughput) và cung cấp khả năng dự phòng (failover) liền mạch. Nếu một sợi cáp bị tuột hoặc một cổng bị hỏng, lưu lượng sẽ đơn giản chuyển sang các kết nối còn lại mà không làm gián đoạn kết nối.

Độ ổn định vẫn được duy trì hoàn hảo sau nhiều tháng hoạt động trong môi trường lưu lượng cao. Lưu ý rằng LACP sẽ không làm cho một file 1GB được chuyển đi với tốc độ 2Gbps. Thay vào đó, nó cân bằng tải nhiều luồng lưu lượng khác nhau trên tất cả các kết nối có sẵn. Điều này ngăn chặn việc một người dùng tải nặng chiếm dụng toàn bộ băng thông và làm chậm hệ thống của những người còn lại.

Cài đặt: Chuẩn bị môi trường Linux

Các nhân Linux hiện đại đã hỗ trợ bonding theo mặc định, nhưng bạn vẫn cần các công cụ quản lý phù hợp. Các hệ thống Ubuntu và Debian trước đây thường dựa vào package ifenslave. Mặc dù NetplanNetworkManager hiện nay đã đảm nhận hầu hết các công việc nặng nhọc, tôi vẫn kiểm tra để đảm bảo module bonding đã sẵn sàng.

# Cài đặt các công cụ bonding
sudo apt update && sudo apt install ifenslave -y

# Xác nhận module kernel đang hoạt động
lsmod | grep bonding

Dịch vụ mạng thường nạp module theo yêu cầu. Nếu lệnh trên không trả về kết quả gì, đừng lo lắng—nó sẽ được kích hoạt ngay khi chúng ta áp dụng cấu hình. Trong môi trường lab của tôi, tôi sử dụng hai interface vật lý là eno1eno2, chúng ta sẽ gộp chúng vào một interface logic mới gọi là bond0.

Cấu hình: Phía Linux (Netplan & NMCLI)

Netplan là công cụ ưa thích của tôi cho môi trường máy chủ. Cú pháp YAML rất sạch sẽ và tích hợp hoàn hảo vào các hệ thống quản lý phiên bản (version control). Đối với thiết lập này, transmit-hash-policy là cực kỳ quan trọng. Tôi sử dụng layer3+4 vì nó băm (hash) lưu lượng dựa trên địa chỉ IP và số hiệu cổng (Port), đảm bảo phân phối đều cho cả lưu lượng HTTPS và database hỗn hợp.

Cách 1: Netplan (Tốt nhất cho Ubuntu/Debian)

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
    eno2:
      dhcp4: no
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      addresses: [192.168.1.50/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
      parameters:
        mode: 802.3ad
        lacp-rate: fast
        mii-monitor-interval: 100
        transmit-hash-policy: layer3+4

Chạy sudo netplan apply để thực thi các thay đổi. Nếu bạn đang thao tác qua SSH, hãy sử dụng sudo netplan try. Lệnh này sẽ thêm một bộ hẹn giờ an toàn giúp đảo ngược các thay đổi nếu bạn bị mất quyền truy cập, tránh việc phải lái xe một quãng đường dài đến trung tâm dữ liệu.

Cách 2: NetworkManager (Tốt nhất cho RHEL/AlmaLinux/Rocky)

Công cụ nmcli nhanh hơn cho các thay đổi tức thời trên các hệ thống dựa trên RHEL. Tôi đã sử dụng các lệnh cụ thể sau để xây dựng một bond cho cluster phụ:

# Định nghĩa interface bond
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad,lacp_rate=1,mii=100,xmit_hash_policy=layer3+4"

# Gán các cổng vật lý 'slave'
nmcli connection add type ethernet con-name bond0-port1 ifname eno1 master bond0
nmcli connection add type ethernet con-name bond0-port2 ifname eno2 master bond0

# Thiết lập chi tiết IP tĩnh
nmcli connection modify bond0 ipv4.addresses 192.168.1.51/24 ipv4.method manual ipv4.gateway 192.168.1.1

# Kích hoạt kết nối
nmcli connection up bond0

Phía Switch: LACP / Port-Channel

Một sai lầm phổ biến là chỉ cấu hình máy chủ mà bỏ qua switch. Vì chúng ta đang sử dụng 802.3ad, switch phải chủ động tham gia vào quá trình thương lượng. Nếu switch không được cấu hình, Spanning Tree Protocol (STP) có thể nhầm lẫn kết nối kép này là một vòng lặp mạng (loop) và vô hiệu hóa các cổng hoàn toàn.

Trên phần cứng Cisco, hãy sử dụng các lệnh sau để nhóm các cổng:

interface range GigabitEthernet1/0/1 - 2
 channel-group 1 mode active
 description Ket-noi-LACP-den-Server-Linux
 exit

interface Port-channel 1
 switchport mode access
 switchport access vlan 10
 spanning-tree portfast

Thiết lập mode thành active là bắt buộc. Nó chỉ thị cho switch gửi các gói tin LACP đến máy chủ. Đối với người dùng Ubiquiti hoặc MikroTik, hãy tìm mục “Aggregate” hoặc “Bonding” trong giao diện quản lý và đảm bảo chế độ được đặt cụ thể là 802.3ad, không phải “Static/On.”

Kiểm tra & Giám sát: Đảm bảo hệ thống hoạt động

Đừng bao giờ mặc định một kết nối là ổn định chỉ vì đèn tín hiệu đang nhấp nháy. Nguồn thông tin chính xác nhất trên Linux là proc filesystem. Tệp tin này tiết lộ trạng thái thương lượng LACP theo thời gian thực.

cat /proc/net/bonding/bond0

Kiểm tra “Partner Mac Address.” Nếu nó hiển thị toàn số không, máy chủ không nhận được dữ liệu từ switch. Bạn cần thấy địa chỉ MAC của switch và trạng thái “LACP activity: active”. Ngoài ra, hãy xác nhận cả eno1eno2 đều được đánh dấu là “up.”

Để xem lưu lượng đang hoạt động, hãy sử dụng nload. Việc giám sát bond0 sẽ cho thấy tổng băng thông, trong khi kiểm tra các cổng vật lý riêng lẻ sẽ xác nhận việc cân bằng tải có hiệu quả hay không:

# Giám sát cân bằng tải trên từng kết nối
nload eno1 eno2

Trong các bài kiểm tra áp lực (stress test), máy chủ của chúng tôi đã đạt mức 1,85Gbps trong quá trình sao lưu đồng bộ. Điều này xác nhận chính sách băm layer3+4 đang phân phối tải hiệu quả trên cả hai sợi cáp. Nếu bạn gặp sự cố, dmesg | grep bond là nơi đầu tiên cần kiểm tra để tìm các lỗi link-flap hoặc các gói LACP bị rơi.

Share: