Các phương pháp cài đặt bộ cân bằng tải vào hệ thống

Một phần của tài liệu Tìm hiểu và triển khai hệ thống cân bằng tải và chịu lỗi trên môi trường Linux Đề tài nghiên cứu khoa học (Trang 26 - 34)

II. CÀI ĐẶT THỰC NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG

1. Các phương pháp cài đặt bộ cân bằng tải vào hệ thống

Trong phần này, nhóm xin trình bày một số phương pháp cài đặt bộ cân bằng tải vào hệ thống website. Có nhiều phương pháp từ đơn giản đến phức tạp, ứng dụng trong nhiều trường hợp khác nhau. Với một số website nhỏ, chỉ có một vài server đặt trong cùng mạng LAN, chúng ta có thể sử dụng phương pháp cài đặt đơn giản với một bộ cân bằng tải cài đặt trước các server, kết hợp với kỹ thuật cookie-insert.

Trong một hệ thống lớn hơn, để tránh quá tải cho bộ cân bằng tải, chúng ta có thể cài đặt 2 bộ cân bằng tải hoạt động theo cơ chế active-backup, nhằm đảm bảo nếu như 1 trong 2 bộ cân bằng tải bị “chết”, vẫn còn có một bộ dự phòng, để chắc chắn rằng hệ thống luôn hoạt động. Kết hợp với các phương pháp này là một số hình thức cài đặt cookie và sử dụng các luật ngữ cảnh (content rules) theo yêu cầu của từng website khác nhau.

Để thấy được mô hình cài đặt một cách tốt nhất, nhóm dùng một bộ cân bằng tải mã nguồn mở có sẵn để làm mô hình. Bộ cân bằng tải có tên là HAProxy có đầy đủ chức năng của một bộ cân bằng tải đơn giản. Trước khi đi vào chi tiết cài đặt bộ

cân bằng tải, xin trình bày sơ qua về các tính năng của HAProxy.

1.1. Bộ cân bằng tải HAProxy

HAProxy là một giải pháp cân bằng tải với khả năng mở rộng cao, được cài đặt cho những website chạy các ứng dụng dựa trên TCP và HTTP. HAProxy là một giải pháp mã nguồn mở được phát triển trên hệ điều hành Linux có thể cân bằng tải cho bất kỳ dịch vụ TCP nào. Trong phiên bản mới nhất, HAProxy chuyển mạch ngữ cảnh (content switching) cho phép người quản trị website có thể thiết đặt các

luật chuyển mạch trong file cấu hình. Bên cạnh đó, HAProxy còn có số lượng thuật toán phân tải phong phú, khả năng ngăn chặn các cổng không cần thiết theo nhu cầu của người quản trị, hỗ trợ các phương pháp cài đặt cookie và khả năng hoạt động “trong suốt” giúp tăng tốc độ truyền dẫn dữ liệu. Có thể kể ra rất nhiều website sử dụng HAProxy như Tumblr tại địa chỉ http://www.tumblr.com, Red Hat's Cloud : OpenShift tại địa chỉ https://openshift.redhat.com, hay website Mạng xã hội Việt Nam như http://www.tamtay.vn.

Mô hình cơ bản của bộ cân bằng tải HAProxy

HAProxy là một ứng dụng chạy độc lập, tất cả những gì người dùng phải làm là cài đặt HAProxy lên một máy server và thiết lập file cấu hình, trong đó chỉ rõ địa chỉ cài đặt HAProxy và địa chỉ các máy server. Mỗi server sẽ được đặt các thông số khác nhau về địa chỉ server, cookie, trọng số… File cấu hình này cũng sẽ thiết lập các thông số về timeout của session, số lượng kết nối lớn nhất, cookie, thuật toán cân bằng tải, các luật chuyển mạch ngữ cảnh. Một ví dụ đơn giản về file cấu hình như sau:

global

log 127.0.0.1 local0 log 127.0.0.1 local1 notice

#log loghost local0 info maxconn 4096

#debug

#quiet user haproxy group haproxy defaults

log global

mode http

option httplog option dontlognull

retries 3 redispatch

maxconn 2000 # Number of max connections

contimeout 5000 #Connection timeout

clitimeout 50000 #Client timeout

srvtimeout 50000 #Server timeout

listen webfarm 192.168.72.131:80 #HAProxy address

mode http

stats enable #For statistics

stats auth admin:admin123 #User/pass stats

balance roundrobin #Balance in round-robin mode cookie JSESSIONID prefix #Cookie rewrite

option httpclose option forwardfor

option httpchk HEAD /check.txt HTTP/1.0

server web1 192.168.72.132:80 cookie A check #Server 01 server web2 192.168.72.133:80 cookie B check #Server 02

Các thông số được giải thích như trong phần chú thích (sau dấu ‘#’). Trong đó có một vài thông số đang lưu ý như:

“listen webfarm 192.168.72.131:80 #HAProxy address”

Server cài đặt HAProxy ở địa chỉ 192.168.72.131, listen trên cổng 80, người dùng sẽ truy cập vào website theo địa chỉ này và với họ đây là web server duy nhất của website. Thông số quan trọng tiếp theo là thuật toán cân bằng tải:

“balance roundrobin #Balance in round-robin mode”

Bộ cân bằng tải được cài đặt theo thuật toán phân tải round-robin. HAProxy phiên bản mới nhất hỗ trợ các thuật toán phân tải đa dạng như: round-robin, least connections, uri check, urlcheck và source hash. Các website khác nhau sẽ có thể chọn thuật toán phù hợp với yêu cầu của người dùng hoặc tại thời điểm cụ thể.

Thông số quan trọng thứ ba là địa chỉ các server thực chứa website:

“server web1 192.168.72.132:80 cookie A check #Server 01”

“server web2 192.168.72.133:80 cookie B check #Server 02”

Hai server này được cài ở hai máy trong cùng mạng LAN với bộ cân bằng tải, đều phục vụ trên cổng 80 và đều chứa cookie.

Tuy hoạt động khá hiệu quả nhưng tính tùy biến và khả năng hỗ trợ người phát triển của HAProxy rất kém, phần mềm được viết bằng ngôn ngữ lập trình C trên hệ điều hành GNU/Linux, biên dịch bằng bộ thư viện mã nguồn mở GNU. Ở đây chúng tôi phát triển HAProxy trên hệ điều hành Ubuntu.

1.2. Cài đặt đơn giản với 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 nó theo mô hình sau:

HAProxy được cài đặt ở giữa người dùng và cụm web server, tại địa chỉ 192.168.72.131, 3 web server và một database server được cài đặt tại các máy trong cùng mạng LAN với HAProxy. Ở đâ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. Ba web server ssuowcj cài đặt tại các IP 192.168.72.132 đến 192.168.72.134, để đơn giản, chúng ta giả sử 3 web 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.

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 thiết lập như sau:

listen webfarm 192.168.72.131:80

mode http

balance roundrobin

cookie SERVERID insert indirect

option httpchk HEAD /index.php HTTP/1.0 option httpchk HEAD /check.txt HTTP/1.0

server web1 192.168.72.132:80 maxconn 4096 cookie A check server web2 192.168.72.133:80 maxconn 4096 cookie B 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

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 vì một lý do nào đó mà cookie ở trình duyệt bị người dùng 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 cho server nào, và do đó yêu cầu này sẽ không được phục vụ.

Chẳng hạn như có 2 server có mã cookie là A, Bv 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 HAProxy, 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 Single point of failure (SPOF – một node trong hệ thống mà nếu nó bị “chết” thì toàn bộ hệ thống sẽ bị tê liệ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ịu lỗi tốt hơn.

1.3. Cài đặt với khả năng mở rộng cao Phương pháp này được mô tả như sau:

Mô hình phức tạp với 2 bộ cân bằng tải chia sẻ 1 IP ảo

Sẽ có 2 bộ cân bằng tải được cài đặt tại các máy ở địa chỉ 192.168.72.3 và 192.168.72.4. Các web server và database server được cài ở các máy trong cùng mạng LAN. Lúc này 2 bộ cân bằng tải sẽ cùng chia sẽ một IP ảo 192.168.72.1, người dùng sẽ truy cập website ở địa chỉ IP ảo này và họ chỉ cần biết đến nó. Vậy làm cách nào để cho 2 bộ cân bằng tải có thể cùng chia sẻ một IP ảo này? Giải pháp là sử dụng ứng dụng có tên là keepalived.

Keepalived là một ứng dụng cho phép 2 bộ cân bằng tải cài đặt cùng với nó hoạt động theo cơ chế active/backup, nếu bộ cân bằng tải master bị “chết” thì bộ

cân bằng tải còn lại sẽ thực hiện nhiệm vụ cân bằng. Được thiết kế dành riêng cho các dự án Linux Virtual Server (www.linux-vs.org), keepalived có khả năng kiểm tra các server trong cụm, nhận biết các server không hoạt động và loại bỏ chúng ra khỏi cụm. Ở đây, keepalived có nhiệm vụ kiểm tra 2 bộ cân bằng tải.

Quay trở lại với mô hình chúng ta đang cài đặt. Với keepalived, 2 bộ cân bằng tải sẽ hoạt động theo cơ chế active-backup, người dùng sẽ truy cập vào địa chỉ IP ảo 192.168.72.1 và được chuyển hướng vào bộ cân bằng tải active 192.168.72.3.

Từ đó yêu cầu sẽ được cân bằng tải vào một trong các server. Nếu bộ cân bằng tải này bị “chết”, keepalived sẽ chuyển bộ cân bằng tải ở địa chỉ 192.168.72.4 thàng active, như vậy sẽ tranh được tình trạng bộ cân bằng tải trở thanh một SPOF như trong mô hình đơn giản.

Trong mô hình này, chúng ta sử dụng một coockie duy nhất. Ứng dụng sẽ tạo ra một cookie có tên là “JSESSIONID” dùng để theo dõi session. Trong dữ liệu trả về cho người dùng, haproxy sẽ chèn thêm tên server vào cookie này. Phương pháp này có tên là chèn cookie prefix. Như vậy, cấu hình cho 2 bộ cân bằng tải phải chỉ rõ địa chỉ nhận yêu cầu là địa chỉ IP ảo, địa chỉ này cũng được chỉ định trong file cấu hình của keepalived. Cấu hình cho 2 bộ cân bằng tải là hoàn toàn giống nhau vì chúng hoạt động ở chế độ active-backup. Vì bộ cân bằng tải cần phải sửa tất cả các cookie được gửi bởi server và client, nên nó phải được quyền truy xuất tất cả các cookie này, vì vậy cần phải thêm vào tùy chọn “option httpclose” để tắt chế độ

cookie keep-alive ở trình duyệt (HTTP/1.1)

listen webfarm 192.168.72.131:80

mode http

balance roundrobin cookie JSESSIONID prefix option httpclose option forwardfor

option httpchk HEAD /check.php HTTP/1.0 server web1 192.168.72.132:80 cookie A check server web2 192.168.72.133:80 cookie B check

Trong file cấu hình của keepalived cũng phải chỉ rõ địa chỉ listen là 192.168.72.1. Vì keepalived được cài đặt trên cả 2 máy chứa HAProxy nên khi người dùng truy cập vào IP ảo này, keepalived sẽ chuyển hướng yêu cầu đến HAProxy. File cấu hình cho keepalived trên cả 2 máy chứa HAProxy như sau:

vrrp_script chk_haproxy { # Requires keepalived-1.1.13 script “killall -0 haproxy” # cheaper than pidof

interval 2 # check every 2 seconds

weight 2 # add 2 points of prio if OK

}

vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51

priority 101 # 101 on master, 100 on backup

virtual_ipaddress { 192.168.72.1 }

track_script { chk_haproxy }

}

Luồng dữ liệu được mô tả như hình sau:

- Trong cấu hình của keepalived, haproxy cài đặt trên máy 192.168.72.3 (priority

= 101) là active, bộ cân bằng tải còn lại là backup (priority = 100), nếu bộ active không hoạt động bộ backup sẽ được thiết đặt priority = 101 và trở thành bộ

active.

- Người dùng sẽ truy cập website tại địa chỉ 192.168.72.1:80, keepalived sẽ chuyển yêu cầu này đến cho HAProxy.

- Cả 2 bộ cân bằng tải gửi các tín hiều kiểm tra của chúng từ IP gốc.

- Nếu yêu cầu không chứa cookie, nó sẽ được chuyển đến server phù hợp.

- Trong dữ liệu trả về, nếu có cookie JSESSIONID, HAProxy sẽ chèn thêm tên server vào cookie này, chẳng hạn như với cookie “JSESSIONID=123” được trả về từ server A HAProxy sẽ chèn thêm thành “JSESSIONID=A~123”

- Nếu người dùng truy cập lại với cookie “JSESSIONID=A~123”, HAProxy sẽ chuyển yêu cầu đến server A, tên server A sẽ bị xóa khỏi cookie trước khi nó được chuyển đến server.

- Nếu server web A bị “chết”, bộ cân bằng tải sẽ chuyển yêu cầu đến một server khác và cookie sẽ được chèn lại theo tên của server này.

Một phần của tài liệu Tìm hiểu và triển khai hệ thống cân bằng tải và chịu lỗi trên môi trường Linux Đề tài nghiên cứu khoa học (Trang 26 - 34)

Tải bản đầy đủ (DOC)

(47 trang)
w