La mejor manera de migrar una gran base de datos de SQL Server con poco tiempo de inactividad en la red

22

Definición del problema

Nuestro servidor de bases de datos debe transferirse a otro centro de datos. Se ejecuta en Microsoft SQL Server 2012 Enterprise (64 bits) y contiene dos bases de datos de aproximadamente 2 TB y 1 TB.

Tener poco o ningún tiempo de inactividad para esto sería ideal.

carga de trabajo

Esas bases de datos se utilizan para un sitio web .NET y se actualizan constantemente.

Sin embargo, tenerlo disponible durante el fin de semana sería aceptable. La base de datos actualmente en uso seguiría siendo la única en uso hasta que se cambie a la nueva.

Idealmente, ese cambio se realizará simplemente cambiando las entradas de DNS para que apunten al nuevo servidor de DB mientras se asegura de que la DB no se esté actualizando.

Además, el tiempo que lleva esta operación realmente no importa mientras el cambio de un servidor a otro (tiempo de inactividad) se mantenga bajo.

Enfoques considerados

  • Copia de seguridad y restaurar

    Esto se hizo en el pasado pero implicó un alto tiempo de inactividad a pesar de que se realizó a través de una red interna, de manera más eficiente que a través de Internet

  • Envío de registro

    Según tengo entendido, este enfoque minimizaría el tiempo de inactividad configurando un maestro / esclavo y transfiriendo una copia exacta de la base de datos maestra a su esclavo de solo lectura. Como se mencionó anteriormente, no sería necesario acceder al esclavo y solo necesitamos una forma de tener una réplica del DB maestro sin corrupción de datos.

    También parece ser bastante eficiente en términos de utilización de recursos y no afectaría en gran medida el rendimiento maestro.

    Podría estar equivocado acerca de este enfoque, así que siéntase libre de corregirme.

  • Duplicación de bases de datos

    No conozco demasiado ese enfoque, pero parece una opción válida. No es necesario tener sincronización en tiempo real y el rendimiento del maestro es bastante importante, por lo que sería asíncrono el camino a seguir si se eligiera este enfoque.

  • ¿Otras opciones?

    Ese servidor se ejecuta directamente en hardware desnudo, por lo que desafortunadamente las soluciones de nivel inferior no son una opción. Tal vez hay una mejor manera de hacer esto?

Restricciones

Como se describió, esas bases de datos son bastante grandes hasta el punto de que son difíciles de mantener, pero ese es otro problema.

Las versiones de SQL Server serán las mismas (Microsoft SQL Server 2012 Enterprise de 64 bits).

Tendrá que transferirse a través de la red entre dos centros de datos, por lo que probablemente sea a través de Internet. Lamentablemente, no es una opción enviar discos de un sitio a otro para una sincronización inicial. Tener algún tipo de seguridad para la transferencia sería ideal, pero haremos lo mejor de esta situación.

Eso debería proporcionar una visión general bastante buena de nuestras necesidades para esta tarea y, con suerte, algunos de ustedes tuvieron que enfrentar esa situación antes.

Val F.
fuente

Respuestas:

20

Obviamente, la copia de seguridad y restauración está fuera. Tampoco consideraría la replicación de ningún tipo.

La creación de reflejo de la base de datos es relativamente simple de configurar, pero requiere conectividad en tiempo real entre los dos servidores, la configuración de socios y puntos finales, etc. Los grupos de disponibilidad podrían ser una opción, pero además de las complicaciones de la red, también debe tener ambos servidores como miembros del mismo WSFC, lo que significa que ambos deben estar en el mismo dominio. Esta no es una configuración típica (o incluso podría hacerse funcionar temporalmente) para un movimiento del centro de datos.

Mi voto sería por el envío de registros. Lo bueno de esto es que puede usar las copias de seguridad y las copias de seguridad de registro que ya está tomando (¿verdad?) Y no necesariamente tiene que tener conectividad en tiempo real entre las dos bases de datos; no necesitan saber sobre cada una otro, no necesita configurar puntos finales para duplicación, socios, seguridad, etc. Solo necesita una forma de llevar los archivos del servidor anterior a un lugar donde puedan restaurarse en el nuevo servidor. Puede realizar una copia de seguridad completa con anticipación, llevarla al nuevo servidor, restaurarla y luego aplicar (posiblemente diferentes y) copias de seguridad de registro incrementales desde ese punto hasta el momento del corte. El proceso en realidad es bastante simple, y hay muchos tutoriales sobre el envío de registros disponibles en línea si encuentra alguna dificultad.

Si la aplicación web se está moviendo con la base de datos, dado que el DNS puede tardar un tiempo en propagarse, es posible que desee cambiar las cadenas de conexión de la aplicación anterior para que apunten a la IP del nuevo servidor de la base de datos una vez que se pueda escribir. , ya que, incluso después del cambio, e incluso si la configuración de TTL es estricta, los clientes pueden seguir accediendo a los servidores web antiguos. Todo depende de cuánto respeto brinden sus proveedores a sus TTL.

Aaron Bertrand
fuente
16

Recientemente migré 15tb a través de 6 bases de datos utilizando la duplicación Muy simple y funcionó perfectamente con solo un par de segundos de tiempo de conmutación por error.

Ediciones:

Tenía dos nuevos servidores SQL virtualizados. Las bases de datos provenían de 3 servidores que simplemente habían superado y estaban afectando el rendimiento en las bases de datos más pequeñas alojadas en ellos.

El proceso fue muy simple.

  1. Espere a que finalicen las copias de seguridad completas del fin de semana
  2. Restaurar sin recuperación a nuevos servidores
  3. Cuando esas restauraciones se completen, pause las copias de seguridad
  4. Ejecute una restauración adicional hasta la última copia de seguridad de registro de los originales, sin dejar ninguna recuperación
  5. Comience a reflejar en los seis
  6. Reanudar copias de seguridad

Elegí dejarlos en modo asíncrono hasta que estuviéramos listos para fallarlos para reducir la carga en la red, etc. Mirroring tiene cierta reputación de causar latencia durante el mantenimiento (índice / estadísticas) y otras actividades de alto volumen, pero no lo hice. encuentra eso para ser verdad. Deben cambiarse al modo síncrono antes de la conmutación por error manual.

Durante la siguiente ventana de mantenimiento, fallé manualmente en cada base de datos, y después de algunas pruebas de humo, apagué la duplicación y finalmente eliminé los archivos de datos antiguos de los servidores de origen. Una peculiaridad de este proceso es que, al fallar una base de datos duplicada, la primaria anterior se encuentra en un estado de recuperación, por lo que, a menos que se sienta cómodo con solo soltarlas, debe volver a conectarlas y luego desconectarlas, o sea cual sea su método preferido de eliminación . Además, no configuré un testigo para nada de esto porque no quería la conmutación por error automática. Este fue un evento controlado.

Avíseme si desea obtener más detalles. He omitido las especificaciones del servidor y la red, pero puedo proporcionarlas si lo desea.

Gracias

Erik Darling
fuente