Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du konfigurerar Microsoft Internet Information Services (IIS) World Wide Web Publishing Service (W3SVC) i ett Windows Server-redundanskluster (WSFC).
Ursprunglig produktversion: Windows Server 2008 och senare versioner, Internet Information Services 8.0 och senare versioner
Ursprungligt KB-nummer: 970759
Introduktion
Procedurerna i den här artikeln gäller endast för World Wide Web Publishing Service. Anvisningar om hur du konfigurerar FTP-publiceringstjänsten i ett redundanskluster finns i Konfigurera FTP för IIS i ett Windows Server-redundanskluster.
Mer information
I tidigare versioner av Internet Information Services tillhandahöll Microsoft allmänna resursövervakarkomponenter för att stödja webbserverinstanser med hög tillgänglighet med hjälp av Microsoft Clustering-infrastrukturen. Anpassad kod behövdes dock för att fullt ut förverkliga potentialen i en sådan lösning. De allmänna skript som Microsoft tillhandahöll uppfyllde inte heller kundernas behov. Om du vill konfigurera IIS 7.0 eller en senare version i en klustrad miljö som använder Windows Server-redundanskluster måste du använda en anpassad kod (skript) för att aktivera ett sådant scenario med hög tillgänglighet. När du gör det kan användarna anpassa konfigurationen så att den uppfyller deras krav. vilket ger dem fullständig kontroll över integreringen av webbprogram med hög tillgänglighet. Dessutom ger skriptgränssnitten för administration och övervakning som introducerades i IIS 7.0 en rikare miljö än de skript som angavs tidigare.
Kommentar
Installationsfilerna i IIS 7.0 innehåller felaktigt skriptfilerna Clusweb.vbs och Clusftp.vbs som används i IIS 6.0 för administrativa uppgifter i IIS-kluster. Använd inte dessa skript med IIS 7.0 eller en senare version.
Vi rekommenderar att administratörer noggrant utvärderar användningen av nätverksbelastningsutjämning (NLB) som den primära och bästa metoden för att förbättra skalbarheten och tillgängligheten för webbprogram med flera servrar som kör IIS 7.0 eller en senare version, i stället för att använda redundanskluster. En av fördelarna med NLB är att alla servrar aktivt kan delta i samtidig hantering av inkommande HTTP-begäranden (HyperText Transfer Protocol). En annan fördel är att det i en NLB IIS-miljö kan vara mycket enklare att stödja löpande uppdateringar och återställningar samtidigt som det ger hög tillgänglighet för webbprogram. Mer information om hur du använder IIS 7.0 eller en senare version i en NLB-miljö finns i följande artiklar:
Det är viktigt att tänka på att klustring av IIS genom klustring av IIS-tjänsterna inte alltid garanterar en lösning med hög tillgänglighet för webbprogram. Även om IIS-tjänsterna (särskilt WWW-tjänsten) kan vara igång, kan en specifik programpools värdprocess ha avslutats eller så kan programmet utlösa interna HTTP-fel på servern. Att klustra webbprogrammen och övervaka deras hälsa med hjälp av ett anpassat skript är det rätta och rekommenderade sättet att uppnå ett IIS-kluster med hög tillgänglighet med hjälp av redundanskluster. Nedan visas ett exempelskript som övervakar tillståndet för en programpool för att avgöra om den har startats eller inte.
Följ dessa steg för att konfigurera hög tillgänglighet för IIS 7.0 eller en senare version av webbservern med hjälp av redundanskluster. Steg 3 till 7 beskrivs mer detaljerat nedan. Exempelskriptet senare i den här artikeln kan användas som exempel för IIS 7.0 eller en senare version.
- Installera webbserverrollen på alla klusternoder. Mer information finns i distributionsguiden för IIS 7.
- Installera funktionen för redundanskluster på alla klusternoder och skapa klustret. Mer information finns i Distributionsguide för redundanskluster.
- Konfigurera en filresurs som ska användas för den delade IIS-konfigurationen.
- Konfigurera den delade IIS-konfigurationen på alla klusternoder.
- Konfigurera offlinefiler för IIS för delad konfiguration på alla klusternoder.
- Konfigurera webbplatsen (inklusive den associerade programpoolen) och ange platsen för dess innehåll på en klusternod.
- Konfigurera hög tillgänglighet för webbplatsen genom att skapa ett allmänt skript i redundansklustring.
Konfigurera en filresurs som ska användas för delad IIS-konfiguration
- Skapa en användare som kommer åt resursen som ska användas för den delade IIS-konfigurationen.
- Skapa filresursen. Den här resursen används för att lagra den delade IIS-konfigurationen som ska delas mellan IIS på alla klusternoder. Det finns flera alternativ:
- Skapa en filresurs på en fristående server som inte ingår i något redundanskluster.
- Skapa en filresurs med hög tillgänglighet i ett annat Windows Server-redundanskluster. Mer information finns i Stegvis guide för redundanskluster: Konfigurera ett redundanskluster med två noder.
- På samma redundanskluster som ska vara värd för webbplatsen för hög tillgänglighet skapar du en filresurs med hög tillgänglighet. Mer information finns i Stegvis guide för redundanskluster: Konfigurera ett redundanskluster med två noder.
- Ange behörigheter för den resurs som du skapade i steg 2. Ge användaren som du skapade i steg 1 Fullständig behörighet till filresursen och NTFS-behörigheterna.
- Bekräfta att alla klusternoder kan bläddra till filresursen. Sökvägen till filresursen är
\\<fileserver>\<share>
.
Konfigurera den delade IIS-konfigurationen på alla klusternoder
Kommentar
Det är problem med delad IIS-konfiguration på Windows 2008 Server på grund av att behörighet saknas för Application Host Helper Service
. För att den delade konfigurationen ska fungera måste du följa de här stegen när du konfigurerar delad IIS-konfiguration på Windows 2008 Server.
Öppna en administrativ kommandotolk.
Kör följande kommando:
net stop apphostsvc
Kör följande kommando:
sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
Kör följande kommando:
net start apphostsvc
När du har slutfört de här stegen på varje Windows 2008 Server i klustret fortsätter du att konfigurera delad IIS-konfiguration enligt beskrivningen i det här avsnittet.
Exportera den delade konfigurationen till filresursen på en av klusternoderna:
- Gå till Administrationsverktyg och välj sedan IIS-hanteraren (Internet Information Services).
- I den vänstra rutan väljer du noden servernamn .
- Dubbelklicka på ikonen Delad konfiguration .
- På sidan Delad konfiguration väljer du Exportera konfiguration i åtgärdsfönstret (den högra rutan) för att exportera konfigurationsfilerna från den lokala datorn till en annan plats.
-
I dialogrutan Exportera konfiguration skriver du sökvägen till filresursen (
\\<fileserver>\<share>
) i rutan Fysisk sökväg. - Välj Anslut som och skriv sedan användarnamnet och lösenordet för användarkontot som har åtkomst till resursen där den delade konfigurationen lagras och välj sedan OK. Det här kontot används för att komma åt resursen. Du bör använda ett begränsat Active Directory-konto som inte är domänadministratör.
- I dialogrutan Exportera konfiguration skriver du ett lösenord som ska användas för att skydda krypteringsnycklarna och väljer sedan OK.
- På sidan Delad konfiguration markerar du kryssrutan Aktivera delad konfiguration .
- Skriv den fysiska sökvägen, användarkontot och lösenordet som du angav tidigare och välj sedan Använd i fönstret Åtgärder .
- I dialogrutan Lösenord för krypteringsnycklar skriver du lösenordet för krypteringsnyckeln som du angav tidigare och väljer sedan OK.
- I dialogrutan Delad konfiguration väljer du OK.
- Välj OK.
På var och en av de andra klusternoderna använder du den delade konfiguration som du just exporterade till filresursen:
- Gå till Administrationsverktyg och välj sedan IIS-hanteraren (Internet Information Services).
- Välj noden servernamn.
- Dubbelklicka på ikonen Delad konfiguration .
- På sidan Delad konfiguration markerar du kryssrutan Aktivera delad konfiguration .
- Skriv den fysiska sökvägen för filresursen (
\\<fileserver>\<share>
), användarkontot och lösenordet som du angav tidigare och välj sedan Använd i fönstret Åtgärder . - I dialogrutan Lösenord för krypteringsnycklar skriver du lösenordet för krypteringsnyckeln som du angav tidigare och väljer sedan OK.
- I dialogrutan Delad konfiguration väljer du OK.
- Välj OK.
Kommentar
Mer information om hur du konfigurerar delade konfigurationer i IIS finns i Delad konfiguration.
Konfigurera offlinefiler för IIS för delad konfiguration på alla klusternoder
Aktivera Offlinefiler på varje klusternod:
Installera skrivbordsmiljön
- Gå till Administrationsverktyg och välj sedan Serverhanteraren.
- I den vänstra rutan väljer du Funktioner.
- Välj Lägg till funktioner i den högra rutan.
- Gör något av följande, efter behov för din Windows-version:
- För Windows Server 2016 går du till Installera server med skrivbordsmiljö.
- För Windows Server 2012 och 2012 R2 väljer du Skrivbordsmiljö under Användargränssnitt och infrastrukturer i funktionslistan.
- För Windows Server 2008 och 2008 R2 väljer du Skrivbordsmiljö.
- Välj Installera för att installera Skrivbordsmiljö.
- Starta om datorn.
Gör något av följande:
- För Windows Server 2012, 2012 R2 och 2016 väljer du Sync Center i Kontrollpanelen och sedan Hantera offlinefiler.
- För Windows Server 2008 och 2008 R2 väljer du Offlinefiler i Kontrollpanelen.
Välj Aktivera offlinefiler. Starta inte om datorn just nu.
Kontrollera att cacheminnet är skrivskyddat. Kör följande kommando i en upphöjd cmd-prompt för att göra det:
REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
Starta om datorn.
Bläddra till filservern från datorn. Högerklicka på resursen som innehåller den delade IIS-konfigurationen och välj sedan Always Available Offline (Alltid tillgänglig offline).
Kommentar
Om du konfigurerar filresursen så att den är högtillgänglig i samma redundanskluster som är värd för IIS-noder visas inte alternativet Alltid tillgänglig offline när du högerklickar på resursen om klusternoden som du är på är värd för den filserver med hög tillgänglighet. Du måste flytta det högtillgängliga filserverprogrammet till en annan nod.
Öppna Offlinefiler i Kontrollpanelen. Välj Öppna Synkroniseringscenter och välj sedan Schemalägg.
Schemalägg en offlinefilsynkronisering för varje dag eller enligt dina krav. Du kan också konfigurera offlinesynkroniseringen så att den körs med några minuters mellanrum. Även om du inte konfigurerar en schemaläggare visas ändringen på webbservern när du ändrar något i filen Applicationhost.config .
Kommentar
Mer information om hur du konfigurerar offlinefiler för en delad konfiguration i IIS finns i Offlinefiler för delad konfiguration.
Konfigurera webbplatsen och ange platsen för dess innehåll på en klusternod
Leta reda på klusternoden som äger klusterdiskresursen där webbplatsinnehållsfilerna finns:
- Gå till Administrationsverktyg och välj sedan Klusterhanteraren för växling vid fel.
- Anslut till klustret. Om du är på en av klusternoderna visas klustret automatiskt i listan.
- Under Lagring letar du reda på diskresursen som webbplatsinnehållet ska finnas på. Om du vill göra det expanderar du lagringsträdet för diskresursen. Kontrollera att lagringen inte används av något annat program med hög tillgänglighet i klustret. Du hittar lagringen under Tillgänglig lagring.
- Klusternoden där den här resursen är online. Du konfigurerar IIS på den klusternoden.
- Namnet på klusterdiskresursen.
Du använder detta för innehållsfilerna. På klusternoden där resursen är online konfigurerar du webbservern så att den använder den delade disken för webbplatsinnehåll:
- Gå till Administrationsverktyg och välj sedan IIS-hanteraren (Internet Information Services).
- Expandera noden servernamn i den vänstra rutan.
- Expandera Webbplatser och välj sedan den webbplats som du konfigurerar under Webbplatser.
- I den högra rutan väljer du Avancerade inställningar under Hantera webbplats.
- Leta upp egenskapen Fysisk sökväg under Allmänna inställningar och skriv sedan platsen där webbplatsinnehållsfilerna finns. Det är platsen för klusterdiskresursen som du antecknade i steg 5 i föregående procedur.
- Välj OK.
Konfigurera hög tillgänglighet för din webbplats genom att skapa ett allmänt skript i Klusterhanteraren för växling vid fel
I det sista steget för att konfigurera hög tillgänglighet för IIS-webbservrar konfigurerar du den allmänna skriptresurs som ska användas för att övervaka webbplatsen och programpoolen för webbplatsen:
På varje klusternod kopierar du skriptet som anges i slutet av den här artikeln till
Windows\System32\inetsrv\Clusweb7.vbs
.Skriptet övervakar som standard en webbplats med namnet Standardwebbplats och en programpool med namnet DefaultAppPool. Om dessa inte är rätt webbplats och programpool ändrar du variablerna
SITE_NAME and APP_POOL_NAME
. Kontrollera att samma webbplats och programpool i skriptet finns på alla klusternoder.Kommentar
Namnen är skiftlägeskänsliga.
Gå till Administrationsverktyg och välj sedan Klusterhanteraren för växling vid fel.
Anslut till klustret. Om du är på en av klusternoderna visas klustret automatiskt i listan.
Gör något av följande:
- För Windows Server 2012, 2012 R2 och 2016 högerklickar du på Roller och väljer sedan Konfigurera roll för att skapa den.
- För Windows Server 2008 och 2008 R2 högerklickar du på klustret och väljer sedan Konfigurera en tjänst eller ett program. En guide skapar arbetsbelastningen med hög tillgänglighet.
Välj Allmänt skript.
Välj skriptfilen från
%systemroot%\System32\Inetsrv\clusweb7.vbs
.Ange namnet på klientåtkomstpunkten (CAP) till det webbplatsnamn som klienter ska använda för att ansluta till webbplatsen med hög tillgänglighet. Ange de statiska IP-adresser som ska användas för webbplatsens CAP. Om du använder DHCP (Dynamic Host Configuration Protocol) visas inte det här alternativet.
I steget Välj lagring väljer du den klusterdelade disk där webbplatsinnehållsfilerna finns. Lagringen bör inte användas av andra program med hög tillgänglighet i klustret.
Kommentar
Om filresursen som används för den delade IIS-konfigurationen finns i samma kluster bör en annan diskresurs användas här.
När du har bekräftat inställningarna skapar guiden klustergruppen, klusterresurserna och beroendena mellan resurserna och ansluter sedan resurserna.
Kommentar
Följ samma steg som ovan för att vara värd för flera webbplatser med hög tillgänglighet i samma redundanskluster. Använd dock en annan skriptfil för varje webbplats och olika klustrad delad lagring. I använder du till exempel
%systemroot%\System32\Inetsrv
clusweb7.vbs för den första webbplatsen clweb7-2.vbs för den andra, clweb7-3.vbs för den tredje och så vidare. Varje skriptfil övervakar olika webbplatser och programpooler.
Följande skript är endast i exempelsyfte och stöds inte uttryckligen av Microsoft. Användning av det här skriptet i en IIS 7.0- eller senare versionsklustermiljö är på egen risk.
'<begin script sample>
'This script provides high availability for IIS websites
'By default, it monitors the "Default Web Site" and "DefaultAppPool"
'To monitor another website, 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 needed
Option Explicit
DIM SITE_NAME
DIM APP_POOL_NAME
Dim START_WEB_SITE
Dim START_APP_POOL
Dim SITES_SECTION_NAME
Dim APPLICATION_POOLS_SECTION_NAME
Dim CONFIG_APPHOST_ROOT
Dim STOP_WEB_SITE
'Note:
'Replace this with the site and application pool you want to configure high availability for
'Make sure that the same website 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 = 0
START_APP_POOL = 0
STOP_WEB_SITE = 1
SITES_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 node
Function 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
Next
End Function
'Find the index of the application pool on this node
Function 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
Next
End Function
'Get the state of the website
Function 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").Value
End Function
'Get the state of the ApplicationPool
Function 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").Value
End Function
'Start the w3svc service on this node
Function 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 website
Function 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 If
End Function
'Start the website
Function 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 If
End Function
'Stop the website
Function 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 started
Function 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 website
Function Offline( )
StopWebSite()
Offline = true
End Function
'Cluster resource LooksAlive entry point
'Check for the health of the website and the application pool
Function 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 = true
End 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 here
Function IsAlive()
IsAlive = LooksAlive
End Function
'Cluster resource Open entry point
Function Open()
Open = true
End Function
'Cluster resource Close entry point
Function Close()
Close = true
End Function
'Cluster resource Terminate entry point
Function Terminate()
Terminate = true
End Function
'<end script sample>