1. Bộ cân bằng tải sử dụng mã nguồn mở Haproxy:
1.2. Cài đặt bằng phương pháp Cookie-insert:
Phương án đơn giản nhất để cài đặt HAProxy vào hệ thống là cài đặt 1 nó như trong hình dưới đây. Haproxy được cài đặt ở giữa người dùng và cụm webs-server, tại địa chỉ 192.168.1.1, 4 web-servers và một database server được cài đặt tại các máy trong cùng mạng LAN với HAProxy. Trong mô hình này, HAProxy được cài đặt theo chế độ HTTP (mode HTTP), sử dụng thuật toán cân bằng tải weighted round-robin (trong một số trường hợp khác, người quản trị hệ thống có thể chọn thuật toán least connections). HAProxy sử dụng chèn cookie với lựa chọn kiểm tra header của dữ liệu vào ra.
Bốn web-servers được cài đặt tại các địa chỉ từ 192.168.1.11 đến 192.168.1.14, để đơn giản, chúng ta giả sử 4 server này có cấu hình tương đương nhau và do đó trọng số của chúng là giống nhau. Với giả sử mỗi server có số lượng kết nối lớn nhất là 4096, và mỗi server có cookie là tên của chúng.
2.
H.3.1-1 Mô hình cân bằng tải đơn giản với một bộ cân bằng tải
Trong file cấu hình của haproxy phải chỉ rõ địa chỉ nhận yêu cầu từ phía người dùng (haproxy), địa chỉ các web-server và chỉ định rõ phương pháp dùng cookie. Các thông số đó được mô tả như sau:
#...
listen webfarm 192.168.1.1:80 mode http
balance roundrobin
cookie SERVERID insert indirect
option httpchk HEAD /index.html HTTP/1.0
server webA 192.168.1.11:80 maxconn 4096 cookie A check server webB 192.168.1.12:80 maxconn 4096 cookie B check server webC 192.168.1.13:80 maxconn 4096 cookie C check server webD 192.168.1.14:80 maxconn 4096 cookie D check #...
Luồng dữ liệu của chương trình:
- Bộ cân bằng tải nhận yêu cầu từ phía người dùng.
- Nếu yêu cầu không chứa cookie, nó sẽ được chuyển đến server nào đó theo thuật toán cân bằng tải của bộ cân bằng tải.
- Dữ liệu trả về cho người dùng sẽ được chèn thêm cookie “SERVERID” với giá trị là tên của server, chẳng hạn “A”.
- Khi người dùng trở lại với yêu cầu có chứa cookie SERVERID=A, bộ cân bằng tải sẽ chuyển yêu cầu này vào server A.
- Nếu server A bị “chết”, bộ cân bằng tải sẽ gửi yêu cầu đến một server khác và dữ liệu trả về sẽ chèn thêm cookie của server này.
Mô tả luồng dữ liệu của chương trình:
H.3.1-2 Mô tả Luồng dữ liệu trong mô hình đơn giản
Nhược điểm của phương pháp này là bộ cân bằng tải không thể xác định được server cần chuyển yêu cầu nếu như nó gặp một cookie lạ. Khi mà trình duyệt của người dùng được đặt chế độ keep-alive (HTTP/1.1), sau khi dữ liệu được trả về lần đầu tiên, trình duyệt của người dùng sẽ đọc cookie từ phía server và lưu nó vào trong ổ đĩa cứng, các lần truy cập sau bộ cân bằng tải sẽ không cần chèn cookie trong trả về nữa vì người dùng đã có sẵn. Nếu như vì một lý do nào đó mà cookie ở
trình duyệt của người dùng bị chỉnh sửa đi, những lần truy cập sau của người dùng sẽ gửi đến bộ cân bằng tải 1 cookie mà nó không hiểu. Khi đó bộ cân bằng tải sẽ không biết phải chuyển yêu cầu này vào server nào, và do đó yêu cầu này sẽ không được phục vụ.
Chẳng hạn như có 4 server có mã cookie là A, B, C, D như trong file cấu hình ở trên. Nhưng bộ cân bằng tải lại đọc được một yêu cầu từ phía người dùng là “SERVERID=E”, nó sẽ không xử lý yêu cầu này vì rõ ràng là có cookie nên không thể chuyển nó theo chế độ cân bằng tải, nhưng đọc cookie lại không nhận biết được server nào. Chúng ta có thể khắc phục nhược điểm này bằng cách tắt chế độ keep- alive ở trình duyệt người dùng. Trong file cấu hình của hệ thống, chúng ta thêm vào lựa chọn: “option httpclose”. Như vậy trình duyệt từ phía người dùng sẽ có thế đọc được nhiều cookie được gửi về từ server.
Nhược điểm thứ 2 là bộ cân bằng tải lúc này trở thành một SPOF, nếu nó ngừng hoạt động, toàn bộ hệ thống sẽ chết. Để khắc phục điều đó, chúng ta phải chuyển qua một thiết kế phức tạp hơn mà trong đó sẽ có nhiều hơn một bộ cân bằng tải. Thiết kế này sẽ giúp khắc phục những nhược điểm của thiết kế đơn giản và có khả năng chống lỗi tốt hơn.