Giới thiệu kiến trúc
Để xây dựng một hệ thống web có độ tin cậy cao (High Availability) và khả năng mở rộng, việc kết hợp LVS (Linux Virtual Server) cùng Keepalived là giải pháp phổ biến. Trong mô hình này, Keepalived đảm nhận vai trò giám sát trạng thái thực thể (Health Check) và xử lý cơ chế chuyển đổi dự phòng (Failover), trong khi LVS phân phối lưu lượng truy cập đến các máy chủ nền tảng.
Phân tích yêu cầu môi trường
Hệ thống bao gồm hai nhóm máy chủ chính:
- LVS Master: Đảm nhiệm xử lý định tuyến và gửi gói tin. Địa chỉ IP:
192.168.10.100. - LVS Backup: Dự phòng cho Master. Khi Master gặp sự cố, Backup sẽ tiếp quản địa chỉ ảo (VIP). Địa chỉ IP:
192.168.10.101. - Real Server Pool: Các máy chủ Web chạy dịch vụ ứng dụng thực tế. Ví dụ:
192.168.10.102và192.168.10.103.
Giao thức sử dụng tại đây là DR (Direct Routing). Yêu cầu cốt lõi là tất cả máy chủ phải nằm trong cùng mạng LAN để chia sẻ MAC address thông qua ARP broadcast.
Chuẩn bị môi trường làm việc
Trước tiên, tiến hành cài đặt các công cụ cần thiết và tắt tường lửa để tránh nhiễu quá trình truyền tin.
# Tắt iptables tạm thời
service iptables stop
# Cài đặt bộ tiện ích biên dịch
yum install -y gcc gcc-c++ kernel-devel make openssl-devel libnl-devel popt
Cài đặt và biên tập Keepalived
Tải phiên bản mới nhất từ nguồn chính chủ hoặc mirror. Tại đây chúng ta sử dụng phiên bản ổn định.
# Tải gói phần mềm
cd /usr/local/src
wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
# Giải nén
tar -zxvf keepalived-2.2.7.tar.gz
cd keepalived-2.2.7
# Cấu hình thư mục nhân (kernel header)
ln -sfn /usr/src/kernels/\$(uname -r)/ /usr/src/linux
./configure --with-kernel-dir=/usr/src/kernels/\$(uname -r)/
Sau khi cấu hình thành công, thực hiện biên dịch và cài đặt:
make && make install
# Sao chép script khởi động vào vị trí hệ thống
cp /usr/local/etc/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
# Tạo thư mục chứa file config nếu chưa tồn tại
mkdir -p /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
Bật tính năng chuyển tiếp gói tin IP
Đây là bước bắt buộc để LVS hoạt động đúng chức năng của nó (Forwarding).
# Chỉnh sửa tham số hệ thống
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# Áp dụng ngay lập tức
sysctl -p
Cần thực thi lệnh trên trên tất cả các máy chủ trong cụm LVS và Keepalived.
Thiết lập Master Server
File cấu hình chính nằm tại /etc/keepalived/keepalived.conf. Chúng ta sẽ định nghĩa vai trò MASTER, ưu tiên cao hơn backup và danh sách các Real Server.
global_defs {
router_id LVS_VIP_MASTER
}
vrrp_instance VI_LVS_01 {
state MASTER
interface eth0 # Thẻ mạng sử dụng
virtual_router_id 51 # ID vrrp duy nhất cho cluster
priority 200 # Ưu tiên cao hơn backup (ví dụ backup dùng 100)
advert_int 1 # Tần suất gửi hello packet (giây)
authentication {
auth_type PASS
auth_pass SecurePass123 # Mật khẩu xác thực giữa master và backup
}
virtual_ipaddress {
192.168.10.10 # Địa chỉ IP ảo mà khách hàng truy cập
}
}
virtual_server 192.168.10.10 80 {
delay_loop 6 # Chu kỳ kiểm tra trạng thái thực (giây)
lb_algo rr # Thuật toán Round Robin
lb_kind DR # Chế độ DR
protocol TCP
real_server 192.168.10.102 80 {
weight 1 # Trọng số máy chủ
notify_down /scripts/check_service.sh
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.103 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
Thiết lập Backup Server
File cấu hình về cơ bản giống Master nhưng cần thay đổi trạng thái và độ ưu tiên xuống mức thấp để đảm bảo vai trò dự phòng.
global_defs {
router_id LVS_VIP_BACKUP
}
vrrp_instance VI_LVS_01 {
state BACKUP
interface eth0 # Cần khớp với tên card mạng thực tế
virtual_router_id 51 # Phải giống hệt Master
priority 100 # Ưu tiên thấp hơn MASTER
authentication {
auth_type PASS
auth_pass SecurePass123 # Phải trùng với Master
}
virtual_ipaddress {
192.168.10.10
}
}
# Phần cấu hình Real Server giữ nguyên giống Master để đảm bảo đồng bộ luồng traffic
Kích hoạt và xác minh dịch vụ
Sau khi chỉnh sửa xong trên cả hai node, kích hoạt dịch vụ và kiểm tra xem các tiến trình đã chạy chưa.
# Bật tự động khởi động khi reboot
chkconfig keepalived on
# Khởi động dịch vụ
service keepalived start
# Kiểm tra tiến trình
ps aux | grep keepalived
Khi chạy thành công, bạn sẽ thấy ba tiến trình con liên quan đến keepalived. Nếu chỉ thấy một hoặc không có, hãy kiểm tra lại log tại /var/log/messages.
Kiểm tra hoạt động
Xác minh địa chỉ IP ảo (VIP) đã được gán vào thẻ mạng hay chưa bằng lệnh ip addr. Trên Server đang ở vai trò Master, địa chỉ 192.168.10.10 sẽ xuất hiện dưới dạng địa chỉ phụ của thẻ mạng (eth0).
ip addr show
Để kiểm tra bảng luật của IPVS:
ipvsadm -ln
Cuối cùng, thử nghiệm khả năng chuyển đổi bằng cách dừng dịch vụ Keepalived trên Server Master. Server Backup sẽ tự động nắm lấy địa chỉ VIP sau khoảng vài giây dựa trên giá trị advert_int đã thiết lập. Sau đó, thử truy cập dịch vụ thông qua URL của VIP để đảm bảo lưu lượng vẫn được phân phối đến Real Server bất kể Node nào đang active.