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

Aplica-se a:Banco de Dados SQL do Azure

A ferramenta de mesclagem dividida permite mover dados entre bancos de dados fragmentados. Consulte Movendo dados entre bancos de dados em nuvem expandidos.

Nota

A ferramenta de mesclagem dividida destina-se a funcionar com Serviços de Nuvem (Clássicos) e não com Serviços de Aplicativo.

Baixe os pacotes Split-Merge

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

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

  3. Baixe o pacote Split-Merge mais recente no diretório atual com o comando abaixo:

    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 mesclagem dividida no subdiretório content\splitmerge\service e os scripts do PowerShell Split-Merge (e dlls de 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 mesclagem dividida. Aceda ao portal do Azure. Crie um novo Banco de Dados SQL. Dê um nome ao banco de dados e crie um novo administrador e senha. Certifique-se de registrar o nome e a senha para uso posterior.

  2. Certifique-se de que seu servidor permite que os Serviços do Azure se conectem a ele. No portal, nas Configurações do Firewall, verifique se a configuração Permitir acesso aos Serviços do Azure está definida como Ativado. Clique no í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 Mesclagem Dividida.

Configurar o serviço Split-Merge

Configuração do serviço Split-Merge

  1. Na pasta na qual você baixou os assemblies Split-Merge, crie uma cópia do arquivo ServiceConfiguration.Template.cscfg fornecido junto com SplitMergeService.cspkg e renomeie-o ServiceConfiguration.cscfg.

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

  3. Crie um novo banco de dados ou escolha um banco de dados existente para servir como o banco de dados de status para operações Split-Merge e recupere a cadeia de conexão desse banco de dados.

    Importante

    Neste momento, o banco de dados de status deve usar o agrupamento latino (SQL_Latin1_General_CP1_CI_AS). Para obter mais informações, consulte Nome de agrupamento do Windows (Transact-SQL).

    Com o Banco de Dados SQL do Azure, a cadeia 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 ElasticScaleMetadata.

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

Configurar a segurança

Para obter instruções detalhadas sobre como configurar a segurança do serviço, consulte a configuração de segurança Split-Merge.

Para fins de uma implantação de teste simples para este tutorial, um conjunto mínimo de etapas de configuração será executado para colocar o serviço em funcionamento. Essas etapas permitem que apenas uma máquina/conta que as executa se comunique com o serviço.

Criar um certificado autoassinado

Crie um novo diretório e, a partir desse diretório, execute o seguinte comando usando uma janela do Prompt de Comando do Desenvolvedor para 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

É-lhe pedida uma palavra-passe para proteger a chave privada. Introduza uma palavra-passe forte e confirme-a. Em seguida, você será solicitado a usar a senha mais uma vez depois disso. Clique em Sim no final para importá-lo para o armazenamento raiz de autoridades de certificação confiáveis.

Criar um arquivo PFX

Execute o seguinte comando a partir da mesma janela onde 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>

Importar o certificado do cliente para o repositório pessoal

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

Carregue o arquivo PFX para o serviço de nuvem

  1. Aceda ao portal do Azure.
  2. Selecione Serviços na nuvem.
  3. Selecione o serviço de nuvem criado acima para o serviço Dividir/Mesclar.
  4. Clique em Certificados no menu superior.
  5. Clique em Carregar na barra inferior.
  6. Selecione o arquivo PFX e digite a mesma senha acima.
  7. Uma vez concluído, copie a impressão digital do certificado da nova entrada na lista.

Atualizar o arquivo de configuração do serviço

Cole a impressão digital do certificado copiada acima no atributo thumbprint/value dessas configurações. Para a função de trabalhador:

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

Para a função 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" />

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

Implante seu serviço

  1. Aceda ao Portal do Azure
  2. Selecione o serviço de nuvem que você criou anteriormente.
  3. Clique em Descrição geral.
  4. Escolha o ambiente de preparo e clique em Carregar.
  5. Na caixa de diálogo, insira um rótulo de implantação. Para 'Package' e 'Configuration', clique em 'From Local' e escolha o arquivo SplitMergeService.cspkg e seu arquivo cscfg que você configurou anteriormente.
  6. Verifique se a caixa de seleção Implantar mesmo que uma ou mais funções contenham uma única instância esteja marcada.
  7. Pressione o botão de seleção no canto inferior direito para iniciar a implantação. Espere que demore alguns minutos a concluir.

Solucionar problemas de implantação

Se a sua função Web não ficar online, é provável que seja um problema com a configuração de segurança. Verifique se o TLS/SSL está configurado conforme descrito acima.

Se sua função de trabalho não ficar online, mas sua função Web for bem-sucedida, é mais provável que seja um problema de conexão com o banco de dados de status que você criou anteriormente.

  • Certifique-se de que a cadeia de conexão em seu cscfg é precisa.

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

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

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

  • Certifique-se de que o nome do servidor não comece com https://.

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

Testar a implantação do serviço

Conecte-se com um navegador da Web

Determine o ponto de extremidade da Web do seu serviço Split-Merge. Você pode encontrar isso no portal indo para a Visão geral do seu serviço de nuvem e procurando em URL do site no lado direito. Substitua http:// por https:// , pois as configurações de segurança padrão desabilitam o ponto de extremidade HTTP. Carregue a página deste URL no seu navegador.

Teste com scripts do PowerShell

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

Importante

Os scripts de exemplo são executados no PowerShell 5.1. Atualmente, 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 Split/Merge (consulte a tabela abaixo para obter uma descrição detalhada)

  2. ExecuteSampleSplitMerge.ps1 - executa operações de teste na camada de dados de teste (consulte a tabela abaixo para obter uma descrição detalhada)

  3. GetMappings.ps1 - script de exemplo de nível superior que imprime o estado atual dos mapeamentos de estilhaços.

  4. ShardManagement.psm1 - script auxiliar que encapsula a API ShardManagement

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

    Arquivo do PowerShell Passos
    SetupSampleSplitMergeEnvironment.ps1 1. Cria um banco de dados do gerenciador de mapas de estilhaços
    2. Cria 2 bancos de dados de estilhaços.
    3. Cria um mapa de estilhaços para esses bancos de dados (exclui quaisquer mapas de estilhaços existentes nesses bancos de dados).
    4. Cria uma pequena tabela de amostra em ambos os fragmentos e preenche a tabela em um dos fragmentos.
    5. Declara o SchemaInfo para a tabela fragmentada.
    Arquivo do PowerShell Passos
    ExecuteSampleSplitMerge.ps1 1. Envia uma solicitação de divisão para o frontend da Web do Serviço de Mesclagem Dividida, que divide metade dos dados do primeiro fragmento para o segundo fragmento.
    2. Sonda o frontend da Web para o status da solicitação dividida e aguarda até que a solicitação seja concluída.
    3. Envia uma solicitação de mesclagem para o frontend da Web do Serviço de Mesclagem Dividida, que move os dados do segundo fragmento de volta para o primeiro fragmento.
    4. Sonda o frontend da Web para o status da solicitação de mesclagem e aguarda até que a solicitação seja concluída.

Usar o PowerShell para verificar sua implantação

  1. Abra uma nova janela do PowerShell, navegue até o diretório onde você baixou o pacote Split-Merge e navegue até o diretório "PowerShell".

  2. Crie um servidor (ou escolha um servidor existente) onde o gerenciador de mapas de estilhaços e os fragmentos serão criados.

    Nota

    O script SetupSampleSplitMergeEnvironment.ps1 cria todos esses bancos de dados no mesmo servidor por padrão para manter o script simples. Esta não é uma restrição do Serviço de Mesclagem Dividida em si.

    Um login de autenticação SQL com acesso de leitura/gravação aos DBs será necessário para que o serviço Split-Merge mova dados e atualize o mapa de estilhaços. Como o Serviço de Mesclagem Dividida é executado na nuvem, ele atualmente não oferece suporte à Autenticação Integrada.

    Verifique se o servidor está configurado para permitir o acesso a partir do endereço IP da máquina 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 eliminará todas as estruturas de dados de gerenciamento de mapa de estilhaços existentes no banco de dados do gerenciador de mapas de estilhaços e nos fragmentos. Pode ser útil executar novamente o script se você deseja reinicializar o mapa de estilhaços ou fragmentos.

    Exemplo de linha de comando:

    .\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 (movendo metade dos dados no primeiro fragmento para o segundo fragmento) e, em seguida, uma operação de mesclagem (movendo os dados de volta para o primeiro fragmento). Se você configurou o TLS e deixou o ponto de extremidade http desativado, certifique-se de usar o ponto de extremidade https://.

    Exemplo de linha de comando:

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

    Se você receber o erro abaixo, é mais provável que seja um problema com o certificado do seu 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.

    Se tiver sucesso, a saída deve ser parecida com a abaixo:

    > .\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 outros tipos de dados. Todos esses scripts usam um parâmetro opcional -ShardKeyType que permite especificar o tipo de chave. O padrão é Int32, mas você também pode especificar Int64, Guid ou Binary.

Pedidos de criação

O serviço pode ser usado usando a interface do usuário da Web ou importando e usando o módulo PowerShell SplitMerge.psm1 que 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 tem uma coluna de chave de fragmentação e tem dados de linha diferentes em cada fragmento. Uma tabela de referência não é fragmentada, portanto, contém 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 usados para JOIN com tabelas fragmentadas em consultas.

Para executar uma operação de mesclagem dividida, 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 descrevendo o nome do esquema pai da tabela (opcional, o padrão é "dbo"), o nome da tabela e o nome da coluna nessa tabela que contém a chave de fragmentação.
  2. Para cada tabela de referência, crie um objeto ReferenceTableInfo descrevendo o nome do esquema pai da tabela (opcional, o padrão é "dbo") e o nome da tabela.
  3. Adicione os objetos TableInfo acima a um novo objeto SchemaInfo .
  4. Obtenha uma referência a um objeto ShardMapManager e chame GetSchemaInfoCollection.
  5. Adicione o SchemaInfo ao SchemaInfoCollection, fornecendo o nome do mapa de estilhaços.

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

O serviço Split-Merge não cria o banco de dados de destino (ou esquema para quaisquer tabelas no banco de dados) para você. Eles devem ser pré-criados antes de enviar uma solicitação para o serviço.

Resolução de Problemas

Você pode ver a mensagem abaixo ao executar os scripts PowerShell de exemplo:

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

Este erro significa que o seu certificado TLS/SSL não está configurado corretamente. Por favor, siga as instruções na seção 'Conectando-se com um navegador da web'.

Se não conseguir submeter pedidos, poderá ver isto:

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

Nesse caso, verifique seu arquivo de configuração, em particular a configuração para WorkerRoleSynchronizationStorageAccountConnectionString. Esse erro geralmente indica que a função de trabalho não pôde inicializar com êxito o banco de dados de metadados na primeira utilização.

Recursos adicionais

Ainda não está usando ferramentas de banco de dados elástico? Consulte o nosso Guia de Introdução. Para dúvidas, entre em contato conosco na página de perguntas e respostas da Microsoft para o Banco de dados SQL e para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no fórum de comentários do Banco de dados SQL.