Movendo muitos sites para um novo servidor - qual é a maneira mais rápida de atualizar seus registros DNS?

7

Estou planejando migrar uma grande quantidade de sites (aproximadamente 100) para um novo servidor e estou no processo de planejamento de migração.

Uma típica zona DNS para cada site tem dois registros A apontando para o IP do servidor web, um para example.com e um para o subdomínio www .

Quando estivermos todos preparados e prontos para iniciar o novo servidor para produção, alterar registros DNS de 100x2 consumirá muito tempo, por isso estou procurando uma maneira de tornar isso mais rápido. Em alguns casos, li sobre a criação de um script bash que repete os registros de DNS e realiza um find-replace com o novo IP. Em outros tópicos, li sugestões sobre como adicionar registros com o novo IP para que, quando o servidor atual não estiver mais disponível, o servidor DNS aponte as solicitações para o próximo registro, que contém o novo IP.

Além destes, existe algum cenário em que eu poderia substituir os registros A com algum outro tipo de entrada DNS, ou seja, um nome de host para que, quando chegar a hora, eu só possa alterar o IP do nome do host com o novo e todos os sites apontam para o novo servidor? Tenho certeza de que 'hostname' não é o termo certo, mas espero que todos tenham a ideia.

    
por bikey77 27.09.2018 / 14:58

4 respostas

12

O termo que você está procurando é CNAME , e a resposta para sua pergunta é sim e não.

Primeiro, aqui está um exemplo de como um CNAME funciona em um arquivo de zona.

example.se  IN SOA  ns1.example.se. hostmaster.example.se. (
            [....]
            )

server1    A       10.1.2.3
www        CNAME   server1

Agora, basta atualizar o registro server1 para mover server1 e www para o novo endereço IP.

O CNAME não precisa apontar para um endereço dentro do mesmo domínio; também poderia ser assim:

example.se  IN SOA  ns1.example.se. hostmaster.example.se. (
            [....]
            )

www         CNAME   server1.example.org.

Agora, quando você atualizar o registro A de server1 na zona example.org , o registro de www.example.se seguirá sem nenhuma configuração adicional.

A parte ruim, do seu ponto de vista, é que isso não funciona para o registro do ápice - isso significa que o domínio "nu". Em outras palavras, você pode fazer www.example.com em um CNAME, mas não pode fazer isso com example.com . Isso ocorre porque, quando você usa um registro CNAME, não é possível ter nenhum registro adicional para essa entrada - o que significa que você não pode ter registros de servidor de email nem registros de servidor de nomes ... o que significa que o domínio deixará de funcionar. p>

A solução de melhor prática é usar algum tipo de software de gerenciamento de configuração, como fantoche, chef ou ansible, para gerar os arquivos de zona a partir de um modelo. Se, por algum motivo, isso não for possível para você, use um script para substituir os endereços IP em todos os arquivos.

Você também desejará reduzir o valor do TTL para o domínio no devido tempo antes da migração. (E não se esqueça de atualizar o número de série do arquivo de zona - eu tenho, e é muito embaraçoso ...)

    
por 27.09.2018 / 15:20
3

Primeiro, a resposta depende de como o seu DNS é implementado. Você é de hospedagem própria usando algo como bind, unbound ou vários outros servidores DNS? Seus servidores DNS estão usando arquivos de texto para configuração, eles estão usando uma interface GUI (como servidores Windows), estão usando uma API de script (como o PowerShell) ou estão usando uma interface da Web (comum se você terceirizou o DNS). O DNS terceirizado também tem, às vezes, uma API REST que você pode usar.

Você provavelmente desejará usar uma API de script para fazer as atualizações ou editar um arquivo de texto, já que ambos podem ser automatizados facilmente. Se for um arquivo de texto, você pode até prepará-lo com antecedência e copiá-lo no lugar ao fazer a migração.

Aliás, fazer esse tipo de mudança em seu tipo de escala é o motivo pelo qual muitas pessoas agora usam ferramentas de DevOps como Chef, Ansible, Puppet, Salt, ... Obviamente, essas são grandes ferramentas que exigem planejamento, então isso não é vai ser de ajuda imediata para esta necessidade específica, mas pode tornar a sua vida mais fácil a longo prazo.

Algumas outras considerações importantes:

  • Verifique seu TTL. Cerca de um dia ou uma semana antes da migração, altere o TTL para o menor que você pode fazer. Aumente o TTL após a conclusão da migração.

  • Não esqueça de incrementar o número de série no registro SOA! APIs e interfaces da Web podem ou não fazer isso automaticamente para você. Se o seu servidor DNS usa arquivos de texto, você deve se lembrar de fazê-lo.

  • Dependendo da natureza do servidor, veja se você pode executar o antigo e o novo lado a lado por algum tempo. Se você puder, talvez não seja necessário concluir todas as atualizações de DNS de uma só vez.

por 27.09.2018 / 20:57
2

Se eu entendi direito, o servidor antigo tem um único endereço IP e o novo também tem apenas um.

Então, o que você pode fazer é configurar o novo servidor e rotear todo o tráfego relevante de http / https / ftp / whatever para o IP antigo e atualizar os registros DNS para mostrar o novo IP.

Se você tiver apenas um IP, poderá usar um simples localizar / substituir para alterar todos os IPs no DNS (não se esqueça de atualizar o número de série) de uma vez e aguardar o esgotamento do TTL atual. Depois que o TTL acabar, basta remover as rotas do novo servidor e ajustar suas outras configurações, para que ele sirva diretamente aos sites, em vez de redirecioná-los.

Antes de remover as rotas, os sites devem ter sido movidos para o novo local, obviamente. Isso tem a vantagem de você não precisar depender de outros servidores DNS para atualizar seus registros a tempo, basta "esperar". Para encurtar esse período você pode reduzir o TTL, mas esteja ciente de que alguns caches de DNS por aí ignoram as configurações de TTL, é por isso que eu não confio mais em TTLs.

Editar / mais explicações: Para facilitar o entendimento:

Você também pode simplesmente instalar seu novo servidor agora mesmo, configurar tudo e mover todos os seus sites para o novo IP e, então, rotear todo o tráfego do servidor antigo para o novo servidor.

Por exemplo seu servidor antigo tem o IP 192.0.2.1 seu novo servidor tem o IP 198.51.100.2

Seu DNS aponta para 192.0.2.1 para todos os sites (?) e o servidor da Web decide qual conteúdo será veiculado pelo nome do domínio solicitado, por exemplo, example.com - > /var/www/sites/example.com e www.example.com - > /var/www/sites/example.com .

Então você acabou de transformar isso:

example.com -> 192.0.2.1

Para isso (assim que você moveu os sites para 198.51.100.2):

example.com -> 192.0.2.1 -> 198.51.100.2

Em seguida, altere os registros DNS para apontar para 198.51.100.2:

example.com -> 198.51.100.2

O problema com o DNS é que a atualização nunca é instantânea, portanto, para alguns de seus clientes, o example.com ainda apontará para 198.51.100.2 por um período de tempo variável (seja o TTL que você definiu ou, se eles o ignorarem, quem sabe quanto tempo).

Então, meu ponto é: em vez de depender do DNS, redirecione o tráfego na camada IP para reduzir o tempo de inatividade. Espero que isso torne isso um pouco mais claro.

No Ubuntu, você pode fazer isso com o encaminhamento e o NAT (por exemplo, roteando http e https para o seu destino antigo 198.51.100.2 para o novo destino 198.51.100.2; essas configurações são feitas no servidor antigo):

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -m state --state NEW -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 198.51.100.2:80
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 198.51.100.2:443
iptables -t nat -A POSTROUTING -j MASQUERADE
    
por 27.09.2018 / 15:31
1

Uma solução rápida (não a mais elegante, mas provavelmente funcionando) seria apenas substituir o ip antigo pelo novo por um simples find-replace.

Primeiro faça o backup dos arquivos de zona.

Em seguida, verifique se há problemas:

grep 'ol\.d\.i\.p' *.zone

Verifique se existem linhas, que não são registros que você deseja substituir

Em seguida, substitua o ip:

sed -i 's/ol\.d\.i\.p/ne.w.i.p/g' *.zone
grep 'ne\.w\.i\.p' *.zone # check if the new lines look correct

Isso não é nada que você deva fazer em um script que seja executado todos os dias, mas, para uma migração única, isso pode ser suficiente para resolver o problema sem começar a programar ferramentas de migração sofisticadas.

  • O comando grep apenas procura por linhas que contenham a expressão regular (aqui: uma correspondência literal do ip, o . precisa ser ignorado porque possui um significado especial na regex).
  • sed é usado para operações baseadas em linha em fluxos ou arquivos (usando a opção -i ). s/regex/replacement/g substitui a expressão regular (igual à usada no comando grep ) pela substituição (o novo ip). /g significa global, o que garante que o ip seja substituído várias vezes, se houver várias correspondências em uma única linha.
por 27.09.2018 / 16:37