您目前已離線,請等候您的網際網路重新連線

在 Windows Server 2008]、 [Windows Server 2008 R2 或 [Windows Server 2012 容錯移轉叢集中設定 IIS 7.0 (含) 以後的全球資訊網發行服務

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:970759
簡介
本文將告訴您如何設定 Windows Server 2008 或 Windows Server 2008 R2 的容錯移轉叢集中的 Microsoft Internet Information Services (IIS) 7.5 或 IIS 7.0。這份文件中的程序只適用於 「 全球資訊網發行服務。如需有關如何設定 「 FTP 發行服務容錯移轉叢集中的指示,請參閱:
974603 如何在 Windows Server 2008 容錯移轉叢集中設定 IIS 7.0 的 FTP 7.5
其他相關資訊
在舊版的網際網路資訊服務,Microsoft 會提供一般資源監視器支援元件使用 Microsoft 叢集基礎結構的高可用性網路伺服器執行個體。不過,自訂程式碼息怒完全實現這類解決方案的可能性。此外,Microsoft 所提供的泛型指令碼不符合客戶需求。若要設定 IIS 7.5 或 IIS 7.0,使用 Windows Server 容錯移轉叢集的叢集環境中,您必須使用自訂的 (指令碼) 程式碼來啟用高可用性案例。當您這麼做時,使用者可自訂的安裝程式,以符合其需求。這可讓他們高可用性的整合的 Web 應用程式的完整控制權。此外,指令碼介面管理與監控可帶來 IIS 7.5 和 IIS 7.0 提供更豐富的環境,比先前所提供的指令碼。

附註IIS 7.0 的安裝檔案不正確地包括 Clusweb.vbs 和 Clusftp.vbs 用於 IIS 的 IIS 6.0 的指令碼檔案叢集系統管理工作。請勿使用這些指令碼與 IIS 7.0 或更新版本。

Microsoft 建議系統管理員仔細評估的主要及慣用的方法,改善的擴展性和可用性的 Web 應用程式,以執行 IIS 7.5 或 IIS 7.0,而不是使用容錯移轉叢集的多個伺服器的網路負載平衡 (NLB) 使用。NLB 的好處是所有的伺服器可以主動參與內送 HTTP 要求的同步處理。另一個好處是在 NLB IIS 環境中,它可以更容易支援循環的更新與復原,同時又能提供高可用性的 Web 應用程式。如需有關如何使用 [NLB 環境中的 [IIS 7.5 或 IIS 7.0 的詳細資訊,請參閱下列 Microsoft 網站:請務必考慮藉由叢集的 IIS 服務叢集 IIS 並不保證一定能夠對 Web 應用程式的高可用性解決方案。當 IIS 服務 (特別是 WWW 服務) 可能會啟動且正在執行時,特定應用程式集區的裝載處理序可能已中止,,或是應用程式可能會擲回內部伺服器的 HTTP 錯誤。叢集的 Web 應用程式,並監視其健康情況,使用自訂指令碼是正確的以及建議方式達到高可用性 IIS 叢集中使用容錯移轉叢集。以下是 [範例指令碼,以監視應用程式集區來決定是否啟動與否的狀態。

若要設定 IIS 7.0 與 7.5 使用容錯移轉叢集的 Web 伺服器的高可用性,請依照下列步驟執行。下面更詳細地說明步驟 3 到 7。在本文稍後的範例指令碼可以用做為範例,IIS 7.0,IIS 7.5,和 IIS 8.0。
  1. 在所有叢集節點上安裝網頁伺服器角色。如需詳細資訊,請造訪下列 Microsoft 網站:
  2. 在所有叢集節點上安裝 [容錯移轉叢集] 功能,並建立叢集。如需詳細資訊,請造訪下列 Microsoft 網站:
  3. 設定 IIS 共用的設定適用於檔案共用。
  4. 在所有叢集節點上設定的 IIS 共用的組態。
  5. 在所有叢集節點上設定 IIS 離線共用組態檔。
  6. 設定 (包括相關聯的應用程式集區) 的網站,並指定一個叢集節點上其內容的位置。
  7. 藉由建立泛型指令碼,在 [容錯移轉叢集設定高可用性的網站。

設定共用的 IIS 設定適用於檔案共用

  1. 建立使用者可存取的 IIS 共用組態適用於共用。
  2. 建立檔案共享。這個共用將會用來儲存將 IIS 所有叢集節點之間共用的 IIS 共用的組態中。有多個選項:
  3. 您在步驟 2 中建立的共用上設定的權限。讓您在步驟 1 至檔案共用的完整控制權限與 NTFS 權限的使用者。
  4. 請確認所有叢集節點都都可以瀏覽至檔案共用。檔案共用路徑 \\<fileserver>\<share>.</share> </fileserver>

在所有叢集節點上設定 IIS 的共用的設定

附註沒有與 IIS 共用上設定 Windows 2008 伺服器因為缺少權限應用程式的主應用程式協助程式服務的問題。共用工作設定,您必須遵循這些步驟,當您設定 Windows 2008 伺服器上的 IIS 共用設定。
  1. 開啟 [系統管理的命令提示字元]。
  2. 請執行下列命令:
    net stop apphostsvc
  3. 請執行下列命令:
    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
  4. 請執行下列命令:
    net start apphostsvc
您完成在叢集中的每個 Windows 2008 伺服器上的這些步驟之後,繼續設定如所述的 IIS 共用設定在本章節中。

其中一個叢集節點上匯出至檔案共用的共用的設定:
  1. 瀏覽到 系統管理工具然後按一下 網際網路資訊服務 (IIS) 管理員.
  2. 在左窗格中,按一下 [伺服器名稱] 節點。
  3. 連按兩下 共用的設定 圖示。
  4. 在 [共用設定] 頁面上,按一下 匯出設定動作 若要從本機電腦的組態檔匯出至另一個位置的窗格 (右窗格)。
  5. 匯出設定 對話方塊中,輸入路徑的檔案共用 (\\<fileserver>\<share></share></fileserver>) 在 實體路徑 方塊中。
  6. 按一下 連線身份然後輸入使用者名稱和已在共用的存取權的使用者帳戶的密碼儲存共用的設定,然後再按一下 [確定].這個帳戶將用來存取共用中。您應該使用受限制的 Active Directory 帳戶不是網域系統管理員。
  7. 匯出設定 對話方塊中,輸入密碼,將用來保護加密金鑰,然後按一下 [確定].
  8. 在上 共用的設定 頁面上,按一下以選取 啟用共用的設定 核取方塊。
  9. 輸入的實體路徑、 使用者帳戶,並在過去,您所輸入的密碼,然後按一下 套用動作 窗格。
  10. 加密金鑰的密碼 對話方塊中輸入加密金鑰的密碼,您設定更早版本,然後按一下 [確定].
  11. 共用的設定 對話方塊中,按一下 [確定].
  12. 按一下 [確定].
在每一個其他叢集節點中,使用您剛才匯出的檔案共用來共用的設定:
  1. 瀏覽到 系統管理工具然後按一下 網際網路資訊服務 (IIS) 管理員.
  2. 按一下 [伺服器名稱] 節點。
  3. 連按兩下 共用的設定 圖示。
  4. 在上 共用的設定 頁面上,按一下以選取 啟用共用的設定 核取方塊。
  5. 輸入的檔案共用 (的實體路徑\\<fileserver>\<share></share></fileserver>),使用者帳戶和密碼之前,輸入,然後再按一下 套用動作 窗格。
  6. 加密金鑰的密碼 對話方塊中輸入加密金鑰的密碼,您設定更早版本,然後按一下 [確定].
  7. 共用的設定 對話方塊中,按一下 [確定].
  8. 按一下 [確定].
附註如需有關如何設定共用的組態,在 IIS 中的詳細資訊,請造訪下列 Microsoft 網站:

在所有叢集節點上設定 IIS 離線檔案的共用設定

在每個叢集節點上,啟用 [離線檔案:
  1. 安裝桌面體驗
    1. 瀏覽到 系統管理工具然後按一下 伺服器管理員.
    2. 在左窗格中,按一下 功能.
    3. 按一下 新增功能 在右窗格中。
    4. 按一下以選取 桌面體驗 核取方塊。
    5. 按一下 安裝 安裝桌面體驗。
    6. 重新啟動電腦。
  2. 在 [控制台] 中開啟 離線檔案.
  3. 按一下 啟用離線檔案.無法在此時重新開機。
  4. 確定快取] 設為唯讀。若要這樣做,請在提高權限的命令視窗中執行下列命令:
    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f 
  5. 重新啟動電腦。
  6. 從電腦瀏覽到檔案伺服器。包含共用的 IIS 共用的設定],以滑鼠右鍵按一下,然後按一下 永遠可離線瀏覽.
    附註如果您設定設為高度可用在相同的容錯移轉叢集上的檔案共用來主控 IIS 節點,所以永遠可離線瀏覽] 選項時不會顯示您按一下滑鼠右鍵在共用上如果您是在叢集節點主控高度可用的檔案伺服器。您必須將移到另一個節點的高可用的檔案伺服器應用程式。
  7. 在 [控制台] 中開啟 離線檔案.按一下 開啟 [同步中心然後按一下 排程.
  8. 每一天,或根據需求,請排定的離線檔案同步。您也可以設定離線同步處理,來執行每隔幾分鐘...即使您不要設定排程器,當您變更在 Applicationhost.config 檔案中的某些項目,則變更會反映在 Web 伺服器上。
附註如需有關如何在 IIS 中設定離線檔案共用的設定的詳細資訊,請造訪下列 Microsoft 網站:

設定 (包括相關聯的應用程式集區) 的網站,並指定一個叢集節點上其內容的位置

尋找叢集節點所擁有的叢集磁碟資源的 Web 站台的內容檔所在的位置:
  1. 瀏覽到 系統管理工具然後按一下 容錯移轉叢集管理員.
  2. 連線到叢集。如果您是在一個叢集節點上,則叢集會自動出現在清單上。
  3. 在下 存放裝置找出 Web 網頁內容所在的磁碟資源。若要這樣做,請展開儲存區樹狀目錄中的磁碟資源。請確認存放裝置並未由叢集上任何其他高可用性應用程式。您會發現下的儲存區 可用儲存空間.
  4. 請注意這項資源已上線的叢集節點。您會在該叢集節點上,設定 IIS。
  5. 請注意叢集磁碟資源的名稱。您將使用此內容的檔案。
在叢集節點資源已連線的情況下,設定要用於網站內容的共用的磁碟的 Web 伺服器:
  1. 瀏覽到 系統管理工具然後按一下 網際網路資訊服務 (IIS) 管理員.
  2. 在左窗格中,展開 [伺服器名稱] 節點。
  3. 展開 站台然後再按一下 站台按一下您要設定的網站。
  4. 在右窗格中,選取 進階的設定 在下 管理網站.
  5. 找出 實體路徑 在 [] 下的屬性 一般 設定],然後輸入在網站的內容檔的所在位置的位置。這是您在先前程序的步驟 5 中記下的叢集磁碟資源的位置。
  6. 按一下 [確定].

藉由建立泛型指令碼在 [容錯移轉叢集管理員] 中設定您的 Web 站台的高可用性

若要設定 IIS Web 伺服器的高可用性的最後一個步驟,設定將用來監視網站和 Web 站台的應用程式集區的一般指令碼資源中:
  1. 在每個叢集節點上,將 Windows\System32\inetsrv\Clusweb7.vbs 複製指令碼,在這份文件結尾處。
  2. 預設情況下,指令碼會監視分別命名為 「 預設的網站 」 和應用程式集區,名為"DefaultAppPool"的網站。如果這不是正確的 Web 站台和應用程式集區,變更網站名稱,並APP_POOL_NAME變數。請確定所有叢集節點上的同一個 Web 站台和指令碼中的應用程式集區存在。請注意,名稱會區分大小寫。
  3. 瀏覽到 系統管理工具然後按一下 容錯移轉叢集管理員.
  4. 連線到叢集。如果您是在一個叢集節點上,則叢集會自動出現在清單上。
  5. 叢集中,以滑鼠右鍵按一下,然後按一下 設定的服務或應用程式.精靈會建立高可用性的工作負載。
  6. 按一下 一般指令檔.
  7. 從下列路徑中選取的指令碼檔案: %systemroot%\System32\Inetsrv\clusweb7.vbs
  8. 設定用戶端存取點 (CAP) 名稱,用戶端將用來連線到高可用性的網站的 Web 站台名稱。指定靜態的 Ip 所使用的網站端點。如果您使用 DHCP,將不會顯示此選項。
  9. 在上 選定 [存放裝置 步驟中,選取網站內容檔所在的叢集共用的磁碟。存放裝置應該是由叢集上任何其他高可用性應用程式未使用的。請注意,如果檔案共用,適用於 IIS 共用的設定裝載於相同的叢集,應該在這裡使用不同的磁碟資源。
  10. 在確認設定值後,精靈會建立叢集群組、 叢集資源和資源間的相依性,然後使資源上線。
附註要裝載在相同的容錯移轉叢集上多個高可用性的網站,請依照上述相同的步驟。不過,在每個網站和不同的叢集共用存放裝置使用不同的指令碼檔案。比方說,在 %systemroot%\system32\inetsrv 用於第一個網站,第二個,第三個,clweb7-3.vbs 的 clweb7-2.vbs 的 clusweb7.vbs 等。不同的網站及應用程式集區,就會監視每個指令碼檔案。

重要以下的指令碼僅用於範例用途且未明確受到 Microsoft 的支援。使用此指令碼在 IIS 7.0、 IIS 7.5 或 IIS 8.0 的叢集環境中是自行承擔風險。
'<begin script sample>'This script provides high availability for IIS websites'By default, it monitors the "Default Web Site" and "DefaultAppPool"'To monitor another web site, change the SITE_NAME below'To monitor another application pool, change the APP_POOL_NAME below'More thorough and application-specific health monitoring logic can be added to the script if neededOption ExplicitDIM SITE_NAMEDIM APP_POOL_NAMEDim START_WEB_SITEDim START_APP_POOLDim SITES_SECTION_NAMEDim APPLICATION_POOLS_SECTION_NAMEDim CONFIG_APPHOST_ROOTDim STOP_WEB_SITE'Note:'Replace this with the site and application pool you want to configure high availability for'Make sure that the same web site and application pool in the script exist on all cluster nodes. Note that the names are case-sensitive.SITE_NAME = "Default Web Site"APP_POOL_NAME = "DefaultAppPool"START_WEB_SITE = 0START_APP_POOL = 0STOP_WEB_SITE  = 1SITES_SECTION_NAME = "system.applicationHost/sites"APPLICATION_POOLS_SECTION_NAME = "system.applicationHost/applicationPools"CONFIG_APPHOST_ROOT = "MACHINE/WEBROOT/APPHOST"'Helper script functions'Find the index of the website on this nodeFunction FindSiteIndex(collection, siteName)    Dim i    FindSiteIndex = -1        For i = 0 To (CInt(collection.Count) - 1)        If collection.Item(i).GetPropertyByName("name").Value = siteName Then            FindSiteIndex = i            Exit For        End If		     NextEnd Function'Find the index of the application pool on this nodeFunction FindAppPoolIndex(collection, appPoolName)    Dim i    FindAppPoolIndex = -1        For i = 0 To (CInt(collection.Count) - 1)        If collection.Item(i).GetPropertyByName("name").Value = appPoolName Then            FindAppPoolIndex = i            Exit For        End If		     NextEnd Function'Get the state of the websiteFunction GetWebSiteState(adminManager, siteName)    Dim sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod    Set sitesSection = adminManager.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)    Set sitesSectionCollection = sitesSection.Collection    index = FindSiteIndex(sitesSectionCollection, siteName)    If index = -1 Then        GetWebSiteState = -1    End If	        Set siteSection = sitesSectionCollection(index)    GetWebSiteState = siteSection.GetPropertyByName("state").ValueEnd Function'Get the state of the ApplicationPoolFunction GetAppPoolState(adminManager, appPool)    Dim configSection, index, appPoolState    set configSection = adminManager.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)    index = FindAppPoolIndex(configSection.Collection, appPool)    If index = -1 Then        GetAppPoolState = -1    End If	        GetAppPoolState = configSection.Collection.Item(index).GetPropertyByName("state").ValueEnd Function'Start the w3svc service on this nodeFunction StartW3SVC()    Dim objWmiProvider    Dim objService    Dim strServiceState    Dim response    'Check to see if the service is running    set objWmiProvider = GetObject("winmgmts:/root/cimv2")    set objService = objWmiProvider.get("win32_service='w3svc'")    strServiceState = objService.state    If ucase(strServiceState) = "RUNNING" Then        StartW3SVC = True    Else        'If the service is not running, try to start it        response = objService.StartService()        'response = 0  or 10 indicates that the request to start was accepted        If ( response <> 0 ) and ( response <> 10 ) Then            StartW3SVC = False        Else            StartW3SVC = True        End If    End If    End Function'Start the application pool for the websiteFunction StartAppPool()    Dim ahwriter, appPoolsSection, appPoolsCollection, index, appPool, appPoolMethods, startMethod, callStartMethod    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")    Set appPoolsSection = ahwriter.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)           Set appPoolsCollection = appPoolsSection.Collection    index = FindAppPoolIndex(appPoolsCollection, APP_POOL_NAME)    Set appPool = appPoolsCollection.Item(index)        'See if it is already started    If appPool.GetPropertyByName("state").Value = 1 Then        StartAppPool = True        Exit Function    End If    'Try To start the application pool    Set appPoolMethods = appPool.Methods    Set startMethod = appPoolMethods.Item(START_APP_POOL)    Set callStartMethod = startMethod.CreateInstance()    callStartMethod.Execute()        'If started return true, otherwise return false    If appPool.GetPropertyByName("state").Value = 1 Then        StartAppPool = True    Else        StartAppPool = False    End IfEnd Function'Start the websiteFunction StartWebSite()    Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")    Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)    Set sitesSectionCollection = sitesSection.Collection    index = FindSiteIndex(sitesSectionCollection, SITE_NAME)    Set siteSection = sitesSectionCollection(index)    if siteSection.GetPropertyByName("state").Value = 1 Then        'Site is already started        StartWebSite = True        Exit Function    End If    'Try to start site    Set siteMethods = siteSection.Methods    Set startMethod = siteMethods.Item(START_WEB_SITE)    Set executeMethod = startMethod.CreateInstance()    executeMethod.Execute()    'Check to see if the site started, if not return false    If siteSection.GetPropertyByName("state").Value = 1 Then        StartWebSite = True    Else        StartWebSite = False    End IfEnd Function'Stop the websiteFunction StopWebSite()    Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod, autoStartProperty    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")    Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)    Set sitesSectionCollection = sitesSection.Collection    index = FindSiteIndex(sitesSectionCollection, SITE_NAME)    Set siteSection = sitesSectionCollection(index)    'Stop the site    Set siteMethods = siteSection.Methods    Set startMethod = siteMethods.Item(STOP_WEB_SITE)    Set executeMethod = startMethod.CreateInstance()    executeMethod.Execute()End Function'Cluster resource entry points. More details here:'http://msdn.microsoft.com/en-us/library/aa372846(VS.85).aspx'Cluster resource Online entry point'Make sure the website and the application pool are startedFunction Online( )    Dim bOnline    'Make sure w3svc is started    bOnline = StartW3SVC()    If bOnline <> True Then        Resource.LogInformation "The resource failed to come online because w3svc could not be started."        Online = False        Exit Function    End If    'Make sure the application pool is started    bOnline = StartAppPool()    If bOnline <> True Then        Resource.LogInformation "The resource failed to come online because the application pool could not be started."        Online = False        Exit Function    End If    'Make sure the website is started    bOnline = StartWebSite()    If bOnline <> True Then        Resource.LogInformation "The resource failed to come online because the web site could not be started."        Online = False        Exit Function    End If    Online = true End Function 'Cluster resource offline entry point'Stop the websiteFunction Offline( )    StopWebSite()    Offline = trueEnd Function'Cluster resource LooksAlive entry point'Check for the health of the website and the application poolFunction LooksAlive( )    Dim adminManager, appPoolState, configSection, i, appPoolName, appPool, index    i = 0    Set adminManager  = CreateObject("Microsoft.ApplicationHost.AdminManager")    appPoolState = -1    'Get the state of the website    if GetWebSiteState(adminManager, SITE_NAME) <> 1 Then        Resource.LogInformation "The resource failed because the " & SITE_NAME & " web site is not started."        LooksAlive = false        Exit Function    End If    'Get the state of the Application Pool     if GetAppPoolState(adminManager, APP_POOL_NAME) <> 1 Then         Resource.LogInformation "The resource failed because Application Pool " & APP_POOL_NAME & " is not started."         LooksAlive = false  	 Exit Function     end if     '  Web site and Application Pool state are valid return true     LooksAlive = trueEnd Function'Cluster resource IsAlive entry point'Do the same health checks as LooksAlive'If a more thorough than what we do in LooksAlive is required, this should be performed hereFunction IsAlive()       IsAlive = LooksAliveEnd Function'Cluster resource Open entry pointFunction Open()    Open = trueEnd Function'Cluster resource Close entry pointFunction Close()    Close = trueEnd Function'Cluster resource Terminate entry pointFunction Terminate()    Terminate = trueEnd Function'<end script sample>

警告:本文為自動翻譯

內容

文章識別碼:970759 - 最後檢閱時間:03/18/2013 09:03:00 - 修訂: 4.0

Microsoft Internet Information Services 8.0, Microsoft Internet Information Services 7.5, Microsoft Internet Information Services 7.0, Windows Server 2012 Datacenter, Windows Server 2012 Standard, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Enterprise, Windows Server 2008 Service Pack 2, Windows Server 2008 Datacenter, Windows Server 2008 Enterprise

  • kbclustering kbhowto kbsurveynew kbmt KB970759 KbMtzh
意見反應