vCenter ‘đứng hình’ vì đầy /storage/db? Cách xử lý triệt để cho Sysadmin

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Khi vCenter bỗng nhiên “đình công” vì đầy ổ đĩa

Sáng thứ Hai, vừa nhấp ngụm cafe thì group chat công ty đã nổ tin nhắn: “Ông ơi, vCenter sập rồi, báo lỗi 503!”. Với một cụm 8 host ESXi đang gánh hơn 200 máy ảo, đây là tín hiệu cho một ngày vất vả. Sau khi SSH vào kiểm tra, mình thấy phân vùng /storage/db đã chạm mức 100%. Đây là lỗi kinh điển trên vCenter Server Appliance (VCSA) khi cơ sở dữ liệu PostgreSQL phình to quá nhanh.

Khi ổ đĩa đầy, service vpxd sẽ tự động dừng vì không thể ghi thêm dữ liệu. Mọi hoạt động từ quản lý máy ảo đến backup đều bị tê liệt hoàn toàn.

Tại sao phân vùng /storage/db lại nhanh đầy?

Dựa trên kinh nghiệm vận hành thực tế, mình đúc kết được 3 nguyên nhân chính:

  • Dữ liệu Tasks và Events khổng lồ: Mọi hành động như vMotion hay login đều được lưu lại. Với các hệ thống dùng script tự động hóa, bảng log này có thể tăng thêm 2-5GB mỗi tuần.
  • Thống kê hiệu năng (Performance Metrics): vCenter thu thập dữ liệu CPU, RAM mỗi 5 phút. Nếu bạn đặt chính sách lưu trữ (Retention Policy) quá dài, DB sẽ cạn dung lượng rất nhanh.
  • Cơ chế dọn dẹp tự động bị lỗi: Đôi khi tiến trình VACUUM của PostgreSQL hoạt động không hiệu quả. Điều này khiến các file cũ không được giải phóng dù dữ liệu đã xóa.

Nên dọn dẹp ngay hay mở rộng ổ đĩa trước?

Đứng trước sự cố này, bạn thường có hai lựa chọn. Hãy cân nhắc kỹ ưu và nhược điểm của từng phương án.

Cách 1: Dọn dẹp dữ liệu (Clean up)

Phương án này giúp giải quyết tận gốc rác dữ liệu và tối ưu tốc độ DB. Tuy nhiên, nó khá tốn thời gian và rủi ro nếu bạn không rành về câu lệnh SQL.

Cách 2: Mở rộng ổ đĩa (Expand Disk)

Đây là cách “cứu hỏa” nhanh nhất. vCenter sẽ hoạt động lại ngay mà không cần can thiệp sâu vào cấu hình bên trong. Nhược điểm duy nhất là nó chỉ giải quyết phần ngọn; nếu không tìm ra nguyên nhân, ổ đĩa sẽ lại đầy trong tương lai.

Lời khuyên của mình: Hãy mở rộng ổ đĩa trước để khôi phục dịch vụ, sau đó mới thong thả dọn dẹp dữ liệu để tối ưu hệ thống lâu dài.

Các bước kiểm tra và xác định nguyên nhân

Truy cập vào VCSA qua SSH hoặc Console. Bạn chuyển sang quyền root và gõ lệnh sau:

shell
df -h

Nếu thấy /storage/db báo 98% hoặc 100%, chúng ta đã tìm đúng bệnh. Để biết thư mục nào đang chiếm dụng nhiều nhất, hãy dùng lệnh:

cd /storage/db/vpostgres
du -sh * | sort -h

Thông thường, thư mục data sẽ chiếm tỷ trọng lớn nhất vì chứa các file database thực tế.

Hướng dẫn mở rộng phân vùng /storage/db an toàn

Từ phiên bản 6.7 trở đi, VCSA có khả năng tự nhận diện ổ đĩa mới mà không cần khởi động lại. Đây là một điểm cộng rất lớn của VMware.

  1. Đăng nhập trực tiếp vào host ESXi đang chạy vCenter.
  2. Chuột phải vào VM vCenter, chọn Edit Settings.
  3. Tìm ổ đĩa tương ứng với /storage/db (thường là Hard Disk 8). Hãy đối chiếu dung lượng hiện tại để tránh nhầm lẫn.
  4. Tăng dung lượng thêm (ví dụ từ 50GB lên 100GB) rồi nhấn OK.
  5. Quay lại cửa sổ SSH, chạy lệnh để hệ thống tự động mở rộng phân vùng LVM:
vpxd-servicecfg disk-expand

Hệ thống sẽ quét cấu hình phần cứng và tự động nới lỏng dung lượng cho bạn. Kiểm tra lại bằng df -h để xác nhận kết quả.

Cách dọn dẹp dữ liệu cũ trong PostgreSQL

Khi vCenter đã “thở” được, hãy tiến hành dọn dẹp các bảng Tasks và Events. Lưu ý: Luôn Snapshot vCenter trước khi đụng vào SQL!

Mở trình quản lý PostgreSQL:

/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres

Kiểm tra top 10 bảng chiếm dung lượng lớn nhất bằng câu lệnh sau:

SELECT nspname || '.' || relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
  ORDER BY pg_total_relation_size(C.oid) DESC
  LIMIT 10;

Nếu vpx_event hoặc vpx_task vượt quá 10GB, bạn có thể xóa sạch log cũ bằng lệnh TRUNCATE:

truncate table vpx_event cascade;
truncate table vpx_task cascade;

Cuối cùng, chạy VACUUM FULL; để giải phóng không gian đĩa vật lý. Lưu ý lệnh này sẽ khóa bảng, vì vậy chỉ thực hiện khi dịch vụ chưa cần hoạt động ngay.

Kinh nghiệm vận hành để hệ thống luôn ổn định

Để tránh phải thức đêm xử lý sự cố, mình áp dụng 3 quy tắc sau:

  1. Siết chặt Retention Policy: Bạn vào vCenter Settings -> Database Retention Policy. Mình thường chỉ giữ log trong 30 ngày thay vì để mặc định.
  2. Thiết lập cảnh báo sớm: Hãy tạo một Alarm trong vCenter để thông báo khi dung lượng đĩa vượt ngưỡng 80%.
  3. Backup Native định kỳ: Sử dụng tính năng backup qua FTP/SMB tích hợp sẵn. Nếu DB hỏng nặng do đầy đĩa, restore là phương án an toàn nhất.

Quản trị vCenter đòi hỏi sự tỉ mỉ, đặc biệt là với các phân vùng dữ liệu. Hy vọng những chia sẻ này giúp bạn tự tin hơn khi xử lý lỗi đầy ổ đĩa trên VCSA. Nếu gặp khó khăn ở bước nào, đừng ngần ngại để lại bình luận bên dưới nhé.

Share: