Hướng dẫn Cấu hình Keepalived và HAProxy tạo IP VIP ảo (Floating IP) cho cụm 2 VPS Hetzner mang lại Tính Sẵn Sàng Cao (High Availability)
Đặt vấn đề: Thách thức về tính sẵn sàng cao trong hạ tầng Cloud doanh nghiệp
Trong kỷ nguyên số, tính liên tục của dịch vụ (Business Continuity) là yếu tố sống còn đối với mọi doanh nghiệp. Khi triển khai ứng dụng trên các nền tảng điện toán đám mây như Hetzner Cloud, việc chỉ phụ thuộc vào một máy chủ VPS duy nhất luôn tiềm ẩn rủi ro lớn. Hệ thống có thể bị gián đoạn do lỗi phần cứng, bảo trì hạ tầng, hoặc quá tải cục bộ. Để giải quyết bài toán này, xây dựng một cụm máy chủ có Tính sẵn sàng cao (High Availability - HA) là giải pháp bắt buộc.
Mô hình HA phổ biến và tối ưu chi phí hiện nay là kết hợp giữa HAProxy (Bộ cân bằng tải - Load Balancer) và Keepalived (Trình quản lý IP ảo - Floating IP/VIP) hoạt động theo cơ chế Active-Passive. Bài viết này sẽ hướng dẫn bạn từng bước chi tiết để cấu hình hệ thống này trên cụm 2 VPS Hetzner một cách chuyên nghiệp và chuẩn hóa nhất.
1. Tổng quan kiến trúc giải pháp: Keepalived, HAProxy và Hetzner Floating IP
Trước khi bắt tay vào cấu hình, chúng ta cần hiểu rõ vai trò của từng thành phần trong kiến trúc hạ tầng này:
- HAProxy (High Availability Proxy): Là một phần mềm cân bằng tải và điều phối proxy cực kỳ mạnh mẽ cho các ứng dụng dựa trên TCP và HTTP. HAProxy sẽ nhận các request từ người dùng và phân phối đều đến các máy chủ ứng dụng (Web Server) phía sau.
- Keepalived: Là phần mềm sử dụng giao thức VRRP (Virtual Router Redundancy Protocol) để giám sát trạng thái của các máy chủ. Nhiệm vụ chính của Keepalived là kiểm tra xem node Active có hoạt động ổn định hay không. Nếu node Active gặp sự cố, Keepalived sẽ tự động dịch chuyển địa chỉ IP ảo (VIP) sang node Passive (lúc này sẽ trở thành Active mới) mà không làm gián đoạn kết nối của người dùng.
- Hetzner Floating IP: Khác với môi trường mạng LAN truyền thống nơi VIP có thể tự do quảng bá qua ARP, trong môi trường hạ tầng đám mây được định nghĩa bằng phần mềm (SDN) như Hetzner, việc gán IP VIP yêu cầu phải tương tác trực tiếp với API của Hetzner hoặc cấu hình định tuyến thông qua mạng nội bộ (vSwitch/Private Network).
Mô hình hoạt động: Người dùng truy cập thông qua một IP duy nhất (Floating IP). Tại một thời điểm, IP này sẽ chỉ trỏ về một VPS duy nhất (Giả sử là VPS 1 - Master). HAProxy trên VPS 1 tiếp nhận và xử lý traffic. Nếu VPS 1 chết, Keepalived trên VPS 2 (Backup) sẽ phát hiện và chiếm quyền kiểm soát Floating IP, tiếp quản toàn bộ lượng truy cập mà không cần thay đổi cấu hình DNS.
2. Chuẩn bị tài nguyên trên Hetzner Cloud
Để thực hiện bài hướng dẫn này, doanh nghiệp cần chuẩn bị các tài nguyên sau trên bảng điều khiển Hetzner Cloud Console:
- 02 VPS Hetzner (Ubuntu 22.04 LTS hoặc 24.04 LTS):
- VPS 1 (Master): IP công cộng:
195.201.x.1| IP nội bộ:10.0.0.2 - VPS 2 (Backup): IP công cộng:
195.201.x.2| IP nội bộ:10.0.0.3
- VPS 1 (Master): IP công cộng:
- 01 Mạng nội bộ (Hetzner Private Network): Dải IP
10.0.0.0/16được gán vào cả 2 VPS để phục vụ giao tiếp VRRP an toàn giữa Keepalived. - 01 Hetzner Floating IP: Đã được khởi tạo trên cùng một Location/Project và gán mặc định ban đầu vào VPS 1. Giả sử Floating IP là:
116.203.x.x.
3. Cài đặt và Cấu hình HAProxy trên cả 2 VPS
Bước đầu tiên là cài đặt HAProxy để đảm bảo dịch vụ cân bằng tải sẵn sàng chạy trên cả hai node. Thực hiện các lệnh sau trên cả hai máy chủ VPS 1 và VPS 2:
sudo apt update
sudo apt install haproxy -y
Sau khi cài đặt xong, chúng ta tiến hành cấu hình file /etc/haproxy/haproxy.cfg. Nhằm mục đích cho phép HAProxy có thể bind (gắn) vào một IP chưa thực sự tồn tại trên giao diện mạng của máy chủ (vì Floating IP chỉ nằm ở một máy chủ tại một thời điểm), chúng ta cần kích hoạt tính năng non-local binding trong nhân Linux bằng lệnh:
echo "net.ipv4.ip_nonlocal_bind=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Tiếp theo, biên tập nội dung file cấu hình HAProxy:
sudo nano /etc/haproxy/haproxy.cfg
Thêm đoạn cấu hình mẫu dưới đây vào cuối file để định tuyến traffic đến các Web Server phía sau (Backend):
frontend http_front
bind 116.203.x.x:80
mode http
default_backend web_servers
backend web_servers
mode http
balance roundrobin
option httpchk GET /health
server web01 10.0.0.10:80 check
server web02 10.0.0.11:80 check
Khởi động lại dịch vụ HAProxy để áp dụng thay đổi:
sudo systemctl restart haproxy
sudo systemctl enable haproxy
4. Cài đặt và Cấu hình Keepalived thiết lập Floating IP
Đây là bước cốt lõi để thiết lập cơ chế chuyển đổi dự phòng tự động (Failover). Cài đặt Keepalived trên cả 2 VPS:
sudo apt install keepalived -y
4.1 Cấu hình Keepalived trên VPS 1 (Master Node)
Tạo hoặc chỉnh sửa file cấu hình /etc/keepalived/keepalived.conf trên VPS 1:
sudo nano /etc/keepalived/keepalived.conf
Nội dung cấu hình chi tiết:
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface enp7s0 # Thay bằng tên giao diện mạng nội bộ Hetzner của bạn
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass KhongTheBeKhoa2026
}
virtual_ipaddress {
116.203.x.x/32
}
track_script {
check_haproxy
}
}
4.2 Cấu hình Keepalived trên VPS 2 (Backup Node)
Tương tự, tạo file cấu hình trên VPS 2 nhưng thay đổi trạng thái và độ ưu tiên (priority):
sudo nano /etc/keepalived/keepalived.conf
Nội dung cấu hình chi tiết cho Backup Node:
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface enp7s0
virtual_router_id 51
priority 100 # Thấp hơn MASTER để tránh tranh chấp
advert_int 1
authentication {
auth_type PASS
auth_pass KhongTheBeKhoa2026
}
virtual_ipaddress {
116.203.x.x/32
}
track_script {
check_haproxy
}
}
Khởi động dịch vụ Keepalived trên cả hai máy chủ:
sudo systemctl start keepalived
sudo systemctl enable keepalived
5. Tích hợp Hetzner Cloud API để tự động gán lại Floating IP trên Cloud Panel
Trong hạ tầng của Hetzner, việc cấu hình IP ảo trong nội bộ hệ điều hành thông qua Keepalived là chưa đủ. Bạn cần thông báo cho hạ tầng mạng của Hetzner biết rằng Floating IP vừa được định tuyến sang VPS nào. Chúng ta thực hiện điều này bằng cách sử dụng một script gọi đến Hetzner Cloud API khi Keepalived thay đổi trạng thái (Notify Script).
Bước 1: Truy cập Hetzner Cloud Console, vào mục Security -> API Tokens và tạo một mã Token có quyền Read & Write.
Bước 2: Tạo script chuyển đổi IP tại đường dẫn /etc/keepalived/hcloud-floating-ip.sh trên cả 2 VPS:
sudo nano /etc/keepalived/hcloud-floating-ip.sh
Nội dung script:
#!/bin/bash
TOKEN="MÃ_TOKEN_HETZNER_CỦA_BẠN"
FLOATING_IP_ID="ID_CỦA_FLOATING_IP" # Lấy từ giao diện hoặc qua lệnh hcloud CLI
SERVER_ID=$(curl -s http://169.254.169.254/hetzner/v1/metadata/instance-id)
TYPE=$1
NAME=$2
STATE=$3
case $STATE in
"MASTER")
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"server\":$SERVER_ID}" \
"https://api.hetzner.cloud/v1/floating_ips/$FLOATING_IP_ID/actions/assign"
;;
*)
exit 0
;;
esac
Phân quyền thực thi cho script:
sudo chmod +x /etc/keepalived/hcloud-floating-ip.sh
Bước 3: Cập nhật file cấu hình Keepalived để gọi script này khi chuyển trạng thái bằng cách thêm dòng sau vào cuối khối lệnh vrrp_instance VI_1 trên cả hai VPS:
notify /etc/keepalived/hcloud-floating-ip.sh
Khởi động lại Keepalived một lần nữa để áp dụng cơ chế tự động hóa.
6. Kiểm tra và Đánh giá tính năng Failover
Để đảm bảo hệ thống vận hành đúng kỳ vọng, doanh nghiệp cần thực hiện kịch bản kiểm thử lỗi nghiêm ngặt:
- Kiểm tra trạng thái ban đầu: Chạy lệnh
ip addr show enp7s0trên VPS 1, bạn sẽ thấy địa chỉ Floating IP xuất hiện. Trên VPS 2, địa chỉ này sẽ không xuất hiện. - Giả lập sự cố: Tắt dịch vụ HAProxy hoặc tắt hẳn nguồn VPS 1 thông qua Hetzner Dashboard.
- Quan sát kết quả: Kiểm tra nhật ký hệ thống trên VPS 2 bằng lệnh
journalctl -u keepalived -n 50 -f. Bạn sẽ thấy VPS 2 phát hiện VPS 1 mất kết nối và tự động chuyển trạng thái từBACKUPsangMASTER. Kiểm tra trên giao diện Hetzner Cloud, Floating IP đã được gán tự động sang VPS 2.
Kết luận
Việc kết hợp giữa Keepalived và HAProxy trên hạ tầng Hetzner Cloud là một giải pháp tối ưu, mạnh mẽ và tiết kiệm chi phí để xây dựng hệ thống có tính sẵn sàng cao đáp ứng nhu cầu doanh nghiệp. Với Floating IP ảo, dịch vụ của bạn được bảo vệ trước các sự cố sập nguồn máy chủ, giúp gia tăng uy tín doanh nghiệp và trải nghiệm người dùng tối đa. Hãy triển khai giải pháp này ngay hôm nay để bảo vệ hệ thống của bạn luôn an toàn trực tuyến.
