Cấu hình Keepalived trên CentOS Stream 9: Giải pháp High Availability thực chiến

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

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.

Share: