Cấu hình Corosync Redundant Network (Dual Ring) trên Proxmox VE chống Split-Brain

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Khi một sợi cáp mạng kéo sập cả cụm Proxmox HA

Tưởng tượng lúc 2 giờ sáng, một chiếc switch mạng bất ngờ treo firmware. Ngay lập tức, cụm Proxmox HA mất tín hiệu quorum. Các node tưởng bên kia đã sập và cơ chế watchdog nhảy vào tự reboot hàng loạt. Tệ hơn, nếu storage dùng chung vẫn còn kết nối, hiện tượng split-brain sẽ xảy ra: hai nhóm node cùng tranh nhau ghi dữ liệu. Hậu quả là hỏng ổ ảo (VM disk corruption) chỉ sau vài giây.

Mình từng nếm mùi sự cố này trên cụm homelab 3 node quản lý 18 VM. Thời gian đầu, mình gom tất cả lưu lượng vào chung một card mạng vật lý qua VLAN: từ Corosync, VM network cho tới backup. Khi Proxmox Backup Server (PBS) bắt đầu kéo dữ liệu với tốc độ 110 MB/s, cổng mạng nghẽn hoàn toàn.

Gói ping Corosync trễ đột ngột lên 80ms. Cụm cluster lập tức cảnh báo mất node liên tục. Kinh nghiệm xương máu: Corosync không cần băng thông lớn, nó cần độ trễ cực kỳ ổn định. Thiết lập đường mạng dự phòng (Redundant Ring / Dual Ring) là việc bắt buộc phải làm trước khi đưa cluster vào chạy thực tế.

Bản chất Corosync Dual Ring: Kronosnet (knet) hoạt động ra sao?

Kể từ Proxmox VE 6, Corosync nâng cấp lên bản 3.x và chuyển sang nền tảng Kronosnet (knet). Cải tiến này thay đổi hoàn toàn cách cụm cluster kết nối:

  • Hỗ trợ đa liên kết (Multi-link): Bạn có thể cắm tối đa 8 đường link vật lý (link0 đến link7). Hệ thống không còn phụ thuộc vào giao thức IP Multicast vốn hay bị switch chặn.
  • Cơ chế failover linh hoạt: Knet cung cấp hai chế độ truyền tải là passive và active. Ở chế độ passive (mặc định), hệ thống chỉ kích hoạt link phụ khi link chính đứt hẳn. Chế độ active gửi dữ liệu song song trên cả hai đường, loại bỏ hoàn toàn độ trễ khi chuyển mạch.
  • Khắc phục giới hạn của LACP: Gom card mạng bằng LACP (Bonding 802.3ad) không bảo vệ được bạn nếu toàn bộ switch gặp sự cố nguồn hoặc treo chip điều khiển. Với Corosync Dual Ring, bạn cắm link0 vào Switch A và link1 sang Switch B. Hai luồng mạng tách biệt hoàn toàn.

Ba nguyên tắc sống còn khi định tuyến Corosync

  1. Ưu tiên jitter thấp hơn băng thông: Gói tin heartbeat chỉ nặng khoảng 100 – 300 bytes/s nhưng yêu cầu độ trễ dưới 2ms. Một sợi cáp 1Gbps độc lập luôn an toàn hơn cáp quang 10Gbps đang gánh tải Ceph hoặc backup.
  2. Bắt buộc chia tách subnet: Mỗi link Corosync phải nằm trên một dải IP riêng biệt. Ví dụ: link0 dùng 192.168.10.0/24, link1 dùng 192.168.20.0/24.
  3. Nói không với Gateway: Cấu hình giao tiếp trực tiếp qua Layer 2. Tuyệt đối không để gói tin Corosync đi qua router trung gian.

Từng bước cấu hình Dual Ring trên cụm 3 Node

Mô hình giả lập gồm 3 node: pve-01, pve-02, pve-03. Đường mạng link0 hiện tại đang chạy dải 192.168.10.0/24. Chúng ta sẽ cắm thêm card mạng thứ hai (link1) nối sang switch dự phòng với dải 192.168.20.0/24.

Bước 1: Khai báo card mạng phụ trên từng node

Mở terminal SSH vào từng máy chủ và chỉnh sửa cấu hình network:

nano /etc/network/interfaces

Khai báo interface thứ hai (ví dụ eno2 trên node pve-01):

auto eno2
iface eno2 inet static
    address 192.168.20.11/24
    # Lưu ý: Tuyệt đối KHÔNG gán gateway ở card mạng này

Nạp lại cấu hình mạng trực tiếp mà không cần khởi động lại máy chủ:

ifreload -a

Thực hiện tương tự cho hai node còn lại: đặt IP 192.168.20.12 cho node 2 và 192.168.20.13 cho node 3. Hãy ping thử giữa các IP mới để chắc chắn đường cáp thứ hai đã thông mạng.

Bước 2: Sao lưu file cấu hình cluster

Tệp corosync.conf là file cấu hình sống còn của cụm Proxmox. Sai một dấu thụt lề hay một ký tự cũng có thể khiến dịch vụ từ chối khởi động. Hãy tạo bản sao lưu ngay:

cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak

Bước 3: Chỉnh sửa corosync.conf để thêm link1

Do thư mục /etc/pve/ sử dụng hệ thống tệp pmxcfs tự đồng bộ, bạn chỉ cần mở file trên một node bất kỳ:

nano /etc/pve/corosync.conf

Cập nhật lại phần totem và danh sách nodelist theo mẫu chuẩn Corosync 3:

totem {
  cluster_name: homelab-cluster
  config_version: 2
  interface {
    linknumber: 0
  }
  interface {
    linknumber: 1
  }
  ip_version: ipv4
  link_mode: passive
  secauth: on
  version: 2
}

nodelist {
  node {
    name: pve-01
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 192.168.10.11
    ring1_addr: 192.168.20.11
  }
  node {
    name: pve-02
    nodeid: 2
    quorum_votes: 1
    ring0_addr: 192.168.10.12
    ring1_addr: 192.168.20.12
  }
  node {
    name: pve-03
    nodeid: 3
    quorum_votes: 1
    ring0_addr: 192.168.10.13
    ring1_addr: 192.168.20.13
  }
}

Quy tắc bắt buộc: Mỗi lần sửa tệp này, bạn phải tăng chỉ số config_version lên 1 số (ví dụ từ 1 lên 2). Proxmox lấy số này làm mốc nhận diện phiên bản mới để đồng bộ sang toàn cụm.

Bước 4: Nạp lại tiến trình Corosync

Ghi file lại và chạy lệnh cập nhật trên từng node:

systemctl reload-or-restart corosync

Bước 5: Xác thực trạng thái Dual Ring

Trước tiên, kiểm tra tổng thể cụm cluster:

pvecm status

Sau đó, đọc chi tiết trạng thái từng kết nối knet bằng lệnh:

corosync-cfgtool -s

Kết quả trả về chuẩn sẽ hiển thị cả hai link đều ở trạng thái hoạt động tốt:

Printing link status:
LINK ID 0:
	addr    = 192.168.10.11
	status  = OK
LINK ID 1:
	addr    = 192.168.20.11
	status  = OK

Nếu LINK ID 1 hiển thị status = OK, cụm máy chủ của bạn đã có 2 đường bảo vệ độc lập.

Kinh nghiệm thực chiến khi vận hành

  • Mở cổng tường lửa (Firewall): Corosync sử dụng cổng UDP từ 5405 đến 5412 (tăng dần theo số lượng link). Nếu bật firewall trên Proxmox hoặc switch Layer 3, bạn cần mở dải port này trên cả hai subnet.
  • Cân nhắc đổi sang Active mode: Khi hai switch có chất lượng và băng thông tương đương, hãy đổi link_mode: passive thành link_mode: active trong block totem. Gói tin quorum sẽ đi trên cả hai dây. Một switch cháy nguồn thì switch còn lại giữ kết nối ngay lập tức mà không cần đợi thời gian phát hiện lỗi.
  • Cứu hộ khẩn cấp khi mất Quorum: Lỡ tay chỉnh sai file khiến cụm cluster bị khóa cứng (phân vùng /etc/pve/ chuyển sang chế độ read-only)? Gõ ngay: pvecm expected 1. Lệnh này hạ số vote yêu cầu xuống 1, giúp node hiện tại lấy lại quyền ghi để bạn sửa lại file cấu hình.

Thêm một chiếc switch gigabit phụ cùng vài mét cáp mạng là khoản đầu tư nhỏ. Đổi lại, cụm Proxmox của bạn sẽ đứng vững trước nguy cơ split-brain, chấm dứt những cuộc gọi khẩn cấp giữa đêm vì rớt mạng.

Share: