Nỗi ám ảnh khi Web Server “đột tử” lúc nửa đêm
Kịch bản quen thuộc: 2 giờ sáng, điện thoại rung liên hồi vì hệ thống báo sập. Server lăn đùng ra chết do lỗi RAM hoặc dịch vụ Nginx bị crash bất ngờ. Với một server duy nhất (Single Point of Failure), toàn bộ traffic bị ngắt quãng, khách hàng rời bỏ và bạn phải cuống cuồng xử lý thủ công trong tình trạng ngái ngủ.
Theo thống kê, mỗi phút downtime có thể tiêu tốn của doanh nghiệp từ vài trăm đến hàng nghìn USD. Khi mình migrate hệ thống lên CentOS Stream 9, yêu cầu tiên quyết là phải có cơ chế tự động chuyển đổi (failover). Nếu một server chết, server kia phải tiếp quản ngay lập tức trong vòng dưới 2 giây mà người dùng không hề hay biết.
Tại sao Web Server của bạn lại dễ tổn thương?
Vấn đề nằm ở việc chúng ta thường trỏ tên miền về một địa chỉ IP tĩnh duy nhất. Khi IP này không phản hồi, mọi thứ dừng lại:
- Gói tin bị drop: OS không phản hồi, trình duyệt người dùng báo lỗi timeout.
- Dịch vụ treo: Server vẫn sống (ping được) nhưng Nginx/Apache đã chết, khiến yêu cầu bị từ chối.
- Độ trễ DNS: Việc đổi IP thủ công trên DNS có thể mất từ 5 phút đến vài giờ để cập nhật (TTL). Con số này là quá chậm cho các hệ thống hiện đại.
Keepalived: Giải pháp cứu cánh cho System Admin
Để xử lý bài toán này, Keepalived nổi lên như một lựa chọn hàng đầu nhờ sự gọn nhẹ và ổn định. Nó hoạt động dựa trên giao thức VRRP (Virtual Router Redundancy Protocol). Thay vì dùng IP vật lý, bạn sẽ cấp một Virtual IP (VIP) cho cụm server. VIP này sẽ tự động “nhảy” sang node còn sống nếu node chính gặp sự cố.
Trên CentOS Stream 9, Keepalived tích hợp cực tốt với kernel Linux. Nó không chỉ quản lý IP mà còn thực hiện health check liên tục. Nếu dịch vụ Web bị lỗi, Keepalived tự hiểu và nhường quyền điều khiển cho server dự phòng.
Triển khai thực tế trên CentOS Stream 9
Chúng ta sẽ thiết lập mô hình với 2 node và 1 IP ảo dùng chung:
- Node Master: 192.168.1.10
- Node Backup: 192.168.1.11
- Virtual IP (VIP): 192.168.1.100
Bước 1: Cài đặt gói tin
Thực hiện cài đặt trên cả hai máy bằng lệnh sau:
sudo dnf install -y keepalived
Bước 2: Cấu hình Node Master
Mở file /etc/keepalived/keepalived.conf. Hãy dọn sạch nội dung cũ và sử dụng cấu hình tối ưu này:
vrrp_script check_web {
script "pidof nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # Kiểm tra tên card mạng bằng lệnh 'ip link'
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass Secr3tPass
}
virtual_ipaddress {
192.168.1.100
}
track_script {
check_web
}
}
Bước 3: Cấu hình Node Backup
Trên máy Backup, bạn giữ nguyên khung cấu hình nhưng sửa state thành BACKUP và giảm priority xuống 90:
vrrp_instance VI_1 {
state BACKUP
priority 90
# Các thông số khác giữ nguyên như Master
...
}
Vượt rào Firewalld và SELinux: Những lỗi hay gặp
Nhiều bạn cấu hình xong nhưng VIP không hoạt động do bị chặn bởi tường lửa. Hiện tượng phổ biến nhất là “Split-brain” – cả hai máy đều tự nhận mình là Master.
Mở cổng cho giao thức VRRP
CentOS Stream 9 chặn VRRP theo mặc định. Hãy chạy lệnh này để cho phép hai server giao tiếp:
sudo firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="vrrp" accept' --permanent
sudo firewall-cmd --reload
Xử lý SELinux chuẩn xác
Đừng vội tắt SELinux. Để Keepalived có quyền thực thi script kiểm tra dịch vụ, bạn chỉ cần bật boolean sau:
sudo setsebool -P keepalived_connect_any 1
Nếu bạn để script check ở thư mục tùy chỉnh, hãy dùng restorecon -Rv /path/to/script để cập nhật context bảo mật.
Kiểm tra khả năng chịu lỗi (Failover)
Kích hoạt dịch vụ trên cả 2 node:
sudo systemctl enable --now keepalived
Kiểm tra máy Master bằng lệnh ip addr show eth0. Bạn sẽ thấy IP 192.168.1.100 đã xuất hiện. Bây giờ, hãy thử stop Nginx trên Master. Chỉ mất khoảng 1 giây, máy Backup sẽ tự động nhận VIP này. Hệ thống vẫn online, người dùng hoàn toàn không nhận thấy sự gián đoạn nào.
Triển khai Keepalived là bước đi quan trọng để chuyên nghiệp hóa hạ tầng. Nó giúp bạn kê cao gối ngủ ngon hơn vì biết rằng hệ thống luôn có phương án dự phòng tự động. Kết hợp thêm một cụm Database đồng bộ, bạn sẽ có một hệ thống High Availability thực thụ trên CentOS Stream 9.

