Compartilhar via


Implantar um serviço de mesclagem dividida para mover dados entre bancos de dados compartilhados

Aplica-se a: Banco de Dados SQL do Azure

A ferramenta de divisão e mesclagem permite mover dados entre bancos de dados fragmentados. Veja Mover dados entre bancos de dados expandidos na nuvem.

Observação

A ferramenta de divisão/mesclagem destina-se aos Aplicativos Web do Azure. O fim da vida útil dos Serviços de Nuvem (Clássico) é 31 de agosto de 2024. Se você estava usando a ferramenta de divisão/mesclagem nos Serviços de Nuvem (Clássico), migre para os Aplicativos Web do Azure, antes de 31 de agosto de 2024.

Pré-requisitos

  1. Crie um banco de dados SQL do Azure para ser usado como o banco de dados com status de divisão/mesclagem. Acesse o portal do Azure. Crie um novo banco de dados SQL. Nomeie o banco de dados e crie um novo administrador e senha. Certifique-se de registrar o nome e a senha para uso posterior.

  2. Verifique se o servidor lógico no Azure permite que os Serviços do Azure se conectem a ele. No portal do Azure, nas Configurações de Firewall do servidor lógico, verifique se a configuração Permitir acesso aos Serviços do Azure foi definida como Ativada. Selecione o ícone Salvar.

  3. Crie uma conta de Armazenamento do Azure para saída de diagnóstico.

  4. Use as imagens públicas do docker de divisão/mesclagem ou envie imagens desse docker por push para o Serviço de Contêiner do Azure ou para o registro do docker de sua preferência.

Crie dois Aplicativos Web do Azure para o serviço

Crie dois aplicativos Web, um worker e um aplicativo Web UI.

Aplicativo Web de trabalho

  1. Crie um aplicativo Web no portal do Azure.

  2. No campo Publicar, selecione Contêiner.

  3. Para Sistema Operacional, selecione Windows.

  4. Prossiga para a guia Docker.

  5. Preencha as seguintes informações:
    Origem da imagem: Docker hub
    Tipo de acesso: Public
    Imagem e marca: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Selecione Revisar + criar para criar o aplicativo Web.

Aplicativo Web da interface do usuário

Para criar o aplicativo Web da interface do usuário, siga as mesmas etapas usadas para criar o aplicativo Web de trabalho com uma diferença:

  • Uma imagem diferente do docker no campo Imagem e marca: mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Configurar os aplicativos Web de Divisão/Mesclagem

Configurar a segurança

Para obter instruções detalhadas configurar a segurança do serviço, consulte as Configuração de segurança da divisão e mesclagem.

Para fins de implantação de teste simples para este tutorial, um conjunto mínimo de etapas de configuração é executado para colocar o serviço em operação. Essas etapas permite que somente o computador/conta que as executa se comunique com o serviço.

Crie um certificado autoassinado e um arquivo PFX

Use o PowerShell para criar um certificado autoassinado e um arquivo PFX.

Primeiro, crie um novo diretório. Em seguida, substitua os valores embutidos adequadamente e execute os seguintes comandos do PowerShell provenientes do novo diretório:

  $cert = New-SelfSignedCertificate -Subject "CN=*.cloudapp.net" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
  $mypwd = ConvertTo-SecureString -String "{myPassword}" -Force -AsPlainText  ## Replace {myPassword}
  Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd   ## Specify your preferred location

Carregue o arquivo PFX nos aplicativos Web e habilite o uso do certificado

Repita as etapas a seguir para worker e para os aplicativos Web UI.

  1. Acesse o portal do Azure.
  2. Selecione Serviços de Aplicativo.
  3. Selecione o aplicativo Web que você criou acima para a ferramenta de divisão/mesclagem.
  4. Selecione Certificados no menu.
  5. Selecione Traga seus próprios certificados (.pfx).
  6. Selecione Adicionar certificados na barra.
  7. Selecione o arquivo PFX e digite a mesma senha como acima.
  8. Depois de concluído, copie a impressão digital do certificado da nova entrada na lista.
  9. No menu Aplicativo Web, abra Configurações / Configuração.
  10. Defina o Modo de certificado do cliente como Require.

Configuração do aplicativo Web

Repita as etapas a seguir para worker e para os aplicativos Web UI.

  1. Abra o aplicativo Web implantado e vá para Configurações>Variáveis de ambiente>Configurações do aplicativo. Selecione Adicionar.

  2. Adicione uma variável com o nome ElasticScaleMetadata e o valor com a cadeia de conexão para o banco de dados de status implantado anteriormente.

    Importante

    Neste momento, o banco de dados de status deve usar a ordenação latina (SQL\_Latin1\_General\_CP1\_CI\_AS). Para obter mais informações, confira Nome de ordenação do Windows.

    Normalmente, com o Banco de Dados SQL do Azure, a cadeia de caracteres de conexão tem o seguinte formato:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30

  3. Adicione outras variáveis:

    Nome Valor
    WorkerRoleSynchronizationStorageAccountConnectionString Cadeia de conexão válida para o armazenamento do Azure criado anteriormente.
    DataEncryptionPrimaryCertificateThumbprint Impressão digital do certificado gerada anteriormente.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
    WEBSITE_PULL_IMAGE_OVER_VNET 0
  4. Selecione Aplicar e reinicie o aplicativo.

  5. Repita as mesmas etapas para os aplicativos Web worker e UI.

Solucionar problemas de implantação

Se sua função web não ficar online, provavelmente é um problema com a configuração de segurança. Verifique se o TLS/SSL está configurado conforme descrito anteriormente.

Se sua função de trabalho não fica online, mas sua função web tiver êxito, provavelmente é um problema na conexão com o banco de dados de status que você criou anteriormente.

  • Verifique se a cadeia de conexão é precisa.

  • Verifique se o servidor e o banco de dados existem e se a ID de usuário e a senha estão corretas.

  • Para o Banco de Dados SQL do Azure, a cadeia de conexão deve estar no formato:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30

  • Verifique se o nome do servidor não começa com https://.

  • Verifique se o servidor permite que os Serviços do Azure se conectem a ele. Para fazer isso, abra o banco de dados no portal e verifique se a configuração Permitir acesso aos serviços do Azure está definida como Ativada.

Testar a implantação do serviço

Conectar-se com um navegador da Web

Vá para a Visão geral do UI aplicativo Web e selecione Procurar. Escolha o certificado correto, se solicitado.

Testes com scripts do PowerShell

A implantação e sue ambiente podem ser testados, executando os scripts de exemplo do PowerShell incluídos.

Importante

Os scripts de exemplo são executados no PowerShell 5.1. No momento, eles não são executados no PowerShell 6 ou posterior.

Os arquivos de script incluídos são:

  1. SetupSampleSplitMergeEnvironment.ps1 - configura uma camada de dados de teste para divisão-mesclagem.

    1. Cria um banco de dados do gerenciador de mapa de fragmentos.
    2. Cria dois bancos de dados de fragmentos.
    3. Cria um mapa do fragmento para esses bancos de dados (exclui quaisquer mapas do fragmento existentes nesses bancos de dados).
    4. Cria uma pequena tabela de exemplo em ambos os fragmentos e preenche a tabela em um dos fragmentos.
    5. Declara o SchemaInfo para a tabela fragmentada.
  2. ExecuteSampleSplitMerge.ps1 - executa operações de teste na camada de dados de teste.

    1. Envia uma solicitação divisão para o front-end da Web do Serviço de Divisão-Mesclagem, que divide metade dos dados do primeiro fragmento para o segundo.
    2. Elege o front-end da web para o status da solicitação de divisão e aguarda até que a solicitação seja concluída.
    3. Envia uma solicitação de mesclagem ao front-end da Web do Serviço de Divisão-Mesclagem, que move os dados do segundo fragmento para o primeiro.
    4. Elege o front-end da web para o status da solicitação de mesclagem e aguarda até que a solicitação seja concluída.
  3. GetMappings.ps1: o script de exemplo de nível superior que imprime o estado atual dos mapeamentos de fragmentos.

  4. ShardManagement.psm1: o script auxiliar que encapsula a API ShardManagement.

  5. SqlDatabaseHelpers.psm1: o script auxiliar para criar e gerenciar bancos de dados no Banco de Dados SQL.

Usar o PowerShell para verificar sua implantação

  1. Abra uma nova janela do PowerShell, acesse o diretório no qual baixou o pacote de Divisão-Mesclagem e, em seguida, acesse o diretório "Powershell".

  2. Crie um servidor (ou escolha um servidor existente) em que o gerenciador do mapa do fragmento e os fragmentos serão criados.

    Observação

    O script SetupSampleSplitMergeEnvironment.ps1 cria todos esses bancos de dados no mesmo servidor por padrão para manter o script simples. Isso não é uma restrição do serviço de divisão-mesclagem em si.

    Um logon de autenticação do SQL com acesso de leitura/gravação para os bancos de dados será necessário para que o serviço de divisão-mesclagem mova os dados e atualize o mapa do fragmento. Como o Serviço de Divisão-Mesclagem é executado na nuvem, ele atualmente não oferece suporte à autenticação integrada.

    Verifique se o servidor está configurado para permitir acesso do endereço IP do computador que executa esses scripts. Você pode encontrar essa configuração em SQL Server/Firewalls e redes virtuais/endereços IP do cliente.

  3. Execute o script SetupSampleSplitMergeEnvironment.ps1 para criar o ambiente de exemplo.

    A execução desse script apaga quaisquer estruturas de dados de gerenciamento de mapa do fragmento existentes no banco de dados do gerenciador do mapa do fragmento e nos fragmentos. Ele poderá ser útil para executar novamente o script se você desejar reinicializar o mapa de fragmentos ou os fragmentos em si.

    Linha de comando de exemplo:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Execute o script Getmappings.ps1 para exibir os mapeamentos que existem atualmente no ambiente de exemplo.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Execute o script ExecuteSampleSplitMerge.ps1 para executar uma operação de divisão (mover metade dos dados no primeiro fragmento para o segundo) e, em seguida, uma operação de mesclagem (mover os dados de volta para o primeiro fragmento). Se você configurou o TLS e deixou o ponto de extremidade http desabilitado, verifique se, ao invés disso, usou o ponto de extremidade https://.

    Linha de comando de exemplo:

    .\ExecuteSampleSplitMerge.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^
    -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^
    -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^
    -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
    

    Se você receber o erro a seguir, provavelmente é um problema com o certificado do ponto de extremidade da Web. Tente se conectar ao ponto de extremidade da Web com seu navegador da Web favorito e verifique se há um erro de certificado.

    Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.

    Em caso de êxito, a saída deve ser semelhante à seguinte saída:

    .\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'http://mysplitmergeservice.cloudapp.net' -CertificateThumbprint 0123456789abcdef0123456789abcdef01234567
    Sending split request
    Began split operation with id dc68dfa0-e22b-4823-886a-9bdc903c80f3
    Polling split-merge request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Waiting for reference tables copy     completion.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    Sending merge request
    Began merge operation with id 6ffc308f-d006-466b-b24e-857242ec5f66
    Polling request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    
  6. Experimente com outros tipos de dados. Todos esses scripts usam um parâmetro de - ShardKeyType opcional que permite que você especifique o tipo de chave. O padrão é Int32, mas você também pode especificar Int64, Guid ou binário.

Criar solicitações

O serviço pode ser usado por meio da interface do usuário Web ou importando e usando o módulo SplitMerge.psm1 do PowerShell que irá enviar suas solicitações por meio da função web.

O serviço pode mover dados em tabelas fragmentadas e tabelas de referência. Uma tabela fragmentada possui uma coluna de chave de fragmentação e tem diferentes dados de linha em cada fragmento. Uma tabela de referência não é fragmentada para que ele contenha os mesmos dados de linha em cada fragmento. As tabelas de referência são úteis para dados que não mudam com frequência e são usadas para JOINS com tabelas fragmentadas em consultas.

Para executar uma operação de Divisão-Mesclagem, você deve declarar as tabelas fragmentadas e as tabelas de referência que deseja mover. Isso é feito com a API SchemaInfo . Essa API está no namespace Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema.

  1. Para cada tabela fragmentada, crie um objeto ShardedTableInfo que descreve o nome do esquema da tabela pai (opcional, o padrão é "dbo"), o nome da tabela e o nome da coluna na tabela que contém a chave de fragmentação.
  2. Para cada tabela de referência, crie um objeto de ReferenceTableInfo que descreve o nome do esquema da tabela pai (opcional, o padrão é "dbo") e o nome da tabela.
  3. Adicione os objetos TableInfo anteriores a um novo objeto SchemaInfo.
  4. Obtenha uma referência para um objeto ShardMapManager e chame GetSchemaInfoCollection.
  5. Adicione o SchemaInfo ao SchemaInfoCollection, fornecendo o nome do mapa de fragmento.

Um exemplo disso pode ser visto no script SetupSampleSplitMergeEnvironment.ps1.

O serviço de Divisão-Mesclagem não cria para você o banco de dados de destino (ou o esquema para todas as tabelas no banco de dados). Eles devem ser previamente criados antes de enviar uma solicitação ao serviço.

Erros conhecidos

Você poderá ver a mensagem a seguir ao executar os scripts de exemplo do PowerShell:

Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Esse erro significa que o certificado TLS/SSL não está configurado corretamente. Siga as instruções na seção Conectando-se com um navegador da Web.

Se não for possível enviar solicitações, você verá isso:

[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.

Nesse caso, verifique o arquivo de configuração, em particular a configuração para WorkerRoleSynchronizationStorageAccountConnectionString. Esse erro normalmente indica que a função de trabalho não pôde inicializar com êxito o banco de dados de metadados no primeiro uso.

Ainda não está usando ferramentas de banco de dados elástico? Confira nosso Guia de Introdução. Em caso de dúvidas, entre em contato conosco na página de perguntas do Microsoft Q&A para Banco de Dados SQL e, para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no Fórum de comentários sobre o Banco de Dados SQL.