Megosztás a következőn keresztül:


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:

  1. A tanúsítványmegosztás visszaállítása

  2. A WebSites-megosztás visszaállítása

  3. Szükség esetén alkalmazza újra az ACL-eket

  4. 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:

  1. A WebSites modul importálása

  2. Frissítse a hitelesítő adatokat

  3. A régi kiszolgálónevek eltávolítása a farmból

  4. Az új kiszolgálók hozzáadása a megfelelő farmhoz

  1. 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.

  2. 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.

  3. 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>
    
  4. 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