Cambio de servidores: redirigir a nueva IP = ¿Sin tiempo de inactividad?

13

Estoy cambiando los servidores de mi sitio web. La IP del servidor antiguo no se puede mover al nuevo. Para no tener tiempo de inactividad estoy planeando hacer lo siguiente, por favor alguien confirme que funcionará:

  1. Configure el nuevo servidor y escuche en la nueva IP
  2. El servidor antiguo redirige todo el tráfico a la nueva IP
  3. Cambiar los registros DNS para que apunten a la nueva IP

Mi lógica me dice que cuando redirijo a la nueva IP desde mi antiguo cuadro, el usuario no verá el nombre de dominio en el navegador pero sí verá la nueva IP. ¿Hay alguna manera de redirigir a la nueva IP y enviarla junto con el HOSTNAME para que el usuario vea el nombre de dominio en el navegador?

Estoy haciendo esto porque el sitio está en uso constante y simplemente cambiar la configuración de DNS no funcionará, ya que la base de datos no se sincronizará entre los servidores nuevos y antiguos durante la propagación.

Denis Pshenov
fuente
3
Probablemente lo haya pensado pero no lo haya mencionado: no olvide reducir el TTL de las entradas DNS relevantes.
cjc
¿Este sitio web es utilizado solo por humanos o hay aplicaciones que podrían conectarse a él? Por ejemplo, consumir servicios web? Si ese es el caso, puede tener tiempo de inactividad. Java almacena en caché los resultados de DNS y puede no respetar la nueva entrada de DNS hasta que se reinicie. A menos que pueda mantener el reenvío en línea durante mucho tiempo. Además, si utiliza cifrado, la redirección implicará algunos pasos adicionales.
Bram
¿Qué tipo de bases de datos estás usando? Tiene razón en que el cambio de DNS no resolverá el problema del tiempo de inactividad, lo hago todo el tiempo en mi trabajo y puedo darle pasos detallados, sin embargo, si su base de datos está en el mismo servidor, arroja un problema menor que generalmente se soluciona fácilmente. ven.
Anthony Fornito
Además, ¿qué tipo de servidor tiene Windows o Linux? Después de leer algunas de las respuestas, todos apuntan a Linux, pero realmente no veo nada en su pregunta de que esté usando IIS vs sabor Linux
Anthony Fornito

Respuestas:

19

Aquí está el método que funcionó para mí:

  1. Sincronice los archivos y las bases de datos con el nuevo servidor.
  2. Realice una resincronización justo antes del corte.
  3. Cambie el DNS para que apunte al nuevo servidor.
  4. Reenvíe la solicitud que llega a la IP anterior al nuevo servidor hasta que se complete la propagación de DNS.

Así es como haría el paso 4:

Configuraremos IPTables en un servidor Linux para redirigir todo el tráfico que ingresa en el puerto 80, (que es el puerto predeterminado del servidor web), a un servidor con la IP 122.164.34.240. El primer paso es configurar su caja de Linux para permitir que este tipo de reenvío tenga lugar. Abra una ventana de terminal, inicie sesión como usuario root y ejecute el siguiente comando:

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

El siguiente paso es decirle a IPTables que redirija el tráfico al nuevo servidor:

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

Aquí es donde ocurre la magia de IPTables. Con el tercer y último paso, le decimos a IPTables que reescriba el origen de las conexiones al puerto 80 del nuevo servidor para que parezca provenir del servidor anterior.

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

El paso final es necesario porque si no le decimos al servidor web del nuevo servidor que las conexiones provienen de las máquinas del cliente, pensaría que se originan en el servidor anterior.

Es posible que también desee repetir esto para las bases de datos y el puerto del servidor de correo electrónico.

Shain Padmajan
fuente
quiso decir -A en lugar de -D ?? -D es eliminar una regla, ¿no? De todos modos, después de hacer eso, la caja vieja definitivamente está tratando de redirigir porque ya no está cargando la web, pero falla porque la nueva web tampoco se muestra, solo dice que la conexión ha excedido el tiempo de espera. ¿Hay alguna otra configuración que deba hacer? Tal vez algo en mi nueva caja?
Denis Pshenov
¡No importa, lo arreglé! Resulta que mi muro costero estaba bloqueando la redirección. Lo había permitido en las reglas.
Denis Pshenov
Lamento eso. Tienes razón, fue -A y no -D. He actualizado la publicación.
Shain Padmajan
1
Solo una advertencia: el enfoque que usa iptables reenviará todo el tráfico al nuevo sitio, pero cuando llegue allí, parecerá haberse originado en su antiguo servidor y no en la dirección IP real del navegador original. Esto romperá cosas como el análisis geográfico. En particular, nunca se sienta tentado a reenviar el puerto 25 de esta manera para el correo electrónico o puede crear accidentalmente un relé abierto porque el correo de un spammer a través del servidor antiguo será tratado por su nuevo servidor como si fuera de una de sus propias máquinas que puede bien se confía y se permite retransmitir.
Gary Bilkus
@ShainPadmajan, aunque tarde, muchas gracias, esto funcionó de
maravilla
5

También puede buscar agregar múltiples registros A. Por ejemplo, Google usa esto, verifique su salida 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

Si agrega varios registros A a un dominio, los visitantes recibirán múltiples IP y los probarán en ese orden. Si uno falla, el cliente pasa al siguiente para intentarlo.

Configure la nueva IP como un registro A adicional 24 horas por adelantado, inicie un nuevo servidor, apague el viejo, elimine la IP.

JapyDooge
fuente
Excepto, no agregue el registro A hasta que se haya iniciado el nuevo servidor. :)
Aaron Copley
@ Aaron: ¿por qué no? Agregar un registro A toma varias horas (hasta 24 horas para estar completamente activo), y mientras el segundo servidor no esté activo, los clientes elegirán el primero.
JapyDooge
Cuando el TTL de una zona caduca, su servidor de nombres es consultado nuevamente por el recurso y obtendrá ambas respuestas. Si agrega el nuevo registro A y espera una cantidad arbitraria de tiempo para iniciar el servidor, es probable que la gente ya se esté resolviendo en un host que aún no está disponible. Si el nuevo servidor ya está activo, no tiene que preocuparse por ello.
Aaron Copley
1

Otra opción es usar un VIP (IP virtual). Entonces, tus pasos serán:

  1. Configure el nuevo servidor y escuche en la nueva IP.
  2. Agregue un VIP al servidor anterior.
  3. Cambie los registros DNS para apuntar a la IP VIP. Hasta ahora, todo el tráfico se enviará al servidor anterior pero utilizando el VIP.
  4. Cuando esté listo, mueva el VIP al nuevo servidor.
  5. Opcionalmente, puede cambiar el DNS a la nueva IP del servidor y eliminar el VIP (después de un tiempo) del DNS.
Khaled
fuente
Me gusta tu solución Pero no estoy familiarizado con VIP y cómo obtener uno. ¿Podría apuntar en la dirección correcta?
Denis Pshenov
Es realmente simple Un comando como ifconfig eth0:0 <ip> <mask> upcreará una subinterfaz configurada con la IP y ifconfig eth0:0 downes suficiente para desactivarla.
Khaled
0

Ok, como mencionó sobre la replicación de la base de datos, debe hacer lo siguiente.

  1. Configure la replicación entre bases de datos en los dos servidores.
  2. Durante la transición, haga que la nueva base de datos del servidor sea el servidor primario y el servidor antiguo sea de solo lectura.
  3. Apunte la cadena de conexión de la base de datos de la aplicación al nuevo servidor tanto en el servidor antiguo como en el nuevo. Si su sitio usa Sesiones, asegúrese de que la sesión persista en DB.
  4. Cambie la dirección IP en DNS al nuevo servidor.
  5. Siga ejecutando ambos servidores durante al menos 48 horas.
Shyam Sundar CS
fuente
0
  1. Configure el nuevo servidor y escuche en la nueva IP
  2. Luego configure la redirección transparente. En el servidor antiguo, instale rinetd.

En rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Cambiar los registros DNS para que apunten a la nueva IP
yadaya
fuente
Hice apt-get install rinetd, cambié /etc/rinetd.conf a la nueva configuración, reinicié con /etc/init.d/rinetd restart pero no redirige. tampoco se muestra nada en el registro /var/run/rinetd.log
Denis Pshenov
Muestra tu iptables-save y cat /etc/sysctl.conf | grep ip_forwardpor favor.
yadaya
0

puede usar HA-Proxy frente a sus servidores web, cuando uno de ellos vaya al modo de mantenimiento, el servidor secundario se hará cargo.

apoc
fuente
-1

Su lista de qué hacer parece bastante sensata.

Como ejemplo, suponiendo que use apache, cuando hace algo como esto en apache en el servidor anterior:

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

El usuario verá el nuevo dominio en el navegador cuando navegue al sitio anterior. En este caso, la redirección también es permanente mientras el navegador esté funcionando.

Por lo tanto, siempre que implemente algún tipo de redireccionamiento en su servidor web además de sus otros cambios, debería estar bien.

aseq
fuente