Definição de problema
Nosso servidor de banco de dados precisa ser transferido para outro datacenter. Ele é executado no Microsoft SQL Server 2012 Enterprise (64 bits) e contém dois bancos de dados de cerca de 2 TB e 1 TB.
Ter pouco ou nenhum tempo de inatividade para isso seria o ideal.
carga de trabalho
Esses bancos de dados são usados para um site .NET e são constantemente atualizados.
Não estar disponível no fim de semana seria aceitável. O banco de dados atualmente em uso permaneceria o único em uso até a mudança para o novo.
Idealmente, essa troca seria feita apenas alterando as entradas de DNS para apontar para o novo servidor de banco de dados, certificando-se de que o banco de dados não esteja sendo atualizado.
Além disso, o tempo gasto por essa operação realmente não importa, desde que a troca de um servidor para outro (tempo de inatividade) seja mantida baixa.
Abordagens consideradas
Backup e restauração
Isso já foi feito no passado, mas envolveu um alto tempo de inatividade, embora fosse feito por meio de uma rede interna, de forma mais eficiente do que pela Internet
Envio de logs
Pelo que entendi, essa abordagem minimizaria o tempo de inatividade configurando um mestre/escravo e transferindo uma cópia exata do banco de dados mestre para seu escravo sendo somente leitura. Como mencionado acima, nenhum acesso ao escravo seria necessário e só precisamos de uma maneira de ter uma réplica do banco de dados mestre sem corrupção de dados.
Também parece ser bastante eficiente em termos de utilização de recursos e não afetaria muito o desempenho do mestre.
Posso estar errado sobre essa abordagem, então sinta-se à vontade para me corrigir.
Espelhamento de banco de dados
Não estou muito ciente dessa abordagem, mas parece uma opção válida. Não há necessidade de sincronização em tempo real e o desempenho do mestre é muito importante, portanto, assíncrono seria o caminho a seguir se essa abordagem fosse escolhida.
Outras opções?
Esse servidor é executado diretamente em hardware bare metal, portanto soluções de nível inferior infelizmente não são uma opção. Talvez haja uma maneira melhor de fazer isso?
Restrições
Conforme descrito, esses bancos de dados são muito grandes a ponto de serem difíceis de manter, mas esse é outro problema.
As versões do SQL Server serão as mesmas (Microsoft SQL Server 2012 Enterprise 64 bits).
Ele terá que ser transferido pela rede entre dois datacenters, portanto, provavelmente pela Internet. Ter discos enviados de um site para outro para uma sincronização inicial infelizmente não é uma opção. Ter algum tipo de segurança para a transferência seria o ideal, mas faremos o melhor nesta situação.
Isso deve dar uma boa visão geral de nossas necessidades para esta tarefa e esperamos que alguns de vocês já tenham enfrentado essa situação antes.
O backup e a restauração diretos obviamente estão fora de questão. Eu também não consideraria replicação de qualquer tipo.
O espelhamento de banco de dados é relativamente simples de configurar, mas requer conectividade em tempo real entre os dois servidores, configuração de parceiros e endpoints, etc. Grupos de disponibilidade podem ser uma opção, mas além das complicações de rede, você também precisa ter os dois servidores como membros do mesmo WSFC - o que significa que ambos devem estar no mesmo domínio. Esta não é uma configuração típica (ou pode até ser feita para funcionar temporariamente) para uma mudança de centro de dados.
Meu voto seria para o envio de logs. O bom disso é que você pode usar os backups e backups de log que já está fazendo (certo?) E não precisa necessariamente ter conectividade em tempo real entre os dois bancos de dados - eles não precisam saber sobre cada um outros, você não precisa configurar endpoints para espelhamento, parceiros, segurança, etc. Você só precisa de uma maneira de obter arquivos do servidor antigo para um local onde possam ser restaurados no novo servidor. Você pode fazer um backup completo com bastante antecedência, transferi-lo para o novo servidor, restaurá-lo e, em seguida, aplicar (possivelmente diferenças e) backups de log incrementais desse ponto até o momento do corte. O processo é bastante simples, e há muitos tutoriais sobre envio de logs disponíveis online, caso você encontre alguma dificuldade.
Se o aplicativo da web estiver se movendo com o banco de dados, já que o DNS pode demorar um pouco para se propagar, você pode querer fazer uma troca nas strings de conexão do aplicativo antigo para fazê-los apontar para o IP do novo servidor de banco de dados assim que for gravável , pois - mesmo após a troca, e mesmo que suas configurações de TTL sejam rígidas - os clientes podem continuar acessando os servidores da web antigos. Tudo depende de quanto respeito seus provedores dão aos seus TTLs.
Recentemente, migrei 15 TB em 6 bancos de dados usando espelhamento. Muito simples e funcionou perfeitamente com apenas alguns segundos de tempo de failover.
Editar% s:
Eu tinha dois novos SQL Servers virtualizados. Os bancos de dados vinham de 3 servidores que haviam superado o crescimento e estavam afetando o desempenho dos bancos de dados menores hospedados neles.
O processo foi muito simples.
Optei por deixá-los no modo assíncrono até que estivéssemos prontos para fazer failover para reduzir a carga na rede etc. O espelhamento tem alguma reputação de causar latência durante a manutenção (índice/estatística) e outras atividades de alto volume, mas não o fiz descobrir que isso é verdade. Eles precisam ser alternados para o modo síncrono antes do failover manual.
Durante a próxima janela de manutenção, falhei manualmente em cada banco de dados e, após alguns testes de fumaça, desliguei o espelhamento e, por fim, removi os arquivos de dados antigos dos servidores de origem. Uma peculiaridade neste processo é que a falha de um banco de dados espelhado deixa o antigo primário em um estado de recuperação, então, a menos que você se sinta confortável em apenas descartá-los, você precisa trazê-los de volta online e depois desanexar, ou qualquer que seja o seu método preferido de remoção. . Além disso, não configurei uma testemunha para nada disso porque não queria failover automático. Este foi um evento controlado.
Por favor, deixe-me saber se você gostaria de mais detalhes. Deixei de fora as especificações do servidor e da rede, mas posso fornecer se você quiser.
Obrigado