Windows Azure Pack: Webhelyek visszaállítása
Érintett kiadások: Windows Azure Pack
Erősen ajánlott olyan kiszolgálókra visszaállítani, amelyek neve és rendszergazdai fiókjai megegyeznek a biztonsági mentés során történtekkel. Ahhoz, hogy a visszaállítás sikeres legyen, a fájlkiszolgálónak és a SQL Server pontosan meg kell egyeznie a konfiguráció, a felhasználók és az engedélyek tekintetében, mint a biztonsági mentés során. A Webhelyek szolgáltatás visszaállításakor használja a következő sorrendet:
1. SQL Server adatbázisok visszaállítása
2. A fájlkiszolgáló visszaállítása
3. A webhelyvezérlő visszaállítása
4. Javítás futtatása az összes szerepkörön
A visszaállítási műveletek végrehajtásához szkripteket használhat. A lépéseket az alábbiakban ismertetjük részletesen.
1. SQL Server adatbázisok visszaállítása
Állítsa vissza az SQL Server üzemeltetési, erőforrás-mérési és főadatbázisait. Az SQL Servernek ugyanazzal a névvel kell rendelkeznie, mint a biztonsági mentéskor.
SQL-visszaállítási példaszkript
Az alábbi példaszkript csak szemléltető célokra érhető el, és nem támogatott. A létrehozott szkriptet rendszergazdai jogosultságokkal kell futtatni.
Megjegyzés
Ezt a szkriptet a Microsoft nem támogatja.
param ([string] $backupUser = "Administrator", $backupPassword, $sqlServer, $sqlUser = "sa", $sqlPassword, $backupLocation = "\\backupMachine\c$\backup" )
net use $backupLocation /user:$backupUser $backupPassword
xcopy /Y /q \\$backupMachine\c$\$backupLocation\Hosting.bak C:\HostingOfflineFeed\
xcopy /Y /q \\$backupMachine\c$\$backupLocation\ResourceMetering.bak C:\HostingOfflineFeed\
xcopy /Y /q $backupLocation\master.bak C:\HostingOfflineFeed\
net start "SQL Server (MSSQLSERVER)" /f
sqlcmd -S $sqlServer -U $sqlUser -P $sqlPassword -Q "RESTORE DATABASE [master] FROM DISK='C:\HostingOfflineFeed\master.bak' WITH REPLACE"
net stop "SQL Server (MSSQLSERVER)"
net start "SQL Server (MSSQLSERVER)"
sqlcmd -S $sqlServer -U $sqlUser -P $sqlPassword -Q "RESTORE DATABASE [Hosting] FROM DISK='C:\HostingOfflineFeed\Hosting.bak' WITH REPLACE"
sqlcmd -S $sqlServer -U $sqlUser -P $sqlPassword -Q "RESTORE DATABASE [ResourceMetering] FROM DISK='C:\HostingOfflineFeed\ResourceMetering.bak' WITH REPLACE"
del C:\HostingOfflineFeed\Hosting.bak
del C:\HostingOfflineFeed\ResourceMetering.bak
del C:\HostingOfflineFeed\master.bak
2. A fájlkiszolgáló visszaállítása
A fájlkiszolgálónak ugyanazzal a névvel kell rendelkeznie, mint a biztonsági mentéskor. A fájlkiszolgáló összetevőit a következő sorrendben kell visszaállítania:
A tanúsítványmegosztás visszaállítása
A WebSites-megosztás visszaállítása
Szükség esetén alkalmazza újra az ACL-eket
FSRM-kvóták újraalkalmazása a WebSites-megosztáson
Két példaszkript érhető el: az egyik a fenti a–c lépéshez, a másik pedig az FSRM-kvóták WebSites-megosztáson való újbóli alkalmazásához.
Fájlkiszolgáló-visszaállítási példaszkript
A következő példaszkript a fenti a-c lépéseket tartalmazza (nem állítja vissza az FSRM-kvótákat). A szkript csak szemléltető célokra érhető el, és nem támogatott. A létrehozott szkriptet rendszergazdai jogosultságokkal kell futtatni.
Megjegyzés
Ezt a szkriptet a Microsoft nem támogatja.
param ([string] $backupUser = "Administrator", $backupPassword, $certificateFolder = "C:\Certificates", $websiteFolder = "C:\websites", $backupLocation = "\\backupMachine\c$\backup" )
net use $backupLocation /user:$backupUser $backupPassword
mkdir $certificateFolder
mkdir $websiteFolder
xcopy /Y /q /E $backupLocation\ $certificateFolder
xcopy /Y /q /E $backupLocation\ $websiteFolder
Példaszkript az FSRM-kvóták visszaállításához
Az alábbi példaszkript visszaállítja az FSRM-kvótákat. A szkript csak szemléltető célokra érhető el, és nem támogatott. A létrehozott szkriptet rendszergazdai jogosultságokkal kell futtatni.
Megjegyzés
Ezt a szkriptet a Microsoft nem támogatja.
param ([string] $backupUser = "Administrator", $backupPassword, $backupLocation = "\\backupMachine\c$\backup" )
net use $backupLocation /user:$backupUser $backupPassword
xcopy /Y /q $backupLocation\templates.xml C:\templates.xml
dirquota template import /File:C:\templates.xml
net stop srmReports
net stop srmSvc
net stop quota
net stop Datascrn
robocopy $backupLocation\SRM "C:\System Volume Information\SRM" /E /ZB /R:3 /W:5
net start Datascrn
net start quota
net start srmSvc
net start srmReports
3. A webhelyvezérlő visszaállítása
A webhelyek vezérlőjének visszaállításához használhatja az ebben a szakaszban bemutatott Restore.ps1 PowerShell-szkriptet.
Másolja a Restore.ps1 szkriptet a webhelyvezérlőbe, majd futtassa a következő parancsot rendszergazdai jogosultságokkal:
net use /Y $backupLocation /user:$backupMachineAdmin $backupMachinePassword
.\Restore.ps1 $backupLocation $encryptionKey
Megjegyzés
A $encryptionKey jelzőre csak akkor van szükség, ha a biztonsági mentés során használta.
A Restore.ps1 szkript következik.
## Re-install and restore the controller from a backup
param ($backupPath,$password)
function ShowHelp
{
Write-Host '===================== RESTORE.PS1 HELP ====================='
Write-Host 'This is a script that restores based on a backup from the Hosting VSS writer'
Write-Host 'Invoke it using .\Restore.ps1'
Write-Host 'It can also be invoked as follows:'
Write-Host '.\Restore.ps1 <backup path (e.g. \\backupmachine\C$\backuplocation)> <password for keys file>'
Write-Host ("Note: before running this script you may need to run:`r`n" + ' "net use /Y <backup path> /user:<username> <password>"')
Write-Host '============================================================'
}
function CreateFeedWebAppIfNeeded ([string] $localFeedLocation)
{
import-module WebAdministration
$app = Get-WebApplication -Name HostingOfflineFeed
if ($app -eq $null)
{
New-WebApplication -Name HostingOfflineFeed -Site 'Default Web Site' -PhysicalPath $localFeedLocation -ApplicationPool DefaultAppPool -Force
}
# Add mime types needed for downloading .msp files for offline installations
$msp = Get-WebConfiguration //staticContent/* | where {$_.fileExtension -eq '.msp'}
if ($msp -eq $null)
{
Add-WebConfiguration //staticContent -Value @{fileExtension=".msp";mimeType="application/octet-stream"}
}
# Add mime types needed for downloading .msu files for offline installations
$msu = Get-WebConfiguration //staticContent/* | where {$_.fileExtension -eq '.msu'}
if ($msu -eq $null)
{
Add-WebConfiguration //staticContent -Value @{fileExtension=".msu";mimeType="application/octet-stream"}
}
}
function InstallController ([string]$offlineFeedUrl, [string]$customFeed)
{
$WebPiCmd = ([System.Environment]::ExpandEnvironmentVariables("%ProgramW6432%\Microsoft\Web Platform Installer\WebpiCmd.exe"))
if (!(Test-Path $WebPiCmd))
{
$WebPiCmd = Join-Path -Path $localFeedLocation -ChildPath "bin\WebpiCmd.exe"
}
Invoke-Command -ScriptBlock { & $WebPiCmd /Install /Products:HostingController /AcceptEula /XML:$offlineFeedUrl /SuppressReboot /Log:HostingController.log }
if ($lastexitcode -ne $null -And $lastexitcode -ne 0)
{
Write-Host "ERROR: There was a problem installing using WebPI!"
exit $lastexitcode
}
}
function DecodeBase64($string)
{
return [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($string))
}
function DecryptString($EncryptedFile, $Passphrase, $salt, $init)
{
$encryptedStrings = (Get-Content $EncryptedFile)
$ret = @()
foreach ($Encrypted in $encryptedStrings)
{
# If the value in the Encrypted is a string, convert it to Base64
if($Encrypted -is [string])
{
$Encrypted = [Convert]::FromBase64String($Encrypted)
}
# Create a COM Object for RijndaelManaged Cryptography
$r = new-Object System.Security.Cryptography.RijndaelManaged
# Convert the Passphrase to UTF8 Bytes
$pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)
# Convert the Salt to UTF Bytes
$salt = [Text.Encoding]::UTF8.GetBytes($salt)
# Create the Encryption Key using the passphrase, salt and SHA1 algorithm at 256 bits
$r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8
# Create the Intersecting Vector Cryptology Hash with the init
$r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15]
# Create a new Decryptor
$d = $r.CreateDecryptor()
# Create a New memory stream with the encrypted value.
$ms = new-Object IO.MemoryStream @(,$Encrypted)
# Read the new memory stream and read it in the cryptology stream
$cs = new-Object Security.Cryptography.CryptoStream $ms,$d,"Read"
# Read the new decrypted stream
$sr = new-Object IO.StreamReader $cs
# Return from the function the stream
$ret += $sr.ReadToEnd()
# Stops the stream
$sr.Close()
# Stops the crypology stream
$cs.Close()
# Stops the memory stream
$ms.Close()
# Clears the RijndaelManaged Cryptology IV and Key
$r.Clear()
}
return $ret
}
if ($backupPath -and $backupPath.Contains('/?'))
{
ShowHelp
return
}
Write-Host 'Starting the hosting restore process. Run with /? to see help.'
Write-Host ("Note: before running this script you may need to run:`r`n" + ' "net use /Y <backupPath> /user:<username> <password>"')
# argument parsing
if (!$backupPath)
{
$backupPath = Read-Host "Please enter the name of the backup path (e.g. \\backupmachine\C$\backuplocation)"
}
if (!$password)
{
$password = Read-Host "Please enter the password of the keys file" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
}
$systemDrive = [System.Environment]::ExpandEnvironmentVariables('%systemdrive%\')
# Fetch restore data from remote machine
$localFeedLocation = ($systemDrive +'HostingOfflineFeed\')
$c = 0
do
{
$c++
"D" | xcopy /q /Y (Join-Path -Path $backupPath -ChildPath "HostingOfflineFeed") "$localFeedLocation" /E
} while ($c -lt 10 -and !$?)
# Install the IIS cmdlets
$dismLocation = Join-Path -Path $systemDrive -ChildPath 'Windows\System32\dism.exe'
& $dismLocation /online /enable-feature /featurename:IIS-ManagementScriptingTools /all
CreateFeedWebAppIfNeeded $localFeedLocation
Stop-Service ResourceMetering -ErrorAction SilentlyContinue
# install webpi
$wpi = (dir ($systemDrive + 'hostingofflinefeed\installers\HostingWebPlatformInstaller') -r -i 'wpi.msi').DirectoryName
if ($wpi.Count -gt 1)
{
$wpi = $wpi[0]
}
$wpi = Join-Path -Path $wpi -ChildPath "wpi.msi"
msiexec /quiet /i $wpi
$offlineFeedUrl = 'https://localhost/HostingOfflineFeed/feeds/latest/WebSites0.9.0.xml'
InstallController $offlineFeedUrl
$keys = DecryptString (Join-Path -Path $backupPath -ChildPath 'encryptedkeys.txt') $password 'salt12345' 'init12345'
Stop-Service WebFarmService -ErrorAction SilentlyContinue
Add-PSSnapIn WebHostingSnapIn
# Restore the keys
# Keys are Base64 encoded
Set-ControllerConnectionString -ConnectionString (DecodeBase64($keys[0])) 3>$null
# Set-MeteringConnectionString -MeteringConnectionString (DecodeBase64($keys[1])) -ServerName (HostName)
Set-SymmetricKey -SymmetricKeyName SystemCore -SymmetricKey (DecodeBase64($keys[1])) 3>$null
Set-SymmetricKey -SymmetricKeyName SiteRuntime -SymmetricKey (DecodeBase64($keys[2])) 3>$null
Set-MeteringConnectionString -MeteringConnectionString ([Microsoft.Web.Hosting.SiteManager]::GetMeteringConnectionString()) -ServerName (HostName) 3>$null
Start-Service WebFarmService -ErrorAction SilentlyContinue
Visszaállítás nem fájlkiszolgálókra különböző névvel vagy rendszergazdai fiókkal
Ha egy kiszolgálót (amely nem fájlkiszolgáló vagy SQL Server) kell visszaállítania egy olyan kiszolgálóra vagy kiszolgálóra, amelynek kiszolgálónevei vagy rendszergazdai fiókjai eltérnek az eredetitől, a következőket kell tennie:
A WebSites modul importálása
Frissítse a hitelesítő adatokat
A régi kiszolgálónevek eltávolítása a farmból
Az új kiszolgálók hozzáadása a megfelelő farmhoz
Először is, a többi parancs futtatása előtt importálja a WebSites modult:
Import-Module WebSites
Most futtassa a 2–4. parancsot a vezérlőn rendszergazdaként.
Ha a Szerepkörtípus> szerepkör< hitelesítő adatai megváltoztak, futtassa a következőket minden módosított hitelesítő adat esetében:
Set-WebSitesConfig Credential -CredentialName <RoleType> Credential -UserName <RoleAdminUser> -Password <RoleAdminPassword>
Megjegyzés
A RoleType> lehetséges értékei< a Set-WebSitesConfig parancsban: ManagementServer, FileServer, FrontEnd, Publisher és Worker.
Futtassa a következő parancsot minden olyan régi kiszolgálónév<> esetében, amelyet már nem használnak:
Remove-WebSitesServer -Name <OldName>
A RoleType> szerepkör<Új neve> minden új kiszolgálónévhez< futtassa a következőt:
New-WebSitesServer -Name <NewName> -ServerType <RoleType>
Megjegyzés
A RoleType> lehetséges értékei< a New-WebSitesServer parancsban: ManagementServer, FileServer, LoadBalancer, Publisher és WebWorker.
Példa
Ha volt egy "OldWorker" nevű régi webmunkási szerepköre és egy "NewWorker" nevű új webmunkás szerepköre, és a WebWorker hitelesítő adatait a "WebWorkerAdmin" névre frissítette, a következőt fogja futtatni:
Import-Module WebSites
Set-WebSitesConfig Credential -CredentialName WorkerCredential -UserName WebWorkerAdmin -Password $WebWorkerPassword
Remove-WebSitesServer -Name OldWorker
New-WebSitesServer -Name NewWorker -ServerType WebWorker
4. Javítás futtatása az összes szerepkörön
A visszaállítás befejezése után futtasson egy javítást az összes szerepkörön, és monitorozza őket, hogy meggyőződjön arról, hogy a szerepkörök kifogástalan állapotban vannak.
Lásd még:
Windows Azure Pack: Webhelyek biztonsági mentése
Windows Azure Pack: Webhelyek üzembe helyezése