Azure AD Connect: Servidor de preparo e recuperação de desastreAzure AD Connect: Staging server and disaster recovery

Com um servidor no modo de preparo, você pode fazer alterações na configuração e visualizar as alterações antes de tornar o servidor ativo.With a server in staging mode, you can make changes to the configuration and preview the changes before you make the server active. Ele também permite executar sincronização e importação totais para verificar se todas as alterações são esperadas antes de você fazê-las em seu ambiente de produção.It also allows you to run full import and full synchronization to verify that all changes are expected before you make these changes into your production environment.

Modo de preparoStaging mode

O modo de teste pode ser usado para vários cenários, incluindo:Staging mode can be used for several scenarios, including:

  • Alta disponibilidade.High availability.
  • Teste e implantação de novas alterações de configuração.Test and deploy new configuration changes.
  • Introdução de um novo servidor e encerramento do antigo.Introduce a new server and decommission the old.

Durante a instalação, você pode selecionar o servidor em modo de preparo.During installation, you can select the server to be in staging mode. Essa ação ativa o servidor de importação e sincronização, mas não executa qualquer exportação.This action makes the server active for import and synchronization, but it does not run any exports. Um servidor no modo de preparo não executa a sincronização de senha ou o write-back de senha, mesmo que esses recursos sejam selecionados durante a instalação.A server in staging mode is not running password sync or password writeback, even if you selected these features during installation. Quando você desabilita o modo de preparo, o servidor inicia a exportação e habilita a sincronização de senha e o write-back de senha.When you disable staging mode, the server starts exporting, enables password sync, and enables password writeback.

Observação

Suponha que você tenha um Azure AD Connect com o recurso de Sincronização de Hash de Senha habilitado.Suppose you have an Azure AD Connect with Password Hash Synchronization feature enabled. Quando você habilita o modo de preparo, o servidor para a sincronização de alterações de senha do AD local.When you enable staging mode, the server stops synchronizing password changes from on-premises AD. Quando você desabilita o modo de preparo, o servidor retoma a sincronização de alterações de senha de onde ela parou.When you disable staging mode, the server resumes synchronizing password changes from where it last left off. Se o servidor estiver no modo de preparo por um longo período de tempo, poderá levar um tempo para que ele sincronize todas as alterações de senha que ocorreram durante esse período.If the server is left in staging mode for an extended period of time, it can take a while for the server to synchronize all password changes that had occurred during the time period.

Você ainda pode forçar uma exportação usando o Synchronization Service Manager.You can still force an export by using the synchronization service manager.

Um servidor no modo de preparo continua a receber alterações do Active Directory e do Azure AD e pode assumir rapidamente as responsabilidades de outro servidor em caso de falha.A server in staging mode continues to receive changes from Active Directory and Azure AD and can quickly take over the responsibilities of another server in the event of a failure. Se você fizer alterações de configuração no servidor primário, será sua responsabilidade fazer as mesmas alterações no servidor em modo de preparo.If you make configuration changes to your primary server, it is your responsibility to make the same changes to the server in staging mode.

Para aqueles com conhecimento das tecnologias mais antigas de sincronização, o modo de preparo é diferente, pois o servidor tem seu próprio banco de dados SQL.For those of you with knowledge of older sync technologies, the staging mode is different since the server has its own SQL database. Essa arquitetura permite que o servidor de modo de preparo esteja localizado em um datacenter diferente.This architecture allows the staging mode server to be located in a different datacenter.

Verifique a configuração de um servidorVerify the configuration of a server

Para aplicar esse método, siga estas etapas:To apply this method, follow these steps:

  1. PrepararPrepare
  2. ConfiguraçãoConfiguration
  3. Importar e sincronizarImport and Synchronize
  4. VerificarVerify
  5. Servidor ativo do comutadorSwitch active server

PrepararPrepare

  1. Instale o Azure AD Connect, selecione modo de preparo e desmarque Iniciar sincronização na última página do assistente de instalação.Install Azure AD Connect, select staging mode, and unselect start synchronization on the last page in the installation wizard. Esse modo permite que você execute o mecanismo de sincronização manualmente.This mode allows you to run the sync engine manually. ReadyToConfigureReadyToConfigure
  2. Saia e entre e, no menu Iniciar, selecione Serviço de Sincronização.Sign off/sign in and from the start menu select Synchronization Service.

ConfiguraçãoConfiguration

Se você tiver feito alterações personalizadas no servidor primário e deseja comparar a configuração com o servidor de preparo, use o documentador de configuração do Azure AD Connect.If you have made custom changes to the primary server and want to compare the configuration with the staging server, then use Azure AD Connect configuration documenter.

Importar e sincronizarImport and Synchronize

  1. Selecione Conectores e selecione o primeiro conector com o tipo Active Directory Domain Services.Select Connectors, and select the first Connector with the type Active Directory Domain Services. Clique em Executar, selecione Importação completa e OK.Click Run, select Full import, and OK. Siga estas etapas para todos os Conectores desse tipo.Do these steps for all Connectors of this type.
  2. Selecione o Conector com o tipo Active Directory do Azure (Microsoft) .Select the Connector with type Azure Active Directory (Microsoft). Clique em Executar, selecione Importação completa e OK.Click Run, select Full import, and OK.
  3. Verifique se a guia Conectores ainda está selecionada.Make sure the tab Connectors is still selected. Para cada Conector com tipo Active Directory Domain Services, clique em Executar, selecione Sincronização Delta e OK.For each Connector with type Active Directory Domain Services, click Run, select Delta Synchronization, and OK.
  4. Selecione o Conector com o tipo Active Directory do Azure (Microsoft) .Select the Connector with type Azure Active Directory (Microsoft). Clique em Executar, selecione Sincronização Delta e OK.Click Run, select Delta Synchronization, and OK.

Você agora preparou a exportação das alterações para o Azure AD e AD local (se estiver usando implantação híbrida do Exchange).You have now staged export changes to Azure AD and on-premises AD (if you are using Exchange hybrid deployment). As próximas etapas permitem que você inspecione o que está prestes a ser alterado antes de realmente começar a exportação para os diretórios.The next steps allow you to inspect what is about to change before you actually start the export to the directories.

VerificarVerify

  1. Inicie um prompt de comando e vá para %ProgramFiles%\Microsoft Azure AD Sync\binStart a cmd prompt and go to %ProgramFiles%\Microsoft Azure AD Sync\bin
  2. Execute: csexport "Name of Connector" %temp%\export.xml /f:x O nome do conector pode ser encontrado no Serviço de sincronização.Run: csexport "Name of Connector" %temp%\export.xml /f:x The name of the Connector can be found in Synchronization Service. Ele tem um nome semelhante a "contoso.com – AAD" para o Azure AD.It has a name similar to "contoso.com – AAD" for Azure AD.
  3. Execute: CSExportAnalyzer %temp%\export.xml > %temp%\export.csv Você tem um arquivo em %temp% chamado export.csv que pode ser examinado no Microsoft Excel.Run: CSExportAnalyzer %temp%\export.xml > %temp%\export.csv You have a file in %temp% named export.csv that can be examined in Microsoft Excel. Esse arquivo contém todas as alterações que estão prestes a ser exportadas.This file contains all changes that are about to be exported.
  4. Faça as alterações necessárias na configuração ou nos dados e execute essas etapas novamente (importar, sincronizar e verificar) até o momento estimado para que as alterações a serem exportadas ocorram.Make necessary changes to the data or configuration and run these steps again (Import and Synchronize and Verify) until the changes that are about to be exported are expected.

Noções básicas sobre o arquivo export.csv A maior parte do arquivo é autoexplicativa.Understanding the export.csv file Most of the file is self-explanatory. Algumas siglas para entender o conteúdo:Some abbreviations to understand the content:

  • OMODT – Object Modification Type.OMODT – Object Modification Type. Indica se a operação em nível de objeto é um Add, Update ou Delete.Indicates if the operation at an object level is an Add, Update, or Delete.
  • AMODT – Attribute Modification Type.AMODT – Attribute Modification Type. Indica se a operação em um nível de atributo é um Add, Update ou Delete.Indicates if the operation at an attribute level is an Add, Update, or delete.

Recuperar identificadores comuns O arquivo export.csv contém todas as alterações que estão prestes a ser exportadas.Retrieve common identifiers The export.csv file contains all changes that are about to be exported. Cada linha corresponde a uma alteração de um objeto no espaço do conector e o objeto é identificado pelo atributo DN.Each row corresponds to a change for an object in the connector space and the object is identified by the DN attribute. O atributo DN é um identificador exclusivo atribuído a um objeto no espaço do conector.The DN attribute is a unique identifier assigned to an object in the connector space. Quando você tem muitas linhas/alterações em export.csv para analisar, pode ser difícil que, com base apenas no atributo DN, você possa descobrir para quais objetos as alterações são.When you have many rows/changes in the export.csv to analyze, it may be difficult for you to figure out which objects the changes are for based on the DN attribute alone. Para simplificar o processo de análise das alterações, use o script csanalyzer.ps1 do PowerShell.To simplify the process of analyzing the changes, use the csanalyzer.ps1 PowerShell script. O script recupera identificadores comuns (por exemplo, displayName, userPrincipalName) dos objetos.The script retrieves common identifiers (for example, displayName, userPrincipalName) of the objects. Para usar o script:To use the script:

  1. Copie o script do PowerShell da seção CSAnalyzer para um arquivo chamado csanalyzer.ps1.Copy the PowerShell script from the section CSAnalyzer to a file named csanalyzer.ps1.
  2. Abra uma janela do PowerShell e procure a pasta em que você criou o script do PowerShell.Open a PowerShell window and browse to the folder where you created the PowerShell script.
  3. Execute: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.Run: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.
  4. Agora você tem um arquivo chamado processedusers1.csv que pode ser examinado no Microsoft Excel.You now have a file named processedusers1.csv that can be examined in Microsoft Excel. Observe que o arquivo fornece um mapeamento de atributo DN para identificadores comuns (por exemplo, displayName e userPrincipalName).Note that the file provides a mapping from the DN attribute to common identifiers (for example, displayName and userPrincipalName). Atualmente, ele não inclui as alterações de atributo real que estão prestes a ser exportadas.It currently does not include the actual attribute changes that are about to be exported.

Servidor ativo do comutadorSwitch active server

  1. No servidor atualmente ativo, desligue o servidor (FIM/DirSync/Azure AD Sync) para que ele não exporte para o Azure AD ou defina-o no modo de preparação (Azure AD Connect).On the currently active server, either turn off the server (DirSync/FIM/Azure AD Sync) so it is not exporting to Azure AD or set it in staging mode (Azure AD Connect).
  2. Execute o assistente de instalação no servidor no modo de preparo e desabilite o modo de preparo.Run the installation wizard on the server in staging mode and disable staging mode. ReadyToConfigureReadyToConfigure

Recuperação de desastresDisaster recovery

Parte do design de implementação é planejar o que fazer em caso de desastre, quando você perde o servidor de sincronização.Part of the implementation design is to plan for what to do in case there is a disaster where you lose the sync server. Há modelos diferentes para uso e qual deles usar depende de vários fatores, incluindo:There are different models to use and which one to use depends on several factors including:

  • Quão tolerável é para você não poder fazer alterações em objetos no Azure AD durante o tempo de inatividade?What is your tolerance for not being able make changes to objects in Azure AD during the downtime?
  • Se você usar a sincronização de senha, os usuários aceitarão que devem usar a senha antiga no Azure AD se a alterarem no local?If you use password synchronization, do the users accept that they have to use the old password in Azure AD in case they change it on-premises?
  • Você tem uma dependência em operações em tempo real, como write-back de senha?Do you have a dependency on real-time operations, such as password writeback?

Dependendo das respostas a essas perguntas e da política da sua organização, uma das estratégias abaixo pode ser implementada:Depending on the answers to these questions and your organization’s policy, one of the following strategies can be implemented:

  • Recriar quando necessário.Rebuild when needed.
  • Ter um servidor em espera reserva, conhecido como modo de preparo.Have a spare standby server, known as staging mode.
  • Usar máquinas virtuais.Use virtual machines.

Se não usar o banco de dados interno do SQL Express, você também deverá examinar a seção Alta disponibilidade do SQL .If you do not use the built-in SQL Express database, then you should also review the SQL High Availability section.

Recriar quando necessárioRebuild when needed

Uma estratégia viável é planejar para a recriação do servidor quando necessário.A viable strategy is to plan for a server rebuild when needed. Geralmente, a instalação do mecanismo de sincronização, a importação e a sincronização inicial podem ser concluídas em algumas horas.Usually, installing the sync engine and do the initial import and sync can be completed within a few hours. Se não houver um servidor reserva disponível, é possível usar temporariamente um controlador de domínio para hospedar o mecanismo de sincronização.If there isn’t a spare server available, it is possible to temporarily use a domain controller to host the sync engine.

O servidor do mecanismo de sincronização não armazena qualquer estado sobre os objetos para que o banco de dados possa ser reconstruído com os dados no Active Directory e no Azure AD.The sync engine server does not store any state about the objects so the database can be rebuilt from the data in Active Directory and Azure AD. O atributo sourceAnchor é usado para unir os objetos do local e da nuvem.The sourceAnchor attribute is used to join the objects from on-premises and the cloud. Se você recriar o servidor com objetos locais existentes e a nuvem, o mecanismo de sincronização fará a correspondência entre esses objetos novamente na reinstalação.If you rebuild the server with existing objects on-premises and the cloud, then the sync engine matches those objects together again on reinstallation. As coisas que você precisa documentar e salvar são as alterações de configuração feitas no servidor, como regras de sincronização e de filtragem.The things you need to document and save are the configuration changes made to the server, such as filtering and synchronization rules. Essas configurações personalizadas devem ser reaplicadas antes que você inicie a sincronização.These custom configurations must be reapplied before you start synchronizing.

Ter um servidor em espera reserva - modo de preparoHave a spare standby server - staging mode

Se você tiver um ambiente mais complexo, é recomendável ter um ou mais servidores em espera.If you have a more complex environment, then having one or more standby servers is recommended. Durante a instalação, você pode habilitar um servidor em modo de preparo.During installation, you can enable a server to be in staging mode.

Para obter mais informações, consulte Modo de preparo.For more information, see staging mode.

Usar máquinas virtuaisUse virtual machines

Um método comum e com suporte é a execução do mecanismo de sincronização em uma máquina virtual.A common and supported method is to run the sync engine in a virtual machine. Se o host tiver um problema, a imagem com o servidor do mecanismo de sincronização pode ser migrada para outro servidor.In case the host has an issue, the image with the sync engine server can be migrated to another server.

Alta disponibilidade do SQLSQL High Availability

Se você não estiver usando o SQL Server Express que vem com o Azure AD Connect, a alta disponibilidade do SQL Server também deverá ser considerada.If you are not using the SQL Server Express that comes with Azure AD Connect, then high availability for SQL Server should also be considered. As soluções de alta disponibilidade com suporte incluem o clustering de SQL e AOA (Grupos de Disponibilidade AlwaysOn).The high availability solutions supported include SQL clustering and AOA (Always On Availability Groups). Soluções sem suporte incluem espelhamento.Unsupported solutions include mirroring.

Suporte para SQL AOA foi adicionado ao Azure AD Connect versão 1.1.524.0.Support for SQL AOA was added to Azure AD Connect in version 1.1.524.0. Você deve habilitar o SQL AOA antes de instalar o Azure AD Connect.You must enable SQL AOA before installing Azure AD Connect. Durante a instalação, o Azure AD Connect detecta se a instância do SQL fornecida está habilitada para SQL AOA ou não.During installation, Azure AD Connect detects whether the SQL instance provided is enabled for SQL AOA or not. Se o SQL AOA estiver habilitado, o Azure AD Connect descobrirá melhor se o AOA SQL está configurado para usar replicação síncrona ou replicação assíncrona.If SQL AOA is enabled, Azure AD Connect further figures out if SQL AOA is configured to use synchronous replication or asynchronous replication. Ao configurar o Ouvinte do Grupo de Disponibilidade, é recomendável definir a propriedade RegisterAllProvidersIP como 0.When setting up the Availability Group Listener, it is recommended that you set the RegisterAllProvidersIP property to 0. Isso ocorre porque o Azure AD Connect atualmente usa o SQL Native Client para conectar-se ao SQL, e o SQL Native Client não dá suporte ao uso da propriedade MultiSubNetFailover.This is because Azure AD Connect currently uses SQL Native Client to connect to SQL and SQL Native Client does not support the use of MultiSubNetFailover property.

Apêndice: CSAnalyzerAppendix CSAnalyzer

Consulte a seção Verificar para saber como usar esse script.See the section verify on how to use this script.

Param(
    [Parameter(Mandatory=$true, HelpMessage="Must be a file generated using csexport 'Name of Connector' export.xml /f:x)")]
    [string]$xmltoimport="%temp%\exportedStage1a.xml",
    [Parameter(Mandatory=$false, HelpMessage="Maximum number of users per output file")][int]$batchsize=1000,
    [Parameter(Mandatory=$false, HelpMessage="Show console output")][bool]$showOutput=$false
)

#LINQ isn't loaded automatically, so force it
[Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") | Out-Null

[int]$count=1
[int]$outputfilecount=1
[array]$objOutputUsers=@()

#XML must be generated using "csexport "Name of Connector" export.xml /f:x"
write-host "Importing XML" -ForegroundColor Yellow

#XmlReader.Create won't properly resolve the file location,
#so expand and then resolve it
$resolvedXMLtoimport=Resolve-Path -Path ([Environment]::ExpandEnvironmentVariables($xmltoimport))

#use an XmlReader to deal with even large files
$result=$reader = [System.Xml.XmlReader]::Create($resolvedXMLtoimport) 
$result=$reader.ReadToDescendant('cs-object')
do 
{
    #create the object placeholder
    #adding them up here means we can enforce consistency
    $objOutputUser=New-Object psobject
    Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name ID -Value ""
    Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name Type -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name DN -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name operation -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name UPN -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name displayName -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name sourceAnchor -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name alias -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name primarySMTP -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name onPremisesSamAccountName -Value ""
    Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name mail -Value ""

    $user = [System.Xml.Linq.XElement]::ReadFrom($reader)
    if ($showOutput) {Write-Host Found an exported object... -ForegroundColor Green}

    #object id
    $outID=$user.Attribute('id').Value
    if ($showOutput) {Write-Host ID: $outID}
    $objOutputUser.ID=$outID

    #object type
    $outType=$user.Attribute('object-type').Value
    if ($showOutput) {Write-Host Type: $outType}
    $objOutputUser.Type=$outType

    #dn
    $outDN= $user.Element('unapplied-export').Element('delta').Attribute('dn').Value
    if ($showOutput) {Write-Host DN: $outDN}
    $objOutputUser.DN=$outDN

    #operation
    $outOperation= $user.Element('unapplied-export').Element('delta').Attribute('operation').Value
    if ($showOutput) {Write-Host Operation: $outOperation}
    $objOutputUser.operation=$outOperation

    #now that we have the basics, go get the details

    foreach ($attr in $user.Element('unapplied-export-hologram').Element('entry').Elements("attr"))
    {
        $attrvalue=$attr.Attribute('name').Value
        $internalvalue= $attr.Element('value').Value

        switch ($attrvalue)
        {
            "userPrincipalName"
            {
                if ($showOutput) {Write-Host UPN: $internalvalue}
                $objOutputUser.UPN=$internalvalue
            }
            "displayName"
            {
                if ($showOutput) {Write-Host displayName: $internalvalue}
                $objOutputUser.displayName=$internalvalue
            }
            "sourceAnchor"
            {
                if ($showOutput) {Write-Host sourceAnchor: $internalvalue}
                $objOutputUser.sourceAnchor=$internalvalue
            }
            "alias"
            {
                if ($showOutput) {Write-Host alias: $internalvalue}
                $objOutputUser.alias=$internalvalue
            }
            "proxyAddresses"
            {
                if ($showOutput) {Write-Host primarySMTP: ($internalvalue -replace "SMTP:","")}
                $objOutputUser.primarySMTP=$internalvalue -replace "SMTP:",""
            }
        }
    }

    $objOutputUsers += $objOutputUser

    Write-Progress -activity "Processing ${xmltoimport} in batches of ${batchsize}" -status "Batch ${outputfilecount}: " -percentComplete (($objOutputUsers.Count / $batchsize) * 100)

    #every so often, dump the processed users in case we blow up somewhere
    if ($count % $batchsize -eq 0)
    {
        Write-Host Hit the maximum users processed without completion... -ForegroundColor Yellow

        #export the collection of users as a CSV
        Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
        $objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

        #increment the output file counter
        $outputfilecount+=1

        #reset the collection and the user counter
        $objOutputUsers = $null
        $count=0
    }

    $count+=1

    #need to bail out of the loop if no more users to process
    if ($reader.NodeType -eq [System.Xml.XmlNodeType]::EndElement)
    {
        break
    }

} while ($reader.Read)

#need to write out any users that didn't get picked up in a batch of 1000
#export the collection of users as CSV
Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
$objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

Próximas etapasNext steps

Tópicos de visão geralOverview topics