Cân bằng tải Web-Proxy Client với ISA Server 2004 Standard Edition (Phần 2)

Xem lại phần I

Chúng ta đã làm quen với vấn đề cân bằng tải Web-Proxy Client bằng ISA Server 2004 Standard Edition trong phần một của loạt bài này. Cũng trong phần một, chúng ta đã đi sâu tìm hiểu proxy với file cấu hình tự động. Với nhiều người, thủ thuật này giảm được đáng kể chi phí phụ phát sinh khi đầu tư phiên bản Enterprise cho doanh nghiệp. Trong phần 2, chúng ta sẽ tiếp tục tìm hiểu về một số khả năng cân bằng tải mở rộng.

Giới thiệu

Trong phần một chúng ta đã xuất file "wpad.dat" bằng một máy chủ của cặp server ISA Server Standard Edition và chỉnh sửa nhẹ một số dòng trong file. Bắt đầu như sau:

cNodes=1;
function MakeProxies(){
this[0]=new Node("10.245.10.254",0,1.000000);
}
Was changed to become:
cNodes=2;
function MakeProxies(){
this[0]=new Node("10.245.10.253",2032180928,1.000000);
this[1]=new Node("10.245.10.254",2843172549,1.000000);
}

Bằng cách tạo file tổng hợp qua một website tới các trình duyệt như Internet Explorer, thay đổi này cho phép một số thủ tục được ẩn bên trong file. Kết quả là hai server chạy Server Standard Edition trở nên cân bằng tải và khả năng chịu sai sót cho các dịch vụ Web proxy.

Tuy nhiên, hoạt động đơn giản này cũng có nghĩa là các cấu hình thực hiện cho ISA Server không được áp dụng cho file orphaned của chúng ta: một số chỉnh sửa "thủ công hơn" sẽ phải tiến hành để nó trở nên phù hợp và hữu ích.

Trong phần một các bạn cũng được chỉ dẫn cách cấu hình "thủ công" Internet Explorer để lựa chọn file cấu hình mới. Đây không phải là giải pháp thực tế cho hầu hết chúng ta. Đầu tiên ta nên sử dụng thành phần bổ sung (add-on) Internet Explorer Maintenance trong Group Policy.

Group Policy và Internet Explorer Maintenance

Trước khi đi sâu vào Group Policy chúng ta cũng nên đề cập đến cơ chế dựng sẵn ISA Server dành cho việc quản lý IE trong Firewall Client. Có một số lý do khiến chúng ta bỏ qua cơ chế này. Đầu tiên, quá nhiều ISA Server chỉ là các Web proxy và Firewall Client không được triển khai; thứ hai, chúng ta sẽ tham chiếu tới Group Policy; và thứ ba, chúng ta đã từng thấy phương thức sử dụng Firewall Client trong nhiều bài báo khác. Còn bây giờ, quay trở lại với vấn đề Group Policy.

Internet Explorer Maintenance trong Group Policy không phải là thành phần yêu thích nhất của tôi. Nó không giống như phần còn lại của các thiết lập trong Group Policy và một số thiết lập xuất hiện kép trong phần “Administrative Templates”. Internet Explorer Maintenance không có chức năng giống như IEAK. Trong Group Policy, thực chất nó là các thành phần IEAK cho máy khách, được sử dụng cho các thiết lập.

Muốn các thành phần này hoạt động, chúng ta cần đáp ứng một số yêu cầu.

Thiết lập cấu hình trình duyệt tự động

Đầu tiên, chọn Group Policy để thao tác. Bạn sẽ không muốn làm hỏng Default Domain Policy, vì thế nên có chính sách với các thiết lập riêng.

Mở policy này ra, xác định vị trí Internet Explorer Maintenance từ User Configuration, trên Windows Settings. Kích phải chuột vào nó để xem menu sổ xuống.


Hình 1

Chúng ta cần Policy Mode chứ không phải là Preference Mode (mô hình tham chiếu). Vì thế đừng kích vào nó và đảm bảo rằng bạn không đánh dấu tích lại lần nữa. Sau khi chỉnh sửa trong Internet Explorer, bạn không thể xoá sạch các thay đổi này từ Group Policy. Muốn làm điều đó, bạn cần đến tuỳ chọn Reset Browser Settings (đặt lại các thiết lập trình duyệt). Bạn sẽ thấy tuỳ chọn này đang có màu xám vì chưa có thiết lập nào được thực hiện cả. Kích đúp lên mô hình IE Maintenance để mở rộng.


Hình 2

Dưới nhãn Connection bạn sẽ thấy chức năng Automatic Browser Configuration. Kích phải chuột lên nó và chọn Properties.


Hình 3

Đánh dấu chọn vào ô Enable Automatic Configuration và nhập đường dẫn Auto-proxy URL (URL proxy tự động) của bạn vào. Chú ý, chương trình sẽ đòi hỏi các file JS, JVS hoặc PAC, nhưng ví dụ được dùng ở đây là file .DAT. Trình duyệt của bạn sẽ không để ý đến.

Bấm OK, chương trình được thực hiện: Ít nhất bạn sẽ được tha thứ khi nghĩ rằng chương trình đang được thực hiện. Đó không phải là cách thành phần bổ sung add-on IE Maintenance làm việc. Nếu vào Internet Explorer và thực hiện các thiết lập trong mạng LAN (trên nhãn Tools, Internet Options, Connections), bạn sẽ thực sự thấy rằng Group Policy đã bổ sung thêm một số thiết lập mới (nếu chờ chính sách để áp dụng hoặc chạy GPUPDATE.EXE), trong khi bạn vẫn có thể không đánh dấu thiết lập. Đó là điều bạn không muốn người dùng mình gặp phải.

Mọi thứ trở nên tồi tệ hơn: bạn không đánh dấu chọn vào thiết lập. Bây giờ chờ Group Policy áp dụng lại (hoặc vào GPUPDATE), nhưng việc thiết lập quay trở lại như trên là vô ích. IE Maintenance sẽ không sử dụng lại thiết lập trừ khi thứ gì đó trong policy (tức chính sách) bị thay đổi. Hoạt động này có thể là rất lộn xộn. Microsoft rõ ràng đã có một số điều gì đó khác trong mô hình “Policy Mode”.

Thi hành chính sách

Để các thiết lập trong chính sách (policy) được áp dụng đúng, chúng ta cùng nhìn xa hơn xuống các thiết lập “User Configuration” của Group Policy trong Windows Components, ở Administrative Templates.


Hình 4

Bên dưới Internet Explorer, bạn sẽ thấy có hai thiết lập: Disable changing proxy settings (không sử dụng các thiết lập proxy thay đổi) và Disable changing Automatic Configuration settings (không sử dụng các thiết lập cấu hình sự động thay đổi). Đánh dấu tích để cho phép cả hai tuỳ chọn này hoạt động (hoặc ít nhất là để chúng hoạt động sau).

Bạn có thể vào Internet Control Panel, cho phép tuỳ chọn Disable the Connections page (không dùng trang kết nối) để làm cho toàn bộ tab biến mất. Thiết lập này cũng được đặt trong “Computer Configuration” với quyền ưu tiên.

Nhưng sau khi các thay đổi trên hoạt động, thiết lập của bạn vẫn không an toàn khi có sự can thiệp của người khác như biên tập viên phần đăng ký. Và nên nhớ rằng chính sách của bạn sẽ không được áp dụng lại cho tới khi nào được thay đổi.

Thực sự thi hành chính sách!

Muốn thực hiện điều này, trước tiên bạn cần thay đổi các thiết lập “Computer Configuration” của Group Policy. Vào Administrative Templates, System và Group Policy để tìm Internet Explorer Maintenance policy processing.


Hình 5

Kích đúp để mở nó ra.


Hình 6

Ít nhất bạn cần chọn Process even if the Group Policy objects have not changed hoặc Do not apply during periodic background processing.

Lý do vì sao hoạt động này không trở thành mặc định: nếu bạn dùng IE Maintenance cho một số kiểu mở rộng, bạn chỉ muốn các thay đổi xuất hiện một lần, hoặc tệ hơn là 90 phút một lần với phần còn lại của Group Policy. Do đó hãy suy nghĩ thận trọng về việc dùng IE Maintenance như thế nào trước khi tiếp tục bước tiếp theo.

Tuỳ chọn Automatically detect settings

Để ý bạn sẽ thẩy rằng tuỳ chọn Automatically detect settings (tự động dò tìm các thiết lập) cùng với Use automatic configuration script (dùng kịch bản cầu hình tự động) được dùng xuyên suốt trong toàn bộ bài này. Bạn có thể sử dụng chúng luân phiên nếu muốn, nhưng có một số nguy hiểm khi làm điều đó.

Nếu đã từng hiện các bước hướng dẫn trong phần 1, chắc bạn đã tạo ra website có tên tương tự "wpad.company1.tld" dùng trong ví dụ này. Điểm quan trọng là website được gọi là "WPAD" tương ứng với cổng 80, và file được gọi "wpad.dat" (như đã nói trong phần 1). Khi đó, chọn Automatically detect settings, tất cả mọi việc sẽ được làm; trình duyệt của bạn sẽ bắt đầu tìm kiếm http://wpad/wpad.dat.

Một cách khác, cũng sử dụng hỗ trợ Automatically detect settings là phải có một điểm vào trong DHCP. Điểm vào "Option 252" này có định dạng kiểu http://wpad.company1.tld:80/wpad.dat. Điểm nâng cao ở đây là bạn có thể gọi file (và dẫn tới nó) bất cứ khi nào bạn thích và dùng bất cứ cổng TCP nào cho website bạn muốn. Nhưng cũng có một số hạn chế:

Trình duyệt sẽ tạo yêu cầu DHCP cho giá trị này. Nhưng trước Windows XP SP2 và 2003 SP1, chỉ có người quản trị (administrator) mới được phép thực hiện điều đó, còn các client (máy khách) thì không.

Và, liệu trình duyệt của bạn có được phép định vị điểm vào DHCP; có download thành công script hay không? Có lẽ cần Microsoft cần phải sửa chữa nóng (hotfix) một hoặc hai điểm ở đây.

Để hiểu sâu hơn về tuỳ chọn Automatically detect setttings, bạn nên tham khảo bài sau của Stefaan Pouseele (với các link cho các bản update và hotfix).

Còn bây giờ, bạn hoàn toàn nên sử dụng tuỳ chọn Use automatic configuration script.

Ngoại lệ

ISA Server thực hiện tốt công việc đem về nội dung trang Web từ các mạng mở rộng. Nhưng điều cuối cùng mà hầu hết chúng ta muốn là trình duyệt sẽ gửi các yêu cầu tới proxy cho trang Web nằm trên server Intranet nội bộ. Khi đó trình duyệt sẽ đi thẳng trực tiếp tới website.

ISA Server cho phép bạn cấu hình các "ngoại lệ" này và đêm một số điểm vào, đặt chúng trong file cấu hình tự động (PAC) nó tạo ra. Đó cũng chính là file chúng ta đã từng xem xét. Khi download file "wpad.dat", bạn sẽ thấy có một số ngoại lệ. Trong ví dụ sau bạn sẽ thấy ở các dòng đầu của file PAC, các ngoại lệ này chưa được cấu hình:

//Copyright (c) 1997-2004 Microsoft Corporation
BackupRoute="DIRECT";
UseDirectForLocal=true;
function MakeIPs(){
}
DirectIPs=new MakeIPs();
cDirectIPs=0;
function MakeNames(){
}
DirectNames=new MakeNames();
cDirectNames=0;

File PAC của chúng ta bây giờ "mồ côi" từ ISA Server và phải được chỉnh sửa lại "một cách thủ công". Các ngoại lệ có thể được cung cấp chỉ bằng vài dòng chỉnh sửa.

BackupRoute

Đây không thực sự là một ngoại lệ, chỉ là "phải làm gì nếu tất cả đều bị lỗi". Nếu tường lửa (hay cũng có thể là ISA Server) vẫn cho phép truy cập trực tiếp vào Internet để tìm kiếm nội dung Web hoặc cấu hình lại nhanh chóng khi gặp sự cố khẩn cấp thì "DIRECT" là lựa chọn tốt nhất ở đây.

Bạn có thể lựa chọn cấu hình Web proxy khác, có thể load trong tình trạng khẩn cấp. Định dạng của nó kiểu như sau:

BackupRoute=”PROXY W3PROXY.COMPANY1.LOCAL:8080“;

Tất nhiên bạn cần thay tên ở đây bằng tên riêng của bạn (hoặc địa chỉ IP) cùng với cổng được dùng. Do quan điểm xuyên suốt của bài là ghép cặp các ISA Server nhằm cung cấp "khoảng chấp nhận lỗi" (fault-tolerance) nên chúng tôi hi vọng phần định tuyến sao lưu này sẽ không bao giờ cần dùng đến.

UseDirectForLocal

Chắc chắn bạn muốn sử dụng tuỳ chọn này và nó có thể là tất cả "ngoại lệ" bạn cần. Điều này có nghĩa là bất kỳ URL với tên mienf đầy đủ điều kiện, hoặc tên host, không có các dấu chấm sẽ đến thẳng địa chỉ cần đến, không cần thông qua ISA Server, chẳng hạn:
http://www.isaserver.org/pages/newsletters.asp đi qua ISA server, nhưng http://myserver/intranet/index.html sẽ đến trực tiếp.

DirectIPs

Nếu bạn dùng địa chỉ IP để trỏ tới mạng Intranet, hoặc có link trong các trang Intranet tham chiếu tới địa chỉ IP, chắc chắn bạn sẽ muốn có một chút điều chỉnh ở đây. Ví dụ, có thể là:

function MakeIPs(){
this[0]="172.16.0.0";
this[1]="255.240.0.0";
}
DirectIPs=new MakeIPs();
cDirectIPs=2;

Một điểm quan trọng cần chú ý là các điểm vào đi theo cặp: một subnet và một mask (mạng con và mặt nạ). Giá trị "cDirectIPs" phản ánh cả hai điểm vào. Ở đây là 2, có nghĩa là điều chỉnh này chỉ cung cấp một điểm nào subnet (mạng con). Bạn có thể bổ sung thêm nhiều cặp, chỉ cần giữ số gia của các dòng "this[n]" và giá trị "cDirectIPs".

Đây là đoạn mã khá xấu, nhưng bạn sẽ không phải chính sửa nhiều về sau và cũng không cần căn chỉnh hay làm sạch đoạn mã để nó dễ đọc hơn.

DirectNames

Tuỳ chọn này hoạt động tương tự như "DirectIP". Ở đây, bạn sẽ lập danh sách tất cả tên host không muốn đi qua ISA Server.

function MakeNames(){
this[0]="intranet.company1.com”;
this[1]=”*.local”;
this[2]=”*.develservers.tld”;
}
DirectNames=new MakeNames();
cDirectNames=3;

Chú ý là bạn có thể mô tả các wildcard (ký tự đại diện) trong toàn bộ một domain, nhưng chỉ dùng wildcard lúc bắt đầu của tên. Ví dụ “www.company1.*” sẽ không hoạt động.

Các ngoại lệ CARP

Do trình duyệt dùng file PAC cho mọi yêu cầu URL nên nó sẽ dùng nhiều hơn một proxy cho các trang khác nhau trên cùng website. Một số website sẽ rất rối loạn khi có được các yêu cầu từ cùng một client, nhưng trên hai địa chỉ IP khác nhau.

Đây không phải là vấn đề nếu ISA Server của bạn ẩn sau một thiết bị "NATing" (tường lửa), nhưng sẽ trở thành vấn đề nghiêm trọng nếu các ISA Server Web-proxy cũng chính là vành đai tường lửa với giao diện IP chung.

Để tránh gặp vấn đề với các website này, trình duyệt phải ra lệnh gửi tất cả mọi yêu cầu tới các host cụ thể qua cùng một proxy. Trong phiên bản ISA Server Enterprise Edition, nó được mô tả như "các ngoại lệ CARP" (CARP exceptions). Các file PAC cũng sẽ có cùng tác động, yêu cầu phải bổ sung thêm một đoạn mã.

Bước đầu tiên là thêm một số dòng gần đầu file với giá trị "cDirectNames":

cDirectNames=0;
function MakeCARPExceptions(){
}
CARPExceptions=new MakeCARPExceptions();
cCARPExceptions=0;

Bước tiếp theo là thay thế hàm FindProxyForURL bằng các dòng sau (các thay đổi là màu đỏ):

function FindProxyForURL(url, host){
var urlhash, urllower, ibest, bestscore, list, i, j, port=HttpPort, hostonly=false;
urllower = url.toLowerCase();
if((urllower.substring(0,5)=="rtsp:") ||
(urllower.substring(0,6)=="rtspt:") ||
(urllower.substring(0,6)=="rtspu:") ||
(urllower.substring(0,4)=="mms:") ||
(urllower.substring(0,5)=="mmst:") ||
(urllower.substring(0,5)=="mmsu:"))
return "DIRECT";
if (UseDirectForLocal && isPlainHostName(host))
return "DIRECT";
if (cDirectNames > 0)
for (i = 0; i < cDirectNames; i++)
if (shExpMatch(host, DirectNames[i]))
return "DIRECT";
if (cDirectIPs > 0)
for (i = 0; i < cDirectIPs; i += 2)
if (isInNet(host, DirectIPs[i], DirectIPs[i+1]))
return "DIRECT";
if (cCARPExceptions > 0)
for (i = 0; i < cCARPExceptions; i++)
if (shExpMatch(host, CARPExceptions[i])) {
hostonly = true;
break;
}

urlhash = HashString(url, hostonly);
for (i = 0; i < cNodes; i++)
Proxies[i].score = Proxies[i].load * Scramble(MakeInt(urlhash ^ Proxies[i].hash));
list = "";
for (j = 0; j < cNodes; j++) {
for (bestscore = -1, i = 0; i < cNodes; i++) {
if (Proxies[i].score > bestscore) {
bestscore = Proxies[i].score;
ibest = i;
}
}
Proxies[ibest].score = -1;
list = list + "PROXY " + Proxies[ibest].name + ":" + port + "; ";
}
list = list + BackupRoute;
return list;
}

Cuối cùng, thay thế toàn bộ hàm:

function HashString(url, hostonly){
var h = 0;
var slashes = 0;
for (var i = 0; i < url.length; i++) {
var c = url.charAt(i);
if (c == '/')
slashes++;
if (slashes < 3) {
c = c.toLowerCase();
} else if (hostonly) {
i = url.length;
}

h += (((h & 0x1fff) << 19) | ((h >> 13) & 0x7ffff)) + CharToAscii(c);
h = MakeInt(h);
}
return h;
}

Kích hoạt đoạn mã theo cách tương tự tới "MakeNames", nhưng đưa ra danh sách tất cả các host name bạn muốn đi qua cùng ISA Server:

function MakeCARPExceptions(){
this[0]="crabby.website.tld";
this[1]="gripping.tld";
}
CARPExceptions=new MakeCARPExceptions();
cCARPExceptions=2;

Các thay đổi này được thực hiện với các thủ tục file PAC trong ISA Server Enterprise Edition. Nó có chức năng giống như vậy nhưng không giống mã nguồn. Nguyên nhân đầu tiên là ở vấn đề bản quyền, và thứ hai là không nên đưa quá nhiều dòng bổ sung vào phiên bản Enterprise Edition.

Các biến thể (chỉ dành cho những ai muốn thử nghiệm)

Có tuỳ chọn khác cho các thay đổi ngoại lệ CARP ở trên: chỉ cần thay thế hàm HashString bằng:

function HashString(url){
var h = 0;
var slashes = 0;
for (var i = 0; (i < url.length) && (slashes < 3); i++) {
var c = url.charAt(i);
if (c == '/')
slashes++;
h += (((h & 0x1fff) << 19) | ((h >> 13) & 0x7ffff)) + CharToAscii(c);
h = MakeInt(h);
}
return h;
}

Thay đổi dòng gọi hàm này trong FindProxyForURL thành:

urlhash = HashString(urllower);

Trong trường hợp này, tất cả yêu cầu về trang Web trên một hostname cụ thể sẽ đi qua cùng một proxy (ví dụ: tất cả yêu cầu đều là "CARP Exceptions"). Chúng ta chưa biết được tác động của phương thức này tới việc cân bằng tải (load-balancing) như thế nào, nhưng bạn có thể thử để tiết kiệm cho trình duyệt một tiến trình nào đó.

Có một số cách xử lý file PAC ISA Server khác, nhưng trong khuôn khổ của bài này chúng tôi chưa thể giới thiệu hết được.

CARP Client-side là gì?

Ở đây có một chút không thoải mái với thuật ngữ "client-side CARP". Chữ "P" là viết tắt của "Protocol" (giao thức). Như thế, khi bạn tạo file Proxy Automatic Configuration (cấu hình tự động proxy), điều này lại trở thành một giao thức? Cho đến nay, đây vẫn là một thuật ngữ được chấp nhận. Hy vọng các bạn sẽ không bị nhầm lẫn.

Kết luận

ISA Server 2004 Enterprise Edition thông thường là lựa chọn cho các Web proxy cân bằng tải (load-balancing) dùng ISA Server. Nhưng loạt bài này cũng chỉ ra rằng, nếu bạn chấp nhận một số điểm bất tiện không quan trọng lắm về file PAC trên ISA Server thì hiệu quả của cân bằng tải và khoảng chấp nhận lỗi (load-balancing và fault-tolerance) trên ISA 2004 Standard Edition là không thể phủ nhận.

Thứ Bảy, 03/02/2007 12:29
41 👨 2.227
0 Bình luận
Sắp xếp theo