Thứ Hai, 1 tháng 6, 2015

Giải pháp Load Balancing và Fail Over toàn diện dành cho Web Server


Xây dựng một hệ thống High Available (HA) là một nhiệm vụ sống còn dành cho doanh nghiệp hiện nay. Đã có những trường hợp đáng tiếc khiến cho doanh nghiệp phải chịu những thiệt hại lớn không đáng có, thậm chí là mất đi các khách hàng quan trọng – nguồn sống trong kinh doanh. 




 Trong bài “Để website luôn online với cluster Apache High Availability Linux” đăng trên một số trang web hiện nay tuy thuận tiện nhưng vẫn còn những nhược điểm đáng kể. Một trong những nhược điểm đó là hệ thống chỉ có tác dụng chịu lỗi (Fail Over) mà không thể cân bằng tải (Load Balancing). Do đó, hệ thống chỉ có thể thích hợp với những doanh nghiệp nhỏ lẻ, nhu cầu truy cập web của khách hàng không cao. Nếu sử dụng phương thức trên cho doanh nghiệp lớn thì sẽ gây hiện tượng thắt cổ chai (bottle neck) làm nghẽn lưu lượng truy cập. Mặt khác, doanh nghiệp muốn triển khai thêm nhiều dịch vụ khác thì đây không phải là một lựa chọn thật sự hiệu quả. 

Một giải pháp được Kênh Giải Pháp VN đưa ra là xây dựng một hệ thống có tính sẵn sàng cao vừa có khả năng chịu lỗi vừa có khả năng cân bằng tải. Giải pháp này dựa trên nền tảng Linux Virtual Server (LVS). LVS ẩn server thật sau một IP ảo và thực hiện quá trình cân bằng tải các gói tin gửi đến sang tất cả các node dựa trên thuật toán Scheduling. Do tất cả các quá trình được thực hiện ở lớp transport bên trong nhân Linux nên phương thức này còn được gọi là Layer-4 Switching.

Hệ thống này được xây dựng trên 4 Server sử dụng hệ điều hành CentOS. Mỗi Server được lắp đặt 2 card mạng riêng biệt. Thông số về các card mạng trên mỗi server được thể hiện trên hình sau:

Client truy cập vào Web Server thông qua IP ảo (192.168.2.200).  

Trong mô hình này LVS1 và LVS2 đóng vai trò là các Load Balancer (LB). Hai LVS này hoặc động theo phương thức Active/Passive. Có nghĩa là, khi LVS1 chạy thì LVS2 sẽ ở trạng thái Stand-by, cho đến khi LVS1 gặp sự cố thì LVS2 sẽ tự động kích hoạt và thay thế LVS1 cho đến khi khắc phục được sự cố. LB có nhiệm vụ dẫn đường cho các truy cập đến Web Server. 

Trên LVS sẽ được cài đặt các gói chương trình heartbeat, ldirectord và ipvsadm. Trong đó chương trình heartbeat sẽ có nhiệm vụ kiểm tra tình trạng “sống còn” của hai LVS. Do đó, đảm bảo được khả năng chịu lỗi của hệ thống. Còn ldirectord (Linux Director Daemon) có nhiệm vụ giám sát và kiểm tra tín hiệu của các Web Server thông qua một URL request. Trong trường hợp dịch vụ web trên một server bị lỗi thì server đó sẽ bị loại ra khỏi danh sách real server và truy cập sẽ được dồn về Web Server còn lại đảm bảo được tính cân bằng tải lẫn khả năng chịu lỗi.

Cấu hình cụ thể

Đầu tiên, chúng ta tắt Firewall trên tất cả các Server.
/etc/init.d/iptables stop
+ LVS1/LVS2
Cài đặt các dịch vụ cần thiết (heartbeat, ldirectord, ipvsadm)
yum install heartbeat ipvsadm heartbeat-ldirectord –y
Để LB có thể dẫn đường được cho các yêu cầu đến server thì cần active kernel IPV4 packet forwarding.
#/etc/sysctl.conf
net.ipv4.ip_forward = 1
Lưu lại cấu hình cho sysctl.conf
sysctl -p
Tạo file /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth1
ucast eth1 10.0.0.1         # Trên LVS2 là 10.0.0.2
udpport 694
auto_failback on
node lb1.kenhgiaiphap.vn
node lb2.kenhgiaiphap.vn
Tạo file /etc/ha.d/haresoures
lb1.kenhgiaiphap.vn \
    ldirectord::ldirectord.cf \
    LVSSyncDaemonSwap::master \
    Ipaddr2::192.168.2.200
Tạo file /etc/ha.d/authkeys
auth 1
1 crc
File authkeys chỉ có thể thay đổi thông qua tài khoản root 
chmod 600 /etc/ha.d/authkeys
Tạo file /etc/ha.d/ldirectord.cf
checktimeout=30
checkinterval=2
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=192.168.2.200:80
        real=10.0.0.3:80 gate
        real=10.0.0.4:80 gate
        service=http
        request="kenhgiaiphap.html"
        httpmethod=GET
        receive="maychumang"
        persistent=100
        scheduler=lblc
        protocol=tcp
        checktype=negotiate

Khởi động các dịch vụ cần thiết
/etc/init.d/ldirectord stop
/ect/init.d/heartbeat start
+ WebServer1/WebServer2
Sau khi cài đặt Apache Server ta tạo file kiểm tra
echo “maychumang” > /var/www/html/kenhgiaiphap.html
Echo ‘This site is 192.168.2.122’ > /var/www/html/index.html (Webserver1)
Echo ‘This site is 192.168.2.123’ > /var/www/html/index.html (Webserver2)
service httpd start
Tắt chức năng ARP reply cho IP ảo trên Web Server
# /etc/sysctl.conf

net.ipv4.conf.all.ARP_ignore = 1
net.ipv4.conf.eth0.ARP_ignore = 1
net.ipv4.conf.all.ARP_announce = 2
net.ipv4.conf.eth0.ARP_announce = 2

+ Kiểm tra kết quả
Web Server (Load Balancing và Fail Over)
Mở web browser trên máy khác cùng mạng và nhập vào địa chỉ 192.168.2.200. Refresh lại nhiều lần thấy nội dung web thay đổi là cấu hình cân bằng tải thành công.

Muốn kiểm tra khả năng chịu lỗi thì tắt dịch vụ web trên 1 server sau đó thử lại. Nếu trang web hiển thị chuyển sang server còn lại là thành công.

Load Balancer (Fail Over)
Sau khi cài đặt xong kiểm tra trên cả hai LVS. Nếu kết quả giống như trong hình là cài đặt thành công. Trong đó máy 192.168.2.125 là máy Active, chịu trách nhiệm dẫn đường đến Web Server. Máy 192.168.2.130 đang ở chế độ backup.
  
Kiểm tra Fail Over bằng cách tắt dịch vụ heartbeat trên LVS1 (192.168.2.125) nếu bạn vẫn còn có thể duyệt web là thành công.

0 nhận xét:

Đăng nhận xét