none
Configurar mirror con una server en funcionamiento. RRS feed

  • Pregunta

  • Saludos comunidad,

    Actualmente estoy gestionando una BD que debe estar disponible 7/24, por lo cual se debe implementar soluciones para lograr esto como mirror.

    Lo que tengo entendido que hay dos tipos con y sin testigo. Debido al tema de recursos la opción que se me adapta es la sin testigo. Por lo anterior, me gustaria saber como funciona y como puede implementar esta opción.

    Este es mi configuración:

    Instancia Primaria (Producción) Win Server 2008 Enterprise SP2 -  Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)   Jul  9 2008 14:17:44   Copyright (c) 1988-2008 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) (VM) .

    Instancia Secundaria(Para el mirror) Win Server 2012 R2 Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)   Jul  9 2008 14:17:44   Copyright (c) 1988-2008 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ).

    Tengo las siguiente preguntas al respecto:

    ¿En el proceso de activar el mirror, hay alguna afectación sobre la instacia en produción?.

    ¿Los servers deben tener la misma configuración de hardware?.

    ¿Como desctivo la Instanacia primaria para realizar operaciones de mantenimientos?.

    ¿Cuando se activa la instancia secundaria esta queda en funciomaniento hasta que se realice el cambio manual o la primaria se activa tan pronte este en línea?.

    ¿Como la peticiones de conexión son direcionadas a la instanacia secundaria ya que los equipos buscan la conexion por nombre al server de la instancia primaria?.

    ¿Cuando la instancia secundaria esta activa esta hace mirror hacia la instancia primaria?.

    De antemano muchas gracias por su ayuda.

    jueves, 12 de abril de 2018 14:21

Respuestas

  • Debido al tema de recursos la opción que se me adapta es la sin testigo.

    Recuerda que el testigo tiene una carga de trabajo insignificante. Puedes usar como testigo incluso una edicion Express.

    ¿En el proceso de activar el mirror, hay alguna afectación sobre la instacia en produción?.
    Se puede hacer en linea. Basicamente, haces un backup del primario y lo restauras en el mirror y luego activas el mirroring
    ¿Los servers deben tener la misma configuración de hardware?.
    Para mirroring, no. PERO: Con la edicion standard solo puedes usar el mirorign sincrono. Esto implica que el primario espera a confirmar cada transaccion hasta que el mirror la ha completado. Si usas un mirror con menos prestaciones que el primario, veras reducida la velocidad de este.
    ¿Como desctivo la Instanacia primaria para realizar operaciones de mantenimientos?.
    Se usa el comando "alter database... set partner failover". Eso hace que el mirror pase a ser primario, y el primario quede como mirror. En ese momento puedes desactivar este equipo para hacerle el mantenimiento.
    ¿Cuando se activa la instancia secundaria esta queda en funciomaniento hasta que se realice el cambio manual o la primaria se activa tan pronte este en línea?.
    El secundario funciona todo el rato (recuerda que es un mirror sincrono). En cualquier momento puedes hacer una conmutacion manual como indicamos antes.
    ¿Como la peticiones de conexión son direcionadas a la instanacia secundaria ya que los equipos buscan la conexion por nombre al server de la instancia primaria?.
    Si los equipos usan el Native Client moderno, en la cadena de conexion se les pueden poner las dos direcciones de los servers, y automaticamente se conectan al secundario si falla el primario. Si tienes clientes antiguos que no soportan esto, puedes ponerles que se conecten a un "alias" y el alias lo das de alta en el DNS con un TTL pequeno y apuntando al primario. Si falla y hay un failover, cambias en el DNS la direccion para que apunte al secundario. Si, esto es una lata. Si no es aceptable, entonces o bien te actualizas al SQLNCLI moderno, o si no tendrias que usar un cluster en lugar de mirroring.
    ¿Cuando la instancia secundaria esta activa esta hace mirror hacia la instancia primaria?.
    Si.
    jueves, 12 de abril de 2018 14:39
  • La forma de configurar la cadena de conexión es así:

    "Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"

    más cualesquiera otras parámetros utilices normalmente (seguridad, timeouts, etc.).

    Fíjate que donde en ejemplo pone "Partner_A" se pone el servidor principal, y donde dice "Partner_B" es donde hay que poner el nombre del espejo.

    Si el programa está hecho en .net, y se ha programado siguiendo los estándares, es decir, poniendo la cadena de conexión en el archivo .config, pues entonces es muy fácil: no tienes más que editar el .config y añadir a la cadena el nuevo parámetro Failover_Partner.

    ¿Que no has seguido los estándares, y te has saltado el .config, y has puesto el nombre o ip del servidor en el código compilado? Pues mal hecho, ahora te das cuenta de que los estándaes valen para algo, y que existe un buen motivo por el que te aconsejan que no programes la aplicación como lo has hecho. Ahora tendrás que modificar el código fuente para cambiar la conexión y recompilar la aplicación.

    jueves, 12 de abril de 2018 17:41
  • El tiempo puede ser "cero" si el servidor A esta como mirror y el B como activo. Hay una explicacion aqui:

    https://blogs.msdn.microsoft.com/spike/2010/12/08/clarification-on-the-failover-partner-in-the-connectionstring-in-database-mirror-setup/

    Como puedes ver en ese enlace, el proceso es algo mas complejo de lo que pareceria a primera vista.

    Suponiendo que la conexion al primer servidor no se pueda realizar, se conectara al Failover partner al expirar el tiempo indicado en el ConnetcionTimeout en la cadena de conexion.

    viernes, 13 de abril de 2018 16:09

Todas las respuestas

  • Debido al tema de recursos la opción que se me adapta es la sin testigo.

    Recuerda que el testigo tiene una carga de trabajo insignificante. Puedes usar como testigo incluso una edicion Express.

    ¿En el proceso de activar el mirror, hay alguna afectación sobre la instacia en produción?.
    Se puede hacer en linea. Basicamente, haces un backup del primario y lo restauras en el mirror y luego activas el mirroring
    ¿Los servers deben tener la misma configuración de hardware?.
    Para mirroring, no. PERO: Con la edicion standard solo puedes usar el mirorign sincrono. Esto implica que el primario espera a confirmar cada transaccion hasta que el mirror la ha completado. Si usas un mirror con menos prestaciones que el primario, veras reducida la velocidad de este.
    ¿Como desctivo la Instanacia primaria para realizar operaciones de mantenimientos?.
    Se usa el comando "alter database... set partner failover". Eso hace que el mirror pase a ser primario, y el primario quede como mirror. En ese momento puedes desactivar este equipo para hacerle el mantenimiento.
    ¿Cuando se activa la instancia secundaria esta queda en funciomaniento hasta que se realice el cambio manual o la primaria se activa tan pronte este en línea?.
    El secundario funciona todo el rato (recuerda que es un mirror sincrono). En cualquier momento puedes hacer una conmutacion manual como indicamos antes.
    ¿Como la peticiones de conexión son direcionadas a la instanacia secundaria ya que los equipos buscan la conexion por nombre al server de la instancia primaria?.
    Si los equipos usan el Native Client moderno, en la cadena de conexion se les pueden poner las dos direcciones de los servers, y automaticamente se conectan al secundario si falla el primario. Si tienes clientes antiguos que no soportan esto, puedes ponerles que se conecten a un "alias" y el alias lo das de alta en el DNS con un TTL pequeno y apuntando al primario. Si falla y hay un failover, cambias en el DNS la direccion para que apunte al secundario. Si, esto es una lata. Si no es aceptable, entonces o bien te actualizas al SQLNCLI moderno, o si no tendrias que usar un cluster en lugar de mirroring.
    ¿Cuando la instancia secundaria esta activa esta hace mirror hacia la instancia primaria?.
    Si.
    jueves, 12 de abril de 2018 14:39
  • Alberto Muchas Gracias por su respuesta, muy valiosa.

    Me puede explicar con mas detalle la siguiente opcíon que  me dice como se configura:

    Native Client moderno, en la cadena de conexion se les pueden poner las dos direcciones de los servers, y automaticamente se conectan al secundario si falla el primario. Si tienes clientes antiguos que no soportan esto, puedes ponerles que se conecten a un "alias" y el alias lo das de alta en el DNS con un TTL pequeno y apuntando al primario.

    Por otra parte, la aplicación que utiliza compañia esta en .net y es compilada con el nombre o ip del server, entonces como haria para tener la alta disponibilidad, debo habilitar esa opción a nivel de windows?.

    Gracias,

    jueves, 12 de abril de 2018 16:23
  • La forma de configurar la cadena de conexión es así:

    "Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"

    más cualesquiera otras parámetros utilices normalmente (seguridad, timeouts, etc.).

    Fíjate que donde en ejemplo pone "Partner_A" se pone el servidor principal, y donde dice "Partner_B" es donde hay que poner el nombre del espejo.

    Si el programa está hecho en .net, y se ha programado siguiendo los estándares, es decir, poniendo la cadena de conexión en el archivo .config, pues entonces es muy fácil: no tienes más que editar el .config y añadir a la cadena el nuevo parámetro Failover_Partner.

    ¿Que no has seguido los estándares, y te has saltado el .config, y has puesto el nombre o ip del servidor en el código compilado? Pues mal hecho, ahora te das cuenta de que los estándaes valen para algo, y que existe un buen motivo por el que te aconsejan que no programes la aplicación como lo has hecho. Ahora tendrás que modificar el código fuente para cambiar la conexión y recompilar la aplicación.

    jueves, 12 de abril de 2018 17:41
  • Gracias Alberto, nuevamente muy valiosa su informació.

    Ya para finalizar y me quede claro, teniendo los dos parametros de conexión, el programa intentara conectarse con el primer server sino hay respuesta pasa al segundo, es correcto?.

    El tiempo de timeout o intentos también debe estar estipuldado en el archivo config?.

    viernes, 13 de abril de 2018 15:26
  • El tiempo puede ser "cero" si el servidor A esta como mirror y el B como activo. Hay una explicacion aqui:

    https://blogs.msdn.microsoft.com/spike/2010/12/08/clarification-on-the-failover-partner-in-the-connectionstring-in-database-mirror-setup/

    Como puedes ver en ese enlace, el proceso es algo mas complejo de lo que pareceria a primera vista.

    Suponiendo que la conexion al primer servidor no se pueda realizar, se conectara al Failover partner al expirar el tiempo indicado en el ConnetcionTimeout en la cadena de conexion.

    viernes, 13 de abril de 2018 16:09
  • Gracias Alberto,

    Ya realice la consulta con el área de desarrollo y estoy esperando la respuesta. 

    Respecto al  pasar la BD al server Mirror, la BD es muy grande alrededor de 200 GB, por lo que pasara un tiempo considerado tener lista el server mirror con la copia de la BD.

    La pregunta es: Tan pronto se habiite la función de mirror, este actuaizará la BD mirror, cierto?.

    Gracias,

    martes, 17 de abril de 2018 19:58
  • Primero tienes que pasar manualmente los 200 GB al mirror mediante un backup y restore. Después, cuando habilitas el mirror, lo que hace es transmitir por la línea cada una de las transacciones que se producen en el primario, y restaurarla sobre el mirror. No te sé decir ahora mismo qué es lo que ocurre en caso de que se produzca alguna transacción después de haber tomado el backup y antes de haber activado el mirror; siempre que lo he hecho he tenido la base de datos sin actividad entre el final del backup y la activación del mirror.
    miércoles, 18 de abril de 2018 5:50