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 e mesclagem destina-se a funcionar com Serviços de Nuvem (Clássico) e não com Serviços de Aplicativos.

Baixe os pacotes de Divisão-Mesclagem

  1. Baixe a versão mais recente do NuGet de NuGet.

  2. Abra um prompt de comando e navegue até o diretório onde baixou o arquivo nuget.exe. O download inclui comandos do PowerShell.

  3. Baixe o pacote de mesclagem divisão mais recente no diretório atual com o seguinte comando:

    nuget install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
    

Os arquivos são colocados em um diretório chamado Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.<x.x.xxx.x>, onde <x.x.xxx.x> reflete o número da versão. Localize os arquivos do serviço de divisão e mesclagem no subdiretório content\splitmerge\service e os scripts de divisão e mesclagem do PowerShell (e as dlls do cliente necessárias) no subdiretório content\splitmerge\powershell.

Pré-requisitos

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

  2. Verifique se o servidor permite que os Serviços do Azure se conectem a ele. No portal, em Configurações de Firewall, 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. Crie um serviço de nuvem do Azure para seu serviço de divisão/mesclagem.

Configurar o serviço de divisão e mesclagem

Configuração do serviço de Divisão-Mesclagem

  1. Na pasta na qual você baixou os assemblies de divisão e mesclagem, crie uma cópia do arquivo ServiceConfiguration.Template.cscfg fornecido junto a SplitMergeService.cspkg e renomeie-o para ServiceConfiguration.cscfg.

  2. Abra ServiceConfiguration.cscfg em um editor de texto como o Visual Studio que valide as entradas como o formato de impressões digitais de certificado.

  3. Crie um novo banco de dados ou escolha um já existente para servir como o banco de dados de status para as operações de Divisão/Mesclagem e recupere a cadeia de conexão do banco de dados.

    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.

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

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

  4. Insira essa cadeia de conexão no arquivo .cscfg nas seções de função SplitMergeWeb e SplitMergeWorker na configuração de ElasticScaleMetadata.

  5. Para a função SplitMergeWorker, digite uma cadeia de caracteres de conexão válida para o armazenamento do Azure para a configuração WorkerRoleSynchronizationStorageAccountConnectionString.

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

Crie um novo diretório e, nesse diretório, execute o seguinte comando usando uma janela de Prompt de comando do desenvolvedor para o Visual Studio :

makecert ^
-n "CN=*.cloudapp.net" ^
-r -cy end -sky exchange -eku "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" ^
-a sha256 -len 2048 ^
-sr currentuser -ss root ^
-sv MyCert.pvk MyCert.cer

No prompt de senha para proteger a chave privada, insira uma senha forte e confirme-a. Quando solicitado, insira a senha novamente. Selecione Sim no final para importá-la no repositório Raiz de autoridades de certificação confiável.

Criar um arquivo PFX

Execute o seguinte comando na mesma janela onde o makecert foi executado; use a mesma senha que você usou para criar o certificado:

pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>

Importe o certificado do cliente no repositório pessoal

  1. No Windows Explorer, clique duas vezes em MyCert.pfx.
  2. No Assistente de importação de certificado, selecione o Usuário Atual e clique em Avançar.
  3. Confirme o caminho do arquivo e selecione Avançar.
  4. Digite a senha, deixe a opção Incluir todas as propriedades estendidas marcada e selecione Avançar.
  5. Deixe a opção Selecionar automaticamente o repositório de certificados[...] marcada e clique em Avançar.
  6. Selecione Fim e OK.

Carregue o arquivo PFX para o serviço de nuvem

  1. Acesse o portal do Azure.
  2. Selecione Serviços de Nuvem.
  3. Selecione o serviço de nuvem criado anteriormente para o serviço de divisão-mesclagem.
  4. Selecione Certificados no menu superior.
  5. Selecione Carregar na barra inferior.
  6. Selecione o arquivo PFX e digite a mesma senha como antes.
  7. Depois de concluído, copie a impressão digital do certificado da nova entrada na lista.

Atualize o arquivo de configuração de serviço

Cole a impressão digital do certificado copiado anteriormente no atributo de impressão digital/valor dessas configurações. Para a função de trabalho:

<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Para a função da web:

<Setting name="AdditionalTrustedRootCertificationAuthorities" value="" />
<Setting name="AllowedClientCertificateThumbprints" value="" />
<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="SSL" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="CA" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Para implantações de produção, certificados separados devem ser usados para a autoridade de certificação, para criptografia, o certificado do servidor e os certificados de cliente. Para obter instruções detalhadas sobre isso, consulte a Configuração de segurança.

Implantar o serviço

  1. Vá para o Portal do Azure
  2. Selecione o serviço de nuvem que você já criou.
  3. Selecione Visão geral.
  4. Escolha o ambiente de preparo e clique em Carregar.
  5. Na caixa de diálogo, digite um rótulo de implantação. Para ambos Package e Configuration, selecione From Local e escolha o arquivo SplitMergeService.cspkg e o arquivo cscfg que você configurou anteriormente.
  6. Certifique-se de que a caixa de seleção rotulada Implantar mesmo se uma ou mais funções contiverem uma única instância esteja marcada.
  7. Clique no botão de verificação no canto inferior direito para iniciar a implantação. Isso poderá levar alguns minutos para ser concluído.

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 no seu cscfg é 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 Habilitada.

Testar a implantação do serviço

Conectar-se com um navegador da Web

Determine o ponto de extremidade da web do serviço de Divisão-Mesclagem. Encontre-o no portal acessando a Visão geral do serviço de nuvem e procurando em URL do Site no lado direito. Substitua http:// por https://, uma vez que as configurações de segurança padrão desabilitam o ponto de extremidade HTTP. Carregue a página para este URL no seu navegador.

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.

Solução de problemas

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.

Recursos adicionais

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.