1. Vấn đề
Cùng một HTTP session có thể nằm trên nhiều kết nối TCP khác nhau. Trong điều kiện không sử dụng Load Balancer, sẽ không phát sinh các vấn đề về quản lý phiên – session. Thông tin session của tất cả người dùng được nhận biết thông qua một máy chủ duy nhất. Tất cả kết nối của Client đều được chuyển đến một máy chủ duy nhất.
Ở chế độ dự phòng, khi người quản trị cài đặt nhiều hơn một server, vấn đề về quản lý session sẽ xuất hiện. Máy chủ ứng dụng có nguy cơ không thể access thông tin session người dùng.
2. Phương án cấu hình dự phòng khi sử dụng session
· Replication: Sử dụng cơ chế sao lưu session của web server để đảm bảo rằng tất cả các máy chủ ứng dụng thuộc cluster khác nhau đều có thông tin của Session. Một số web server phổ biến như tomcat đều hỗ trợ cơ chế replication session này.
· Share session: Thông tin session được chia sẻ bằng cách lưu trữ tập trung vào một cơ sở dữ liệu, hoặc dạng file system trên web server.
· Source ip affinity: Cấu hình dự phòng theo thông tin IP của client gửi lên.
· Persistance: Cấu hình theo thông tin được gửi đính kèm trong Header các bản tin request. Ở lần request đầu tiên, Load Balancer - LB sẽ trả về thông tin về máy chủ dự phòng đảm nhận việc xử lý request client vừa đẩy lên. Các request sau, client gửi kèm thông tin này vào request, LB sẽ nhận biết và điều hướng request đến máy chủ này.
3. Các bước cấu hình mode Persistance với HA Proxy
Để điều hướng đúng máy chủ (persistance), chúng ta sẽ sử dụng thông qua Cookies. Có 02 cách để cấu hình persistance dùng cookies:
- Thiết lập Cookie session trên LB
- Sử dụng cookie ứng dụng
Tài liệu này mô tả các bước thiết lập Session Cookie trên Load Balancer:
Bước 1: Cài đặt HA Proxy và chỉnh sửa file cấu hình haproxy.cfg
Để chỉnh sửa cấu hình từ terminal gõ lệnh:
sudo vi /etc/haproxy/haproxy.cfg
|
Bấm phím “ESC” + “Insert” để thay đổi thông tin file
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /u01/app/run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend front_user
bind *:8082
stats uri /haproxy?stats
default_backend backend_user
backend backend_user
balance roundrobin
cookie SERVERID insert indirect nocache
server user_s1 10.30.176.123:8082 check cookie s1
server user_s2 10.30.176.45:8082 check cookie s2
|
Bấm “ESC” + “:” + “x” để lưu thông tin cấu hình
Restart Haproxy để hoàn tất load lại cấu hình mới
sudo /etc/init.d/haproxy restart
|
Kiểm tra cấu hình mới đã được load thành công hay chưa
sudo /etc/init.d/haproxy status
|
(Nếu kết quả trả về OK, thì việc apply cấu hình mới cho HAPROXY đã thành công)
Bước 2: Xử lý tại Client
Khi nhận được thông tin phản hồi về máy chủ điều hướng từ LB trong request đầu tiên, ở các request sau tại client sẽ được tự động đính kèm thêm thông tin về máy chủ điều hướng. Ví dụ:
set Cookies: SERVERID=s1
Tham khảo:Khi nhận được thông tin phản hồi về máy chủ điều hướng từ LB trong request đầu tiên, ở các request sau tại client sẽ được tự động đính kèm thêm thông tin về máy chủ điều hướng. Ví dụ:
set Cookies: SERVERID=s1
https://www.haproxy.com/blog/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/
Nhận xét