Quay lại danh sách
Tin tức công nghệ

Giải Pháp Dự Phòng Thảm Họa Cross-Cloud: Cấu Hình Failover IP Thủ Công Giữa Hetzner Và Vultr Bằng Keepalived

30 tháng 5, 2026

1. Đặt vấn đề: Tại sao cần Failover IP giữa hai nhà cung cấp khác nhau?

Trong kỷ nguyên số, tính sẵn sàng cao (High Availability - HA) là yếu tố sống còn đối với mọi hệ thống công nghệ thông tin của doanh nghiệp. Thông thường, các kỹ sư hệ thống chọn giải pháp Failover IP (IP dự phòng) được cung cấp sẵn bởi một nhà cung cấp đám mây (Cloud Provider). Tuy nhiên, cơ chế này chỉ bảo vệ hệ thống khi một máy chủ (Instance) đơn lẻ bị lỗi. Nếu toàn bộ hạ tầng của nhà cung cấp đó gặp sự cố (Data Center outage), hệ thống của bạn vẫn sẽ bị tê liệt hoàn toàn.

Để đạt được cấp độ dự phòng thảm họa (Disaster Recovery) cao nhất, xu hướng Multi-Cloud Architecture ra đời. Trong bài viết này, chúng ta sẽ tối ưu hóa chi phí và hiệu năng bằng cách kết hợp hai nhà cung cấp VPS phổ biến: Hetzner (mạnh mẽ tại Châu Âu) và Vultr (linh hoạt toàn cầu). Chúng ta sẽ tự động hóa việc chuyển dịch IP kết nối (ở đây sử dụng cơ chế DNS Dynamic cập nhật thay cho Failover IP vật lý) thông qua công cụ điều phối Keepalived.

Lưu ý kỹ thuật: Do Hetzner và Vultr là hai mạng lưới hoàn toàn độc lập, chúng ta không thể định tuyến một IP tĩnh lớp mạng của nhà cung cấp này sang nhà cung cấp kia bằng giao thức ARP thông thường. Thay vào đó, chúng ta sẽ dùng Keepalived để phát hiện sự cố và kích hoạt Script gọi API cập nhật DNS (Cloudflare/Route53) nhằm chuyển hướng lưu lượng truy cập (Traffic) ngay lập tức.

2. Kiến trúc hệ thống và chuẩn bị tiền đề

Mô hình triển khai của chúng ta bao gồm các thành phần sau:

  • Node Chính (Master): VPS tại Hetzner (Ubuntu 24.04, IP: 192.0.2.10).
  • Node Dự phòng (Backup): VPS tại Vultr (Ubuntu 24.04, IP: 198.51.100.20).
  • Virtual IP Đóng vai trò Failover: Tên miền định danh (Ví dụ: app.domain.com) quản lý qua API Cloudflare.
  • Giao thức kiểm tra: VRRP (Virtual Router Redundancy Protocol) chạy qua đường hầm mã hóa mã nguồn mở hoặc kết nối trực tiếp qua Internet công cộng được bảo mật.

Các bước chuẩn bị bắt buộc:

  1. Cài đặt hệ điều hành Ubuntu Server (phiên bản mới nhất) trên cả 2 VPS.
  2. Mở Port 112 (giao thức VRRP) trên tường lửa (UFW) của cả hai bên để Keepalived có thể "giao tiếp" gửi gói tin multicast/unicast kiểm tra trạng thái của nhau.
  3. Đăng ký tài khoản Cloudflare và lấy API Token có quyền sửa đổi bản ghi DNS (Zone.DNS).

3. Hướng dẫn cấu hình chi tiết Keepalived trên Hetzner (Master Node)

Trước tiên, chúng ta cần cài đặt Keepalived trên máy chủ Hetzner. Đăng nhập qua SSH và thực hiện lệnh:

sudo apt update && sudo apt install keepalived jq curl -y

Sau khi cài đặt thành công, tạo tệp cấu hình chính tại đường dẫn /etc/keepalived/keepalived.conf. Nội dung cấu hình được tối ưu hóa như sau:vrrp_script check_app { script "/usr/local/bin/check_services.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 unicast_src_ip 192.0.2.10 unicast_peer { 198.51.100.20 } authentication { auth_type PASS auth_pass Secr3tPa55w0rd } track_script { check_app } notify_master "/usr/local/bin/failover_dns.sh MASTER" notify_backup "/usr/local/bin/failover_dns.sh BACKUP" notify_fault "/usr/local/bin/failover_dns.sh FAULT" }

Trong cấu hình trên, chúng ta sử dụng cơ chế Unicast thay vì Multicast mặc định, bởi vì các nhà cung cấp VPS công cộng thường chặn gói tin Multicast để tránh xung đột mạng nội bộ. Thuộc tính priority 101 đảm bảo Hetzner luôn được ưu tiên làm Master khi hoạt động bình thường.

4. Hướng dẫn cấu hình chi tiết Keepalived trên Vultr (Backup Node)

Tương tự, tiến hành cài đặt các gói bổ trợ trên VPS Vultr. Tạo tệp cấu hình /etc/keepalived/keepalived.conf với thiết lập dành cho Node dự phòng:

vrrp_script check_app {
    script "/usr/local/bin/check_services.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp1s0
    virtual_router_id 51
    priority 100
    advert_int 1

    unicast_src_ip 198.51.100.20
    unicast_peer {
        192.0.2.10
    }

    authentication {
        auth_type PASS
        auth_pass Secr3tPa55w0rd
    }

    track_script {
        check_app
    }

    notify_master "/usr/local/bin/failover_dns.sh MASTER"
    notify_backup "/usr/local/bin/failover_dns.sh BACKUP"
    notify_fault "/usr/local/bin/failover_dns.sh FAULT"
}

Lưu ý: Tên interface mạng trên Vultr có thể khác biệt (ví dụ: enp1s0, eth0), hãy kiểm tra kỹ bằng lệnh ip a trước khi điền vào file cấu hình. Độ ưu tiên (priority) ở đây được đặt là 100, thấp hơn Hetzner.

5. Xây dựng Script tự động cập nhật API khi xảy ra sự cố (Failover Script)

Đây là trái tim của giải pháp xử lý thủ công liên đám mây này. Khi Keepalived phát hiện Node Master chết, Node Backup sẽ tự động kích hoạt Script chuyển trạng thái của nó thành MASTER và gọi tới API Cloudflare để trỏ DNS về IP của chính nó.

Tạo file script tại cả hai server: /usr/local/bin/failover_dns.sh

#!/bin/bash

TYPE=$1
ZONE_ID="your_cloudflare_zone_id"
RECORD_ID="your_dns_record_id"
RECORD_NAME="app.domain.com"
AUTH_TOKEN="your_cloudflare_api_token"

case $TYPE in
    "MASTER")
        # Lấy IP hiện tại của chính nó
        CURRENT_IP=$(curl -s [https://api.ipify.org](https://api.ipify.org))
        # Gọi API Cloudflare để cập nhật bản ghi A
        curl -X PUT "[https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID](https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID)" \
             -H "Authorization: Bearer $AUTH_TOKEN" \
             -H "Content-Type: application/json" \
             --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":60,\"proxied\":false}"
        ;;
    "BACKUP"|"FAULT")
        # Có thể thêm log hoặc gửi thông báo Telegram/Slack ở đây
        ;;
esac

Đừng quên phân quyền thực thi cho file script vừa tạo bằng lệnh:

sudo chmod +x /usr/local/bin/failover_dns.sh

6. Kiểm thử và đánh giá hiệu năng hệ thống

Sau khi hoàn tất cấu hình, khởi động dịch vụ Keepalived trên cả 2 VPS:

sudo systemctl enable keepalived && sudo systemctl start keepalived

Để kiểm tra tính năng failover, bạn có thể mô phỏng một sự cố thảm họa bằng cách tắt card mạng hoặc dừng dịch vụ Keepalived trên Hetzner:

sudo systemctl stop keepalived

Kiểm tra log hệ thống trên Vultr thông qua lệnh tail -f /var/log/syslog (hoặc journalctl -u keepalived -f). Bạn sẽ thấy Vultr lập tức chuyển trạng thái sang Entering MASTER STATE và thực thi Script cập nhật DNS thành công. Nhờ cấu hình TTL thấp (60 giây), người dùng cuối sẽ nhanh chóng được chuyển hướng sang cụm máy chủ dự phòng tại Vultr mà không gặp tình trạng gián đoạn kéo dài.

7. Kết luận và những khuyến nghị bảo mật nâng cao

Giải pháp cấu hình Failover IP thủ công thông qua Keepalived giữa Hetzner và Vultr là một phương án xuất sắc, giúp doanh nghiệp tối ưu chi phí hạ tầng nhưng vẫn đạt được kiến trúc Cloud-Agnostic vững chắc. Tuy nhiên, để đưa vào vận hành thực tế (Production), bạn cần lưu ý thêm các điểm sau:

  • Đồng bộ dữ liệu: Đảm bảo cơ sở dữ liệu (Database) và tệp tin mã nguồn giữa Hetzner và Vultr được đồng bộ hóa liên tục thời gian thực (Real-time replication) bằng các công cụ như Galera Cluster, GlusterFS hoặc Syncthing.
  • Bảo mật đường truyền VRRP: Nên mã hóa kênh truyền Unicast giữa 2 VPS bằng giải pháp VPN WireGuard để tránh tình trạng tấn công giả mạo gói tin VRRP (Split-brain).
  • Giám sát (Monitoring): Tích hợp hệ thống cảnh báo (Prometheus/Grafana) để nhận thông báo tức thời ngay khi hệ thống kích hoạt cơ chế chuyển vùng dự phòng.
Giải Pháp Dự Phòng Thảm Họa Cross-Cloud: Cấu Hình Failover IP Thủ Công Giữa Hetzner Và Vultr Bằng Keepalived | DPTCloud