Sau đây NVLV xin trình bày cách cấu hình và chạy thử Haproxy trên nền hệ điều hành CentOS với một bộ cân bằng tải và 3 servers, để đơn giản, tất cả sẽ được triển khai trên cùng một máy, ở các cổng khác nhau:
+ Host IP: 192.168.1.72
+ Haproxy: Triển khai trên Port 80: 192.168.1.72:80
+ Server2: 192.168.1.72:82 + Server3: 192.168.1.72:83
3.1 Cài đặt CentOS và cấu hình một số thuộc tính + Disable firewall
# setup
H 3.3-1 Cấu hình firewall cho CentOS Chọn firewall configuration Run Tool
Disable firewall, disbale SELinux.
H 3.3-2 Cấu hình firewall cho CentOS (tiếp) + Cấu hình httpd
# vi /etc/httpd/conf/httpd.conf
Để HAProxy hoạt động như một transparent proxy, IP của người dùng phải được cho qua tại thuộc tính "X-Forwarded-For"
Tìm kiếm trong file httpd.conf dòng bắt đầu với “LogFormat”
[...]
LogFormat "%h %l %u %t \"%r\" %>s %b \"%
{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent [...]
Chúng ta thay “%h” bằng "%{X-Forwarded-For}i":
[...]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s
%b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s
%b" common
LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
[...]
Tìm kiếm dòng Listen [...]
#Listen 12.34.56:80 [...]
Thêm vào listen ở các cổng 81, 82, 83.
[...]
#Listen 12.34.56:80 Listen 81
Listen 82 Listen 83 [...]
Thêm vào cuối file httpd.conf:
<VirtualHost *:81>
ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/var/www/domain/server1"
ServerName server1
ErrorLog logs/server1.com-error_log
CustomLog logs/server1.com-access_log common
</VirtualHost>
<VirtualHost *:82>
ServerAdmin phovd@gmail.com
DocumentRoot "/var/www/domain/server2"
ServerName server2
ErrorLog logs/server2.com-error_log
CustomLog logs/server2.com-access_log common
</VirtualHost>
<VirtualHost *:83>
ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/var/www/domain/server3"
ServerName server3
ErrorLog logs/server3.com-error_log
CustomLog logs/server3.com-access_log common
</VirtualHost>
+ Tạo thư mục chứa các site để test
# mkdir /var/www/domain
# cd domain
# mkdir server1
# mkdir server2
# mkdir server3
Trong các thư mục này, tạo 1 file index.html đơn giản có chứa dòng text:
“Welcome to server x” với x = 1, 2, 3.
3.2 Cài đặt Haproxy
Đối với những website nhỏ, có thể cài đặt haproxy từ mạng (download và chạy trực tiếp), bản chạy trực tiếp có dung lượng nhỏ, hoạt động ổn định đối với nhiều website và có nhiều options để cho người quản trị website lựa chọn:
# mkdir /usr/local/haproxy “Tạo thư mục chứa Haproxy # cd /usr/local/haproxy
# wget HAProxy download link “Download Haproxy # gunzip downloaded file “Giải nén
# mv unzip file haproxy “Tạo file chạy haproxy # chmod 700 haproxy “Cho phép đọc
Hoặc biên dịch từ bộ mã nguồn (đối với các nhà phát triển):
# gcc –c *.c
# gcc –o haproxy *.o
3.3 Tạo file config haproxy.conf
# vi haproxy.cfg defaults
balance leastconn stats enable
session timeout 50000
frontend www 192.168.1.72:80 mode http
default_backend all_servers backend all_servers
mode http
server server1 192.168.1.72:81 weight 1 maxconn 5000 server server2 192.168.1.72:82 weight 2 maxconn 5000 server server3 192.168.1.72:83 weight 2 maxconn 10000 3.4 Chạy HaProxy
# ./haproxy -f ./haproxy.cfg –c
# ./haproxy -f ./haproxy.cfg -p /var/run/haproxy.pid -D
# /sbin/service httpd start “Khởi động service httpd Mở trỡnh duyệt của một mỏy kết nối với mỏy này trong mạng LAN, gừ vào địa chỉ 192.168.1.72, lúc này bộ cân bằng tải đang listen trên cổng 80 của máy 192.168.1.72, nó sẽ nhận biết yêu cầu, chuyển chúng đến một trong 3 server trên các cổng 81, 82, 83. Chúng ta sẽ nhận được kết quả
Welcome to server x (với x = 1, 2, 3)
Nếu thuật toán sử dụng là round robin đơn giản, không sử dụng cookie, khi refresh liên tục bằng cách nhấn F5, giá trị “x” sẽ quay vòng trong khoảng 1-3. Điều này cho thấy thuật toán của chúng ta hoạt động tốt. Nếu sử dụng thuật toán least connections thì kết quả sẽ khác. Trên thực tế thuật toán least connections chỉ thể hiện rừ giỏ trị của nú khi cú rất nhiều kết nối đang hướng tới server, đồng nghĩa với
việc sẽ có rất nhiều session đang hoạt động. Thuật toán sẽ hướng yêu cầu đến server đang có ít active session nhất
Có thể kiểm tra các thông số về server, trạng thái server hiện tại, số lượng kết nối hiện tại, số lượt truy cập bằng địa chỉ http://192.168.1.72/haproxy?stats. Tính năng này hoạt động khi chúng ta lựa chọn trong file cấu hình tùy chọn “stats enable
”. Kết quả thu được trong ví dụ trên như sau:
H 3.3-4 Kiểm tra thông số server trong HAProxy Một số thông số đáng chú ý như sau:
+ pid 3093: process id đang chạy Haproxy trên máy chủ linux
+ www là frontend, backend là 3 webserver server1, server2, server3
+Các thông số kiểm tra server được mô tả bằng màu như trên hình vẽ, bao gồm các trạng thái giống nhau ở cả 2 phần backup server và active server UP, DOWN, UP and going down, DOWN and going UP
+Ở dưới là các thông số về session hiện tại, về các connections đang trong hàng đợi, thông lượng Bytes ra vào, số các yêu cầu bị từ chối, lỗi và cảnh báo.
H3.3-4 Thông số các server của website www.tamtay.vn
KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN 1. Tổng kết
Đồ án đã đưa ra các thành phần cần phải xây dựng của một bộ cân bằng tải và đã cài đặt một giải pháp phân tải động thông minh hoạt động hiệu quả hơn so với giải pháp đang chạy trên một bộ cân bằng tải mã nguồn mở.
Trước tiên, đồ án đã đưa ra mô hình website với khả năng mở rộng, từ đó nhấn mạnh tầm quan trọng của việc cân bằng tải cho các webserver trong toàn bộ hệ thống. Sử dụng phép so sánh về hiệu năng và giá thành để xác định được mô hình cần dùng cho một website lớn là sử dụng nhiều webserver nhỏ, đồng thời sử dụng một bộ cân bằng tải để phân tải cho các webserver này.
Đồ án cũng đã đưa ra thiết kế của một bộ cân bằng tải bao gồm 4 phần chính, đó là cân bằng tải cho server, cân bằng tải cho server toàn cầu, cân bằng tải cho firewall và cân bằng tải cho cache. Trong đó, đồ án đi sâu vào thảo luận về 3 phần chính là cân bằng tải cho server, server toàn cầu và cache, các kỹ thuật cân bằng được sử dụng trong 3 phần này.
Một bộ cân bằng tải hoạt động tốt cần phải kiểm tra được trạng thái server, nhằm đảm bảo không chuyển yêu cầu của người dùng đến những server không còn hoạt động. Thuật toán phân tải cần phải được xây dựng một cách thông minh nhằm lựa chọn được server tốt nhất để phục vụ yêu cầu người dùng. Ngoài ra, bộ cân bằng tải còn phải đáp ứng các vấn đề về duy trì session cho người sử dụng. Nó có thể thực hiện được việc này bằng cách sử dụng cookie.
Đồ án đã giới thiệu 8 thuật toán cân bằng tải hiện đang được sử dụng bởi một số sản phẩm cân bằng tải của các công ty lớn trên thế giới, được chia ra làm 2 nhánh là các thuật toán tĩnh và các thuật toán động. Các thuật toán này không những đòi hỏi lập trình phần mềm tinh vi, mà còn yêu cầu sự hỗ trợ của các phần cứng. Trong đó đồ án đã cài đặt một thuật toán tĩnh và một thuật toán động dựa trên một sản phẩm cân bằng tải mã nguồn mở chạy trên server linux là HAProxy. Các thuật toán này chưa chú trọng vào thông số tải hiện tại của server, do đó đồ án đã đưa ra một hướng mới nhằm phát hiện ra tải của các server, từ đó giúp bộ cân bằng tải hoạt động hiệu quả hơn.
Cuối cùng, đồ án đưa ra hai phương pháp cài đặt và cấu hình bộ cân bằng tải vào hệ thống mạng nhằm đáp ứng được nhu cầu khác nhau của người quản trị hệ thống với mong muốn đạt được hiệu quả tối ưu nhất. Phương pháp đơn giản có thể áp dụng cho một hệ thống có ít server với số lượng người dùng vừa phải. Phương pháp cài đặt phức tạp hơn có 2 bộ cân bằng tải, từ đó tránh được SPOF, giúp hệ thống duy trì hoạt động khi một trong hai bộ cân bằng tải bị hỏng.
Do thời gian và nguồn lực có hạn, đồ án chưa thiết kế được một bộ cân bằng tải hoàn chỉnh, hi vọng sẽ được thực hiện trong một nghiên cứu sâu hơn về đề tài này. Những ý tưởng chưa thực hiện được do hạn chế trong thiết kế của bộ cân bằng tải mã nguồn mở xin để dành trong phần định hướng phát triển.