Cấu hình Hotplug CPU, RAM và Disk trên Proxmox VE: Scale tài nguyên tức thì, không gián đoạn dịch vụ

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

Chuyện 2 giờ sáng: Khi server chạm trần tài nguyên

Đợt sale 11/11 vừa khai hội, con PostgreSQL bỗng ngốn sạch 100% CPU. Load average vọt từ 3.2 lên 28. Bộ nhớ RAM 16GB cạn kiệt, swap nhảy liên tục.

Thông thường, bạn sẽ làm gì? Gửi email thông báo khẩn, chờ vắng khách lúc nửa đêm, tắt VM rồi vào dashboard bấm tăng cấu hình. Vài phút downtime lúc đó đủ bẻ gãy hàng trăm giao dịch đang thanh toán dở và kéo tụt SLA tháng.

Trên cụm Proxmox VE chạy production của mình, bài toán này đã được giải quyết triệt để bằng Hotplug. Tính năng này cho phép bạn nhồi thêm core CPU, cắm thêm 16GB RAM hoặc nới rộng ổ cứng ngay khi máy ảo đang xử lý 8.000 request/giây. Mọi thứ diễn ra trong tích tắc. Không restart, không rớt phiên kết nối.

Cơ chế vận hành của Hotplug trên KVM/QEMU

KVM và QEMU giả lập bo mạch chủ server có hỗ trợ cắm nóng linh kiện vật lý. Giao tiếp giữa host và guest diễn ra qua tầng ACPI cùng hệ thống driver virtio.

  • CPU Hotplug: Bạn cấp trước trần vCPU tối đa bằng công thức sockets × cores. Khi nhận lệnh tăng tài nguyên, host gửi ngắt ACPI để báo cho Linux kernel trong máy ảo đánh thức các core đang chờ.
  • RAM Hotplug: Hoạt động bằng cách gán thêm các thanh nhớ ảo (virtual DIMM) thông qua kiến trúc NUMA. Hệ điều hành khách nhận diện dải địa chỉ nhớ mới ngay trên thanh ghi mà không cần load lại kernel.
  • Disk Hot-resize: Tận dụng controller virtio-scsi-single. Bạn nới dung lượng đĩa trên host, sau đó bắn tín hiệu rescan vào bus SCSI để kernel guest cập nhật lại block device.

Điều kiện tiên quyết: Máy ảo bắt buộc phải chạy QEMU Guest Agent để đồng bộ trạng thái hai chiều giữa Proxmox và hệ điều hành bên trong.

Các bước triển khai thực tế

Bước 1: Cài đặt QEMU Guest Agent

Cần đảm bảo kênh giao tiếp giữa máy ảo và Proxmox thông suốt trước khi can thiệp phần cứng.

Với máy ảo Ubuntu hoặc Debian:

sudo apt update && sudo apt install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent

Với Rocky Linux, AlmaLinux hoặc RHEL 8/9:

sudo dnf install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent

Bước 2: Bật Hotplug và NUMA trên Proxmox VE

Proxmox mặc định chỉ bật hotplug cho Disk và Network. Bạn cần một lần downtime duy nhất khoảng 30 giây để kích hoạt kiến trúc cắm nóng CPU và RAM.

  1. Truy cập Proxmox Web UI > chọn VM > Options > Hotplug.
  2. Tích chọn đủ 5 mục: Disk, Network, USB, Memory, CPU.
  3. Chuyển sang Hardware > Processors > tích chọn Enable NUMA (bắt buộc để cắm nóng RAM).

Nếu quen dùng terminal trên Proxmox host, bạn chạy lệnh sau (thay 101 bằng VM ID thực tế):

# Bật toàn bộ tính năng hotplug
qm set 101 --hotplug disk,network,usb,memory,cpu

# Kích hoạt NUMA
qm set 101 --numa 1

# Khai báo trần tối đa 8 core, nhưng khởi động thực tế chỉ dùng 2 core
qm set 101 --cores 8 --vcpus 2

Khởi động lại máy ảo. Kể từ giờ phút này, toàn bộ quá trình nâng cấp tài nguyên sẽ thực hiện 100% online.

Bước 3: Nâng CPU và RAM trực tiếp khi máy đang chạy

Hệ thống có dấu hiệu quá tải? Bạn muốn đẩy VM từ 2 vCPU lên 4 vCPU và tăng dung lượng RAM từ 4GB (4096MB) lên 8GB (8192MB).

Thực hiện ngay trên Proxmox Shell trong 2 giây:

# Đẩy số vCPU kích hoạt lên 4
qm set 101 --vcpus 4

# Bơm RAM lên 8GB
qm set 101 --memory 8192

Bước 4: Cấu hình udev rule tự động online phần cứng mới

Nhiều bản kernel Linux nhận diện được vCPU và RAM mới gắn vào nhưng mặc định lại để ở trạng thái offline. Thay vì phải vào bật thủ công từng core trong /sys/devices/system/, hãy để udev tự xử lý.

Tạo file rule bên trong máy ảo guest:

sudo tee /etc/udev/rules.d/80-hotplug-cpu-mem.rules << 'EOF'
# Tự động online CPU khi hotplug
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}="1"

# Tự động online RAM khi hotplug
SUBSYSTEM=="memory", ACTION=="add", TEST=="state", ATTR{state}="online"
EOF

Nạp lại rule ngay lập tức:

sudo udevadm control --reload-rules && sudo udevadm trigger

Mở htop hoặc gõ free -m. Bạn sẽ thấy 2 core mới và 4GB RAM bổ sung hiển thị ngay trên màn hình.

Bước 5: Tăng kích thước ổ cứng (Hot-resize) không unmount

Ổ cứng đầy 100% là nguyên nhân hàng đầu khiến database khóa ghi hoặc crash đột ngột. Nếu VM đang dùng controller VirtIO SCSI, bạn có thể cơi nới dung lượng đĩa trong tích tắc.

Đầu tiên, gán thêm 20GB vào ổ đĩa scsi0 từ Proxmox host:

qm resize 101 scsi0 +20G

Tiếp theo, ssh vào máy ảo Linux và thực hiện 3 lệnh:

# 1. Quét lại bus SCSI để kernel nhận dung lượng vật lý mới của ổ sda
echo 1 | sudo tee /sys/class/block/sda/device/rescan

# 2. Cài tool mở rộng partition (nếu chưa có) và nới partition sda1
sudo apt install -y cloud-guest-utils || sudo dnf install -y cloud-utils-growpart
sudo growpart /dev/sda 1

# 3. Mở rộng filesystem trực tiếp
# Với định dạng EXT4:
sudo resize2fs /dev/sda1

# Với định dạng XFS (Rocky/AlmaLinux/RHEL):
sudo xfs_growfs /

Xong. Phân vùng root tăng thêm 20GB mà các tiến trình Nginx và MySQL vẫn nhận request bình thường.

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

  • Tránh Hot-unplug bừa bãi: Thêm tài nguyên vào thì an toàn tuyệt đối. Tuy nhiên, rút bớt CPU hay giảm RAM khi máy đang tải nặng rất dễ gây kernel panic hoặc văng tiến trình do mất địa chỉ nhớ đột ngột. Hãy giảm cấu hình vào khung giờ bảo trì.
  • Lưu ý với Windows Server: Cài đặt bộ virtio-win-guest-tools.exe mới nhất. Từ Windows Server 2016 trở lên, hệ thống tự nhận diện CPU và RAM cắm nóng. Riêng bản Windows 10/11 Home và Pro chỉ hỗ trợ hot-add RAM, không nhận thêm CPU khi đang chạy.
  • Xung đột giữa Ballooning và Hotplug: Khi bật Memory Ballooning cùng lúc với Hotplug, driver ballooning có thể thu hồi RAM không theo ý muốn. Hãy đặt mức RAM tối thiểu (Minimum RAM) bằng 75-80% mức RAM tối đa để đảm bảo hiệu năng database luôn ổn định.

Lời kết

Chỉ cần 5 phút chuẩn bị template có sẵn Hotplug và NUMA, bạn đã loại bỏ hoàn toàn các ca bảo trì nửa đêm lãng phí thời gian. Khả năng ứng biến hạ tầng linh hoạt chính là ranh giới giữa một hệ thống chập chờn và một dịch vụ đạt chuẩn SLA 99.99%.

Share: