Hồ Đức Lĩnh – Nha Trang University
Kỹ thuật cân bằng tải mạng (NLB - Network Load Balancing)
NLB mở rộng hiệu năng của các server ứng dụng, chẳng hạn như Web server, nhờ phân phối các
yêu cầu của client cho các server trong nhóm (cluster). Các server (hay còn gọi là host) đều nhận
gói IP đến, nhưng gói chỉ được xử lý bởi một server nhất định. Các host trong nhóm sẽ đồng thời
đáp ứng các yêu cầu khác nhau của các client, cho dù một client có thể đưa ra nhiều yêu cầu. Ví
dụ, một trình duyệt Web cần rất nhiều hình ảnh trên một trang Web được lưu trữ tại nhiều host
khác nhau trong một nhóm server. Với kỹ thuật cân bằng tải, quá trình xử lý và thời gian đáp ứng
client sẽ nhanh hơn nhiều.
Mỗi host trong nhóm có thể định ra mức tải mà nó sẽ xử lý hoặc tải có thể phân phối một cách
đồng đều giữa các host. Nhờ sử dụng việc phân phối tải này, mỗi server sẽ lựa chọn và xử lý một
phần tải của host. Tải do các client gửi đến được phân phối sao cho mỗi server nhận được số
lượng các yêu cầu theo đúng phần tải đã định của nó. Sự cân bằng tải này có thể điều chỉnh động
khi các host tham gia vào hoặc rời khỏi nhóm. Đối với các ứng dụng như Web server, có rất nhiều
client và thời gian mà các yêu cầu của client tồn tại tương đối ngắn, khả năng của kỹ thuật này
nhằm phân phối tải thông qua ánh xạ thống kê sẽ giúp cân bằng một cách hiệu quả các tải và cung
cấp khả năng đáp ứng nhanh khi nhóm server có thay đổi.
Các server trong nhóm cân bằng tải phát đi một bản tin đặc biệt thông báo trạng thái hoạt động của
nó (gọi là heartbeat message) tới các host khác trong nhóm đồng thời nghe bản tin này từ các khác
host khác. Nếu một server trong nhóm gặp trục trặc, các host khác sẽ điều chỉnh và tái phân phối
lại tải để duy trì liên tục các dịch vụ cho các client. Trong phần lớn các trường hợp, phần mềm
client thường tự động kết nối lại và người sử dụng chỉ cảm thấy trễ một vài giây khi nhận được
đáp ứng trả lời.
Kiến trúc hệ thống cân bằng tải
Để tối đa hoá thông lượng và độ khả dụng, công nghệ cân bằng tải sử dụng kiến trúc phần mềm
phân tán hoàn toàn, trình điều khiển cân bằng tải được cài đặt và chạy song song trên tất cả các
host trong nhóm. Trình điều khiển này sắp xếp tất cả các host trong nhóm vào một mạng con để
phát hiện đồng thời lưu lượng mạng đến địa chỉ IP chính của nhóm (và các địa chỉ bổ sung của các
host ở nhiều vị trí khác nhau). Trên mỗi host, trình điều khiển hoạt động như một bộ lọc giữa trình
điều khiển card mạng và chồng giao thức TCP/IP, cho phép một phần lưu lượng mạng đến được
nhận bởi host đó. Nhờ đó, các yêu cầu của client sẽ được phân vùng và cân bằng tải giữa các host
cũng tăng cường thông lượng, giảm độ trễ và phụ phí (overhead) nhờ tăng số lượng gói mà
TCP/IP có thể gửi trong một kết nối. Để có được những cải thiện về hiệu năng này, NLB thiết lập
và quản lý một tập hợp các bộ đệm gói và các ký hiệu (descriptor) được sử dụng để phối hợp các
hoạt động của TCP/IP và trình điều khiển NDIS.
Phân phối lưu lượng trong nhóm
NLB sử dụng hai lớp broadcast hoặc multicast để phân phối đồng thời lưu lượng mạng đến tất cả
các host trong nhóm. Trong chế độ hoạt động mặc định là unicast, NLB sẽ gán địa chỉ trạm làm
việc (địa chỉ MAC) cho card mạng để card mạng có thể hoạt động (card này gọi là card nhóm ?
cluster adapter), và tất cả các host trong nhóm được gán cùng một địa chỉ MAC. Các gói đến do đó
được nhận bởi tất cả các host trong nhóm và chuyển gói tới trình điều khiển cân bằng tải để lọc.
Để đảm bảo tính duy nhất, địa chỉ MAC được dẫn xuất từ địa chỉ IP chính của nhóm. Ví dụ, với
địa chỉ IP chính của nhóm là 1.2.3.4, địa chỉ MAC unicast được đặt là 02-BF-1-2-3-4. Trình điều
khiển cân bằng tải sẽ tự động sửa địa chỉ MAC của card nhóm bằng cách thiết lập một thực thể
đăng ký và tái nạp trình điều khiển card nhóm. Hệ điều hành không cần phải khởi động lại. Nếu
các host trong cluster được gắn vào một thiết bị chuyển mạch (swicth) chứ không phải một bộ tập
trung (hub), việc sử dụng chung một địa chỉ MAC sẽ gây ra xung đột do các chuyển mạch lớp 2
chỉ có thể hoạt động khi các địa chỉ MAC nguồn trên tất cả các cổng của thiết bị chuyển mạch là
duy nhất. Để tránh điều này, NLB sửa địa chỉ MAC nguồn cho các gói đầu ra là duy nhất, địa chỉ
MAC của nhóm là 02-BF-1-2-3-4 được chuyển thành 02-h-1-2-3-4, trong đó h là mức ưu tiên của
host trong nhóm. Kỹ thuật này ngăn không cho thiết bị chuyển mạch tìm ra địa chỉ MAC thực sự
của nhóm và kết quả là các gói đến nhóm được phân phối tới tất cả các cổng của thiết bị chuyển
mạch. Nếu các host trong nhóm được kết nối trực tiếp vào một hub, mặt nạ địa chỉ MAC nguồn
của NLB trong chế độ unicast có thể được vô hiệu hoá để tránh gây ra hiện tượng tràn cho các
thiết bị chuyển mạch ở đường lên (upstream). Điều này có thể thực hiện bằng cách thiết lập tham
số đăng ký NLB là MaskSourceMAC=0. Việc sử dụng hệ thống chuyển mạch đường lên ba mức
cũng có thể hạn chế tràn cho các thiết bị chuyển mạch.
Chế độ unicast của NLB có thể làm vô hiệu hoá quá trình trao đổi thông tin giữa các host trong
nhóm có sử dụng card nhóm. Khi các gói của một host được gửi đi với địa chỉ MAC đích giống
địa chỉ MAC nguồn, các gói này sẽ bị quay vòng (loop-back) giữa các tầng giao thức mạng bên
Hồ Đức Lĩnh – Nha Trang University
Thuật toán cân bằng tải
NLB sử dụng thuật toán lọc phân tán hoàn toàn để ánh xạ các client đến các host trong nhóm.
Thuật toán này cho phép các host trong nhóm đưa ra các quyết định cân bằng tải một cách độc lập
và nhanh chóng cho từng gói đến. Nó được tối ưu hoá để cung cấp khả năng cân bằng tải một cách
thống kê đối với một số lượng lớn các yêu cầu nhỏ do vô số client tạo ra, điển hình là đối với các
Web server. Nếu số client và/hoặc các kết nối client tạo ra các tải quá chênh lệch nhau trên server,
thuật toán cân bàng tải sẽ ít hiệu quả. Tuy nhiên, tính đơn giản và tốc độ của thuật toán cho phép
cung cấp hiệu nǎng rất cao bao gồm cả thông lượng cao và thời gian đáp ứng ngắn trong một dải
rộng các ứng dụng client/server thông dụng.
NLB xử lý các yêu cầu của client bằng cách dẫn đường cho một tỉ lệ phần trăm đã chọn những yêu
cầu mới cho từng host trong nhóm. Thuật toán không đáp ứng những thay đổi về tải trên mỗi host
(chẳng hạn như tải CPU hay vấn đề sử dụng bộ nhớ). Tuy nhiên, quá trình ánh xạ sẽ được thay đổi
khi quan hệ thành viên trong nhóm thay đổi và tỉ lệ phần trăm tải phân bố sẽ được tái cân bằng.
Hồ Đức Lĩnh – Nha Trang University
Khi xem xét một gói đến, tất cả các host thực hiện đồng thời việc ánh xạ thống kê để xác định
nhanh chóng host nào sẽ xử lý gói đó. Quá trình ánh xạ sử dụng một hàm ngẫu nhiên để tính mức
ưu tiên của host dựa trên địa chỉ IP và cổng đến của client cùng các thông tin trạng thái khác để tối
ưu hoá việc cân bằng tải. Host tương ứng sẽ chuyển gói đó từ các tầng dưới lên tầng TCP/IP còn
các host khác sẽ loại bỏ gói này. Quá trình ánh xạ không thay đổi trừ phi quan hệ giữa các host
trong nhóm thay đổi, để đảm bảo rằng địa chỉ IP và cổng đến của client cho trước sẽ luôn được
ánh xạ đến cùng một host trong nhóm. Tuy nhiên, host cụ thể trong nhóm mà địa chỉ IP và cổng
đến của client ánh xạ tới không thể được xác định trước do hàm ngẫu nhiên có tính đến quan hệ
thành viên trong nhóm hiện tại và quá khứ để tối thiểu hoá khả năng ánh xạ lại.
Nhìn chung, chất lượng cân bằng tải được xác định một cách thống kê bởi số lượng client tạo ra
yêu cầu. Như kết cấu tăng giảm về số lượng client theo thống kê, sự đều đặn về chất lượng của
thuật toán cân bằng tải sẽ thay đổi nhẹ. Để hoạt động cân bằng tải có độ chính xác cao trên mỗi
host trong nhóm, một phần tài nguyên hệ thống sẽ được sử dụng để đo và phản ứng trước những
thay đổi của tải. Sự trả giá về hiệu năng này phải được cân nhắc so với lợi ích của việc tối đa hoá
khả năng sử dụng các tài nguyên trong nhóm (về cơ bản là CPU và bộ nhớ). Trong bất cứ trường
hợp nào, việc sử dụng hợp lý các nguồn tài nguyên server phải được duy trì để có thể phục vụ cho
Trong chế độ unicast, mỗi host sẽ phát quảng bá (broadcast) bản tin "heartbeat"
theo chu kỳ. Còn trong chế độ multicast, nó sẽ phát các bản tin này ở chế độ
multicast. Mỗi bản tin "heartbeat" chiếm một khung Ethernet và được gắn thêm địa
chỉ IP chính của nhóm nhằm cho phép nhiều nhóm có thể cùng tồn tại trên cùng
một mạng con. Bản tin "heartbeat" của NLB của Microsoft được gán một giá trị
0x886F. Chu kỳ gửi các bản tin này mặc định là 01 giây. Giá trị này có thể thay đổi.
Trong quá trình hội tụ, chu kỳ này được giảm xuống chỉ còn một nửa để đẩy nhanh
việc hoàn tất quá trình này. Thậm chí, đối với các cluster lớn, băng thông cần thiết
để truyền các bản tin "heartbeat" rất thấp (24kBytes/s cho một cluster 16 đường).
Để có thể khởi tạo quá trình hội tụ, theo mặc định cần 05 bản tin heartbeat không
được nhận. Giá trị này có thể thay đổi.
Điều khiển từ xa
Cơ chế điều khiển từ xa của NLB sử dụng giao thức UDP và được gán cổng dịch vụ
#2504. Các gói dữ liệu điều khiển từ xa được gửi tới địa chỉ IP chính của nhóm. Do
trình điều khiển trên mỗi host trong nhóm xử lý các gói này, chúng cần được định
tuyến tới mạng con của nhóm (thay vì tới một mạng con gốc mà nhóm đó gắn vào).
Khi các lệnh điều khiển từ xa được đưa ra trong nhóm, chúng sẽ được phát quảng
bá trên mạng con cục bộ. Điều này đảm bảo tất cả các host trong nhóm đều có thể
nhận được chúng ngay cả khi nhóm chạy trong chế độ unicast.
Hiệu năng cân bằng tải
Vai trò của NLB tác động đến hiệu năng của hệ thống có thể được đánh giá dựa trên
bốn tiêu chí chính sau:
- CPU overhead trên các host của nhóm - Phần trăm CPU cần thiết để phân tích và
lọc các gói của mạng (càng thấp càng tốt).
Tất cả các giải pháp cân bằng tải đều cần sử dụng một phần tài nguyên của hệ
thống để xem xét gói đến và đưa ra quyết định cân bằng tải và do đó ít nhiều ảnh
hưởng đến hiệu năng của mạng. Giải pháp cân bằng tải dựa trên bộ điều phối cần
kiểm tra, hiệu chỉnh và truyền lại gói tới các host trong nhóm (thường phải sửa đổi
lại địa chỉ IP để tái định tuyến gói từ địa chỉ IP ảo tới địa chỉ IP của từng host cụ
thể). Đối với NLB, nó phân phối đồng thời các gói đến tới tất cả các host trong