Alteração de servidores - Redirecionar para novo IP = sem tempo de inatividade?

13

Estou mudando os servidores do meu site. O IP do servidor antigo não pode ser movido para o novo. Para não ter tempo de inatividade, estou planejando fazer o seguinte, confirme se alguém funcionará:

  1. Configure o novo servidor e ouça o novo IP
  2. Servidor antigo redireciona todo o tráfego para o novo IP
  3. Alterar registros DNS para apontar para o novo IP

Minha lógica me diz que, quando eu redirecionar para o novo IP da minha caixa antiga, o usuário não verá o nome de domínio no navegador, mas verá o novo IP. Existe uma maneira de redirecionar para o novo IP e enviar junto com o HOSTNAME, para que o usuário veja o nome do domínio no navegador?

Estou fazendo isso porque o site está em uso constante e simplesmente alterar as configurações de DNS não funcionará, pois o banco de dados não será sincronizado entre os servidores novos e antigos durante a propagação.

Denis Pshenov
fonte
3
Você provavelmente já pensou nisso, mas não o mencionou: não se esqueça de reduzir o TTL das entradas DNS relevantes.
CJC
Este site é usado apenas por seres humanos ou existem aplicativos que podem se conectar a ele? Por exemplo, consumir serviços da web? Se for esse o caso, você pode ter tempo de inatividade, no entanto. O Java armazena em cache os resultados do DNS e pode não respeitar a nova entrada DNS até que eles sejam reiniciados. A menos que você possa manter o encaminhamento on-line por um longo tempo. Além disso, se você usar o redirecionamento de criptografia, envolverá algumas etapas adicionais.
Bram
Que tipo de banco de dados você está usando? Você está certo, pois a alteração do DNS não resolverá o problema do tempo de inatividade; eu faço isso o tempo todo no meu trabalho e posso fornecer etapas detalhadas; no entanto, se você fizer o banco de dados no mesmo servidor, ele gera um pequeno problema que geralmente é facilmente resolvido. venha.
Anthony Fornito
Além disso, que tipo de servidor você possui Windows ou Linux? Depois de ler algumas das respostas, todos apontam para Linux, mas eu realmente não vejo nada na sua pergunta sobre o uso de IIS vs Linux.
Anthony Fornito

Respostas:

19

Aqui está o método que funcionou para mim:

  1. Sincronize os arquivos e bancos de dados com o novo servidor.
  2. Realize uma ressincronização imediatamente antes do corte.
  3. Mude o DNS para apontar para o novo servidor.
  4. Encaminhe a solicitação que chega ao IP antigo para o novo servidor até a propagação do DNS ser concluída.

Aqui está como eu faria a etapa 4:

Vamos configurar o IPTables em um servidor Linux para redirecionar todo o tráfego da porta 80 (que é a porta padrão do servidor da web) para um servidor com o IP 122.164.34.240. O primeiro passo é configurar sua caixa do Linux para permitir esse tipo de encaminhamento. Abra uma janela do terminal, efetue login como usuário root e execute o seguinte comando:

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

O próximo passo é dizer ao IPTables para redirecionar o tráfego para o novo servidor:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240

Aqui é onde a mágica do IPTables acontece. Com a terceira e última etapa, pedimos ao IPTables para reescrever a origem das conexões com a porta 80 do novo servidor, parecendo vir do servidor antigo.

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE

A etapa final é necessária porque, se não informarmos o servidor Web do novo servidor que as conexões são provenientes das máquinas clientes, ele pensaria que elas são originárias do servidor antigo.

Você pode repetir isso também para os bancos de dados e a porta do servidor de email.

Shain Padmajan
fonte
você quis dizer -A em vez de -D ?? -D é excluir uma regra, não é? De qualquer forma, depois de fazer isso, a caixa antiga definitivamente está tentando redirecionar porque não está mais carregando a Web, mas falha porque a nova Web também não está aparecendo, apenas diz que a conexão expirou. Existem outras configurações que tenho que fazer? Talvez algo na minha nova caixa?
Denis Pshenov 21/03/12
Não importa, eu consertei! Acontece que meu shorewall estava bloqueando o redirecionamento. Eu tinha permitido isso nas regras.
Denis Pshenov 21/03/12
Me desculpe por isso. Você está certo, era -A e não -D. Eu atualizei a postagem.
Shain Padmajan
1
Apenas um aviso - a abordagem usando o iptables encaminhará todo o tráfego para o novo site, mas quando ele chegar, parecerá ter se originado no seu servidor antigo e não no endereço IP real do navegador original. Isso vai quebrar coisas como análise geográfica. Em particular, nunca fique tentado a encaminhar a porta 25 dessa maneira para email, ou você poderá criar acidentalmente uma retransmissão aberta, porque as mensagens de um remetente de spam através do servidor antigo serão tratadas pelo novo servidor como se fossem de uma de suas próprias máquinas, o que pode pode ser confiável e autorizado a retransmitir.
Gary Bilkus
@ShainPadmajan, embora atrasado, muito obrigado, isso funcionou como charme mesmo em 2015.
Abhishek Madhani
5

Você também pode adicionar vários registros A. Por exemplo, o Google usa isso, verifique a saída do nslookup:

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139

Se você adicionar vários registros A a um domínio, os visitantes receberão vários IPs e os tentarão nessa ordem. Se um falhar, o cliente passará para o próximo a tentar.

Configure o novo IP como um registro A extra 24 horas antes, inicie um novo servidor, encerre o antigo e remova o IP.

JapyDooge
fonte
Exceto, não adicione o registro A até que o novo servidor tenha sido iniciado. :)
Aaron Copley
@ Aaron: por que não? Adicionar um registro A leva várias horas (até 24 horas para ficar totalmente ativo) e, enquanto o segundo servidor não estiver ativo, os clientes escolherão o primeiro.
JapyDooge
Quando o TTL de uma zona expira, o servidor de nomes é consultado novamente pelo recurso e ele obtém as duas respostas. Se você adicionar o novo registro A e esperar algum tempo arbitrário para iniciar o servidor, é provável que o pessoal já esteja resolvendo para um host que ainda não está disponível. Se o novo servidor já estiver ativo, você não precisa se preocupar com isso.
Aaron Copley
1

Outra opção é usar um VIP (IP virtual). Portanto, seus passos serão:

  1. Configure o novo servidor e ouça o novo IP.
  2. Adicione um VIP ao servidor antigo.
  3. Altere os registros DNS para apontar para o IP VIP. Até agora, todo o tráfego ainda será enviado para o servidor antigo, mas usando o VIP.
  4. Quando estiver pronto, mova o VIP para o novo servidor.
  5. Opcionalmente, você pode alterar o DNS para o novo IP do servidor e remover o VIP (depois de algum tempo) do DNS.
Khaled
fonte
Eu gosto da sua solução. Mas não estou familiarizado com VIP e como obter um. Você poderia apontar na direção certa?
Denis Pshenov 22/03/12
É realmente simples. Um comando como ifconfig eth0:0 <ip> <mask> upcriará uma sub-interface configurada com o IP e ifconfig eth0:0 downé suficiente para desativá-lo.
Khaled
0

Ok, desde que você mencionou a replicação do banco de dados, faça o seguinte.

  1. Replicação de instalação entre bancos de dados nos dois servidores.
  2. Durante a transição, torne o banco de dados do novo servidor como o servidor principal e o servidor antigo como somente leitura.
  3. Aponte a seqüência de conexão do banco de dados do aplicativo para o novo servidor no servidor antigo e no novo. Se o seu site usa sessões, verifique se a sessão persiste no banco de dados.
  4. Altere o endereço IP no DNS para o novo servidor.
  5. Continue executando os dois servidores por pelo menos 48 horas.
Shyam Sundar CS
fonte
0
  1. Configure o novo servidor e ouça o novo IP
  2. Em seguida, configure o redirecionamento transparente. No servidor antigo, instale o rinetd.

No rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Alterar registros DNS para apontar para o novo IP
yadaya
fonte
Eu fiz o apt-get install rinetd, alterei o /etc/rinetd.conf para as novas configurações, reiniciei com o /etc/init.d/rinetd restart, mas ele não redireciona. também nada
aparece
Mostre seu iptables-save e cat /etc/sysctl.conf | grep ip_forwardpor favor.
yadaya
0

você pode usar o HA-Proxy na frente de seus servidores Web, quando um deles estiver no modo de manutenção, o servidor secundário assumirá o controle.

apoc
fonte
-1

Sua lista do que fazer parece bastante sensata.

Por exemplo, supondo que você use apache, quando fizer algo parecido com isso no apache no servidor antigo:

redirect permanent / http://newserver.example.com

O usuário verá o novo domínio no navegador ao navegar para o site antigo. Nesse caso, o redirecionamento também é permanente enquanto o navegador estiver em execução.

Portanto, desde que você implemente algum tipo de redirecionamento em seu servidor da Web, além de outras alterações, você estará bem.

aseq
fonte