Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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ỉ: http://naragw.sharp.co.jp/sps/. 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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

(cid:1)

??????????? Ž ???????????? ž? ¡¢£¤¥¦§¨©ª«¬-

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 - http://www.simpopdf.com

}

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 - http://www.simpopdf.com

đề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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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à http://wpad.company1.local/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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

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 - http://www.simpopdf.com

Để 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 - http://www.simpopdf.com

Hình 5

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

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

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

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

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 - http://www.simpopdf.com

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”;

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.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:") ||

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

(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; }

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

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;

Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com

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.