Tải bản đầy đủ (.pdf) (28 trang)

Cân bằng tải Web-Proxy Client với ISA Server 2004 Standard Edition pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (940.42 KB, 28 trang )

Cân bằng tải Web-Proxy Client với ISA Server 2004 Standard Edition phần 1
Ngu

n:quantrimang.com
Trong bài này chúng ta sẽ chỉnh sửa cấu hình script do ISA Server 2004
Standard Edition cung cấp và triển khai nó cho các máy khách trình duyệt.

Cân bằng tải các Web-proxy thường được hiểu là một trong số những chức
năng do ISA Server Enterprise Edition cung cấp. Nhưng với nhiều người, chi phí
phụ của Enterprise Edition (phiên bản doanh nghiệp) khiến họ phải lưỡng lự,
mặc dù mong muốn của các tổ chức hay công ty là luôn cần dư để dự trữ và cân
bằng tải. Cho
đến giờ phiên bản doanh nghiệp Standard Edition đã cung cấp một
số thủ thuật, bí quyết cho phép cân bằng tải. Nếu bạn có ý định sở hữu hai hoặc
ba ISA Server làm việc hiệu quả với nhau cùng một lúc, bài này có thể giúp bạn.

Giới thiệu

Với ISA Server 2004 (và cả 2000), nếu bạn muốn có nhiều hơn một server Web-
proxy cho tổ chức của mình và để chúng hoạt động hiệu quả cùng với nhau, bạn
nên ra ngoài và mua phiên b
ản Enterprise dành cho doanh nghiệp. Enterprise
Edition hỗ trợ Cache Array Routing Protocol (hay CARP) và cung cấp cơ chế liên
kết các proxy lại với nhau. Nhưng có thực sự rõ ràng? Nếu bạn chỉ có vài trăm
người dùng và phải chuẩn bị một lượng dư dự trữ Web-proxy lớn, bạn có thực
sự cần phải mất khoản chi phí thêm đáng kể cho cặp đôi bản quyền Enterprise?

Sự thật, người ta quan tâm đến CARP nhiều hơn là đọ
c về Enterprise Edition.
Một số khía cạnh của CARP vẫn còn được ẩn giấu trong Standard Edition chờ
bạn khám phá. Với hai hay ba server proxy trong "mảng", có thể bạn sẽ thấy


rằng mình tiết kiệm được nhiều khoản chi phí hiệu quả khi dùng Standard
Edition. Nếu nhiều hơn ba và giao thức không phải là CARP, bạn cần đến
Enterprise Edition. Phiên bản này quản lý trung tâm hơn và các thành phần
"Enterprise" khác được hỗ trợ.

Vậy, khi quyết định dùng hai Proxy để dự trữ, bạ
n muốn cả hai chia sẻ hoạt động
tải và tránh các khoản phụ phí, tính phức tạp của Enterprise Edition thì: các tuỳ
chọn là gì?

DNS Round-Robin và Network Load Balancing (NLB)

Cả hai cơ chế này có thể được dùng để cung cấp một số chức năng như khả
năng chịu sai sót (fault-tolerance) và cân bằng tải. Chắc chắn nhiều người sẽ
muốn thử chúng. Trong cả hai trường hợp bạn sẽ phải cấu hình một tên chung,
(nh
ư với NLB là một IP phổ biến) để trỏ tới tất cả server ISA. Trước Standard
Simpo PDF Merge and Split Unregistered Version -
Edition, Microsoft không hỗ trợ hệ thống NLB phức tạp hơn.

Bạn có thể cấu hình trình duyệt của mình sử dụng tên proxy chung một cách
trực tiếp, hoặc cấu hình "dò tìm tự động", "kịch bản cấu hình tự động". Các tuỳ
chọn "tự động" này có một số cải tiến khác biệt so với phương thức tĩnh, trong
đó bạn có thể mô tả đường định tuyến sao lưu khi mọi thứ
trở thành pear-
shaped.

Hãy thận trọng vì nếu bạn dùng các phương thức "tự động", trình duyệt sẽ
download file cấu hình từ một trong các Server ISA (được quyết định bởi NLB
hoặc round-robin) và file này sẽ nói với trình duyệt chỉ dùng proxy đó trong suốt

quá trình. Đây có thể không phải là cơ chế cân bằng tải mà bạn mong muốn! Để
vượt qua các lỗi nhanh hơn khi dùng phương thức "tự động", bạn có thể cấu
hình các thiết lập trên t
ừng Server ISA, sử dụng Server ISA khác như một cách
thức sao lưu. ISA Server sau đó sẽ bổ sung thông tin này vào file cấu hình các
trình duyệt nhận về.

Điểm hạn chế lớn của các phương thức này là mỗi ISA Server đều xây dựng
một cache riêng chứa thông tin vốn có trên ISA Server khác. Đây không phải là
một cách sử dụng tài nguyên hiệu quả.

Các file cấu hình tự động proxy (Proxy Automatic Configuration - PAC)

Nếu bạn cấu hình "dò tìm tự động" hoặc "kịch bản c
ấu hình tự động" trong trình
duyệt, file cấu hình không phải đến từ ISA Server. Nó có thể được trỏ tới vị trí
khác chứa "kịch bản" cấu hình tuỳ biến do bạn cung cấp mà không phải là ISA
Server. Phương thức này mở ra toàn bộ thế giới có thể cho khả năng cân bằng
tải và khả năng chịu sai sót.

Các kịch bản (script) cấu hình này là gì? Gần như mọi trình duyệt hiện nay đều
hỗ trợ mộ
t cách không bắt buộc việc sử dụng các script cấu hình tự động. Chúng
được viết trong JavaScript. Trình duyệt chạy chúng sẽ gọi các hàm cụ thể trong
script mỗi khi có đường dẫn URL tìm đến. Hàm sẽ trả lại Web-proxy cho trình
duyệt sắp gửi yêu cầu URL tới.

Vậy các script này cân bằng tải như thế nào? Phương thức phổ biến là script
chạy một thuật toán "hash" (thuật toán băm) trên URL được yêu cầu và dùng kết
quả có được từ

hàm băm đó để xác định Web-proxy nào sẽ gửi yêu cầu tới
(thuật toán trả ra xâu URL là một số duy nhất, gọi là số băm). Cải tiến tuyệt vời
của phương thức này là mỗi trình duyệt đều chạy cùng một hàm băm và xác
định cùng một Web-proxy cho đường dẫn URL được cung cấp một cách hoàn
chỉnh, tuỳ thuộc vào Web-proxy server. Điều này có nghĩa là các Web-proxy xây
dựng một cache duy nhất cho các "bạn" Web-proxy khác của nó. Vì thế, tài
Simpo PDF Merge and Split Unregistered Version -
nguyên được khai thác một cách hiệu quả.

Số lượng thuật toán băm được dùng không bị giới hạn. Đã có chuyên gia phát
triển mô hình "Super Proxy Script" từ hồi năm 1996, bạn có thể tham khảo thêm
tại địa chỉ: />. Nhưng với hầu hết mọi người, công
nghệ này thường được kết hợp với CARP.

Trong bài này chúng tôi sẽ khảo sát tỉ mỉ các script cấu hình tuỳ chọn dùng
CARP. Nghe có vẻ đáng sợ, nhưng bạn đừng lo, bất kỳ định kiến nào trước đó
về Enterprise Edition hỗ trợ CARP và Standard Edition note, tức ISA Server
Standard Edition sẽ được thay thế. Tất cả mọi việc 'đáng sợ' đều sẽ được th
ực
hiện tự động.

Cache Array Routing Protocol (CARP)

Như đã đề cập tới ở trên, người ta thường nói về CARP hơn là nhắc đến việc
bán phiên bản doanh nghiệp Enterprise Edition có chạy không. CARP gồm hai
kiểu: client-side CARP (trên máy khách) mà chúng ta đã thảo luận và server-side
CARP (trên máy chủ).

Server-side CARP


CARP này sử dụng cơ chế hàm băm tương tự (nếu không muốn nói là hoàn
toàn giống) với kiểu đã nói ở trên. Nhưng ở đây là dành cho máy ch
ủ để xác
định xem liệu nó có URL yêu cầu nào trong bộ nhớ phụ cache không, nếu không
thì "bạn" nào của nó có không? Điều này khá tuyệt vời cho máy khách nào yêu
cầu URL mà không hoặc sẽ không hỗ trợ client-side CARP (tức các client
"Secure NAT" trong bộ nói ISA Server), hay nếu server có các mảng proxy theo
hướng ngược lại và phải quyết định proxy lớn nhất để gửi yêu cầu tới.
Simpo PDF Merge and Split Unregistered Version -

ISA Server Enterprise Edition hỗ trợ server-side CARP nhưng bạn phải enable
sử dụng thành phần này. Phiên bản Standard Edition không hỗ trợ CARP server-
side.

Client-side CARP

Nếu một trình duyệt hỗ trợ client-side CARP thì bạn không phải vấn đề gì cho dù
Web proxy là Enterprise hay Standard Edition (hay thậm chí là ISA Server). Tuy
nhiên Enterprise Edition tạo các file cấu hình tự động với tất cả thành phần
client-sile CARP cần thiết đúng chỗ. Thậm chí nó làm việc này ngay cả khi bạn
không cho phép CARP trong cấu hình. Standard Edition cũng như vậy. Lỗi xuất
hiện trong Standard Edition là do nó không hi
ểu có 'đối tác' hay không, vì thế
không thể cấu hình thông tin cần thiết này trong script đã chuẩn bị.

Vì sao Microsoft không để cho phiên bản Standard Edition tạo mã client-side
CARP không chức năng trong các script cấu hình. Có nghĩa là, chỉ cần giúp đỡ
một chút, bạn có thể tạo được script đầy đủ chức năng.

Chúng ta hãy cùng xem xét script do ISA Server Standard Edition tạo ra này. Chỉ

cần mở trình duyệt, gõ: http://myISAServer:8080/wpad.dat (dùng tên server
của bạn). Ghi file khi được yêu cầu, sau đó mở nó trong một trình soạn thảo text
như Notepad.

Hãy xem các đoạn mã trong hộp thoại dưới đây:
//Copyright (c) 1997-2004 Microsoft Corporation
BackupRoute="DIRECT";
UseDirectForLocal=true;
function MakeIPs(){
}
DirectIPs=new MakeIPs();
cDirectIPs=0;
function MakeNames(){
}
DirectNames=new MakeNames();
cDirectNames=0;
HttpPort="8080";
cNodes=1;
function MakeProxies(){
this[0]=new Node("10.245.10.254",0,1.000000);
}
Simpo PDF Merge and Split Unregistered Version -
Proxies = new MakeProxies();
function Node(name, hash, load){
this.name = name;
this.hash = hash;
this.load = load;
this.score = 0;
return this;
}

function FindProxyForURL(url, host){
var urlhash, urllower, ibest, bestscore, list, i, j,
port=HttpPort;
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";
urlhash = HashString(url);
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 + ":" +
Simpo PDF Merge and Split Unregistered Version -
port + "; ";
}
list = list + BackupRoute;
return list;
}
function HashString(url){
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();
h += (((h & 0x1fff) << 19) | ((h >> 13) & 0x7ffff)) +
CharToAscii(c);
h = MakeInt(h);
}
return h;
}
function Scramble(h){
h += ((h & 0xffff) * 0x1965) + ((((h >> 16) & 0xffff) *
0x1965) << 16) + (((h & 0xffff) * 0x6253) << 16);
h = MakeInt(h);

h += (((h & 0x7ff) << 21) | ((h >> 11) & 0x1fffff));
return MakeInt(h);
}
var Chars =" !\"#$%&\'()*+,-
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdef
ghijklmnopqrstuvwxyz{|}~
??????????? ???????????? ? ĂÂÊÔƠƯĐăâêôơ-
đàảãáạằẳẵắặầẩẫấậèẻẽéẹềểễếệìỉĩíịòỏõóọồổỗ
ốộờởỡớợùủũúụừửữứựỳỷỹýỵ ";
function CharToAscii(c){
return Chars.indexOf(c) + 32;
}
function MakeInt(x){
if (x < 0) {
return x + 4294967296;
} else if (x >= 4294967296) {
return x - 4294967296;
}
return x;
Simpo PDF Merge and Split Unregistered Version -
}
Vậy đoạn mã trên mang lại điều gì? Trình duyệt của bạn được cấu hình vị trí của
script này sẽ download và thực thi nó. Script được chạy với mã với màu đỏ và
thiết lập một số biến mở rộng, chạy một số hàm (màu tím). Khi nào trình duyệt
cần yêu cầu một URL, nó sẽ gọi hàm FindProxyForURL (màu cam). Hàm này
trả ra một proxy server để gửi yêu cầu URL tới hoặc thông báo "DIRECT", tức là
không dùng Proxy cho URL này.

Tất cả
mã màu xanh là gì? FindProxyForURL gọi các hàm này để tạo bảng

băm từ URL và tính toán giá trị cho từng proxy nó biết. Hàm FindProxyForURL
thực tế trả ra một danh sách các proxy có mức điểm cao nhất ở đầu và hướng
sao lưu được cấu hình ở cuối. Trình duyệt sẽ dùng proxy có mức điểm cao nhất
này để gửi yêu cầu URL tới. Đó là hoạt động của client-side CARP.

Script đến từ ISA Server Standard Edition, vậy tất cả mã băm này dùng để
làm
gì? Hoàn toàn chẳng để làm gì cả! Nếu bạn xem kỹ phần bắt đầu, bạn sẽ thấy có
một hàm (màu tía) gọi là MakeProxies, lập danh sách ISA Server tạo ra script.
Chỉ có một proxy được lập danh sách ở đây, vì thế script phải luôn luôn trả lại
proxy. Như chúng ta đã biết, Microsoft thích dùng các bộ vi xử lý để chạy toàn bộ
các mã không cần thiết. Trong ví dụ này, trình duyệt nghèo nàn của chúng ta đã
thực thi phần lớn các mã không dùng đến trong toàn bộ thời gian yêu c
ầu URL,
có lẽ là một vài lần cho một trang Web. Sự trợ giúp nhỏ nhưng không cần thiết
với chúng ta song họ không có ý định ngừng lại!

Tạo một script cấu hình tuỳ chọn cơ bản

Mặc dù có vẻ khó, nhưng bạn hoàn toàn có thể làm được. Tất nhiên vấn đề thực
sự là lấy được script kết quả ra từ trình duyệt trên client nhưng chúng ta sẽ quan
tâm đến nó sau. Chúng ta cũng sẽ đề cậ
p đến các vấn đề chỉnh sửa thông minh
ở phần 2, còn bây giờ chỉ tạo một script chức năng cơ bản.

Hãy cùng xem các dòng sau trong script download được từ ISA Server:
cNodes=1;
function MakeProxies(){
this[0]=new Node("10.245.10.254",0,1.000000);
}

"10.245.10.254" là địa chỉ ISA Server của chúng tôi lấy trong ví dụ minh hoạ này.
Khi bạn thực hiện, địa chỉ IP này sẽ được thay thế bằng địa chỉ ISA Server riêng
của bạn. Có thể bạn sẽ có tên miền đáp ứng được đầy đủ
điều kiện nữa, cả hai
Simpo PDF Merge and Split Unregistered Version -
đều tốt.

Bây giờ hãy sửa các dòng sau, gồm cả ISA Server thứ hai của bạn.
cNodes=2;
function MakeProxies(){
this[0]=new Node("10.245.10.254",2032180928,1.000000);
this[1]=new Node("10.245.10.253",2843172549,1.000000);
}
Có một vài con số nghe chừng có vẻ khó hiểu. Chúng được thêm vào để thuật
toán băm chọn proxy hoặc một lựa chọn khác trong khoảng 50/50 kiểu, tuỳ thuộc
vào URL yêu cầu. Ở phần sau chúng ta sẽ tìm hiểu các con số đó đến từ đâu,
còn bây giờ thì cứ tạm công nhận để dùng.

Cổng HTTP

Xem kỹ lại, bạn sẽ thấy dòng tương tự như thế này:
HttpPort="8080";
Thông số này nói rằng, cổng các Server ISA của bạn đang nghe yêu cầu proxy
là 8080. Chỉ có một điểm vào, có nghĩa là tất cả các nút phải được cấu hình
dùng cùng một cổng. Cổng "8080" được đặt mặc định và ít khi cần phải thay đổi
nó.

Triển khai một script cấu hình tuỳ chọn

Có hai cơ chế

đưa script vào trình duyệt trên client: hoặc là cấu hình chúng dùng
chức năng "dò tìm tự động", hoặc là cung cấp vị trí cho "script cấu hình tự động".
Trước đó, bạn cần đưa script của mình lên một website phù hợp mà trình duyệt
của bạn có thể truy cập tới.

Nếu muốn có các proxy dư để dự trữ, bạn cần website dư để đặt file cấu hình
hoặc có một điểm lỗi đơn. Để minh hoạ
một cấu hình cần thiết, chúng ta sẽ thực
hiện từng bước bằng cách tạo một website IIS đơn. Nhưng bạn hoàn toàn có thể
dùng website Intranet fault-tolerant hoặc bất kỳ hình thức phù hợp nào khác.

Đầu tiên là tạo mới một website IIS Manager:
Simpo PDF Merge and Split Unregistered Version -

Bước tiếp theo trong Web Site Creation Wizard là cung cấp cho website một tên
mô tả. Ở đây tôi dùng tên WPAD.

Trong trang tiếp theo bạn có thể đưa ra một địa chỉ IP cụ thể (hoặc để nó lại như
ở đây). Bạn nên gắn địa chỉ IP này với cổng 80 vì có một thành phần tự động
phát hiện cần cổng này (chúng ta sẽ thảo luận trong phần hai). Một host header
là cần thiết vì cổng 80 có thể được chia sẻ bở
i các server ảo khác.
Simpo PDF Merge and Split Unregistered Version -

Nhớ rằng bạn phải có giải pháp DNS (hệ thống tên miền) ở mọi địa chỉ dùng cho
host-header. Có thể bạn sẽ có hai điểm vào trỏ tới hai website (DNS round-
robin) hoặc trỏ bản ghi tới một cân bằn tải IP ảo hoặc nếu không thì dùng bất cứ
kỹ thuật chiếm website fault-toterlant nào bạn có được.

Theo đó, bạn cần cung cấp vị trí cho file và chú ý là website này phải cho phép

truy cập nặc danh. Trang Wizard tiếp theo sau là các quyền truy cậ
p. Với
website này bạn chỉ cần quyền đọc - "Read" (không cần script, thực thi hay ghi).
Simpo PDF Merge and Split Unregistered Version -

Trong phần kết thúc Wizard sẽ hoàn chỉnh cấu hình thiết yếu cho website. Vấn
đề sau đó chỉ là copy script cấu hình của bạn vào vị trí phù hợp (ở đây là
C:\Inetpub\wpadroot) và đảm bảo tài khoản truy cập nặc danh (thường là
IUSR_Servername) đã đọc quyền truy cập vào vị trí file này.
Simpo PDF Merge and Split Unregistered Version -

Bạn nên kiểm tra lại toàn bộ bằng cách đưa đường dẫn tới file và download nó
(trong ví dụ này đường dẫn URL sẽ là al/wpad.dat).

Tôi đặt tên cho script cấu hình là WPAD.DAT mặc dù không có yêu cầu nào đòi
hỏi bạn phải gọi như thế.

Cấu hình Internet Explorer để dùng các Configuration Script

Cấu hình Internet Explorer một cách "thủ công" để dùng file cấu hình không mấy
khó khăn. Bắt đầu bằng việc chọn thành phần Internet Options trên menu
Tools.

Chúng ta cầ
n tuỳ chọn Lan Settings, được tìm thấy ở trang Connections.
Simpo PDF Merge and Split Unregistered Version -

Nhập đường dẫn URL trỏ tới file WPAD.DAT bạn đã tạo và kích OK.

Kết thúc. Trỏ đường dẫn tới một website Internet và trình duyệt sẽ bắt đầu dùng

script cấu hình để chọn proxy gửi yêu cầu tới, như thế này:
Simpo PDF Merge and Split Unregistered Version -

Có lẽ tôi đã cấu hình ISA Server của mình theo đúng quy tắc, nhưng không gì
chứng minh rõ ràng nhất rằng bạn sẽ thông qua một ISA Server bằng trang nhỏ
này.

Tất nhiên, nếu có tới 100 máy khách, chắc chắn bạn sẽ không muốn phải cấu
hình "một cách thủ công" các trình duyệt này. Group Policy là lựa chọn tốt cho
bạn. Nhưng chúng ta sẽ thảo luận tiếp trong phần hai. Cũng trong phần hai
chúng ta sẽ xem xét các tuỳ chọn cấu hình tự động khác (Automatically detect
settings
), nhưng xin được báo trước là sẽ có một số tranh cãi về vấn đề này.

Kết luận

Trong bài này chúng ta đã chỉnh sửa script cấu hình do ISA Server 2004
Standard Edition cung cấp và triển khai nó cho các client brower. Kết quả là có
hai hay nhiều hơn ISA Server Standard Edition Web proxy có thể cân bằng tải
hiệu quả, dùng client-side CARP. Nếu một ISA Server proxy bị mất, nó sẽ được
chuyển đổi qua các "bạn" của mình một cách nhanh chóng.

Phần thông tin trên đây là tất cả những gì bạn cầ
n để lắp đặt và chạy. Trong
phần hai chúng ta sẽ xem xét tới một số chỉnh sửa nâng cao hơn của các script
custom (kịch bản tuỳ chọn). Chúng tôi sẽ minh hoạ một số thay đổi "thủ công" ở
các thành phần khác trong script vì ISA Server sẽ không làm gì với chúng hơn
nữa. Chúng tôi cũng sẽ giới thiệu khái niệm "CARP Exception", một thành phần
trong Enterprise Edition để giúp bạn tránh các vấn đề gặp hải với một số
website.


Simpo PDF Merge and Split Unregistered Version -
Nhưng trước khi kết thúc, các bạn nên…

Tính toán giá trị băm cho các nút Proxy

Nếu nhớ, bạn sẽ thấy có hai con số "ma thuật" được nhập trong script mà thuật
toán băm sẽ dùng để đảm bảo mỗi ISA Server có được sự chia sẻ công bằng khi
load. Các số này là 2032180928 và 2843172549. Thực tế, chúng ta chưa thể
biết được các số này được tính toán ra từ đâu.

Tôi đã thử nghiệm, cài đặt phiên bản 120 ngày của ISA Server 2004 Enterprise
Edition lên một số
máy ảo và kiểm tra giá trị trong file WPAD.DAT download từ
một trong các server. Tuy có phần mang tính chất "gian lận", nhưng lại rất hiệu
quả!
Bạn có thể dùng một số thủ thuật để thăm dò các giá trị khác trong script, nhưng
bạn không thể cài đặt được ISA Server 2004 Service Pack 2. SP2 giới thiệu các
thay đổi trong Enterprise Edition, gồm cả thuật toán băm nâng cao trong script
cấu hình. Vì vậy, bạn nên dùng các phiên bản trước SP2 để đỡ phải đau đầu với
thay đổi củ
a nó.

Dù sao thì, con số "ma thuật" của ISA Server trong mảng 3804533832 và các số
khác vẫn giống như vậy.

Simpo PDF Merge and Split Unregistered Version -
Cân bằng tải Web-Proxy Client với ISA Server 2004 Standard Edition (Phần
2)
Ngu


n:quantrimang.com
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.

Simpo PDF Merge and Split Unregistered Version -
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.
Simpo PDF Merge and Split Unregistered Version -
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.
Simpo PDF Merge and Split Unregistered Version -

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

Simpo PDF Merge and Split Unregistered Version -
Để 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.
Simpo PDF Merge and Split Unregistered Version -

Hình 5
Kích đúp để mở nó ra.

Simpo PDF Merge and Split Unregistered Version -
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
: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
Simpo PDF Merge and Split Unregistered Version -
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“;
Simpo PDF Merge and Split Unregistered Version -
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:
đ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”;
Simpo PDF Merge and Split Unregistered Version -
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:") ||
Simpo PDF Merge and Split Unregistered Version -

×