Alta disponibilidad con Mirror en SQL Server

18/06/2012

La forma más común de tener alta disponibilidad en SQL Server es con el Mirror. Con este modo, lo que hacemos es tener   una copia exacta (un espejo de nuestra base de datos) de una instancia en otra. De esta forma, si por algún motivo la instancia principal se cae, la segunda instancia se pone automáticamente en marcha, dando soporte al failover.  Además cualquier cambio hecho en la base de datos de la primera instancia, es replicado inmediatamente en la base de datos de la segunda instancia (la instancia y base de datos reflejada).

La principal ventaja del mirror, es que si utilizamos un witness server, es capaz de hacer el failover automáticamente sin intervención humana, ya que con el log shipping esto es imposible y hay que hacerlo con intervención humana. Para servicios 24×7 donde el servicio no puede detenerse, el mirror es imprescindible. Como desventaja en comparación con el log shipping, la segunda instancia (la reflejada) es inaccesible y sólo puede haber una. Para ver cómo hacer el log shipping os dejo este enlace:

https://miblogtecnico.wordpress.com/2012/05/30/alta-disponibilidad-con-log-shipping-en-sql-server/

Para hacer el mirror, es necesario como mínimo 2 instancia y como máximo 3. Si utilizamos 2 instancias, una de ellas contiene la base de datos y la otra la espejo. La pega de esta configuración es que el failover no es automático y se necesita intervención humana. Si utilizamos 3 instancias, entonces utilizamos una de ellas como witness server y permite que el failover sea automático, osea que cuando una caiga, la otra se ponga en marcha. Para ello el witness server se encarga de “mirar” el estado de las 2 instancias y cuando una de ellas cae, pone la otra en marcha.

Hacer el mirror son dos pasos principales:

1. Copiar y restaurar la base de datos de la que queremos hacer el mirror desde una instancia a la otra
2. Configurar el asistente de configuración del mirror.

Vamos un ejemplo paso a paso.

Lo primero que tenemos que hacer es hacer un reflejo de nuestra base de datos en otra instancia. En nuestro ejemplo esta base de datos se denomina prueba.

Base de datos de prueba que queremos reflejar

Base de datos de prueba que queremos reflejar

Debemos hacer copia de seguridad de la base de datos y del log (Ojo, la base de datos debe estar en modo Full) con estas sentencias:

Backup Database Prueba to Disk=’D:\prueba.bak’;
Backup Log Prueba to Disk=’D:\logprueba.bak;

Una vez hecha la copia de seguridad, copiamos los ficheros y los restauramos otra instancia donde queremos hacer el reflejo con estas sentencias

Restore Database Prueba from Disk=’D:\prueba.bak’ with NORECOVERY;
Restore Log Prueba from Disk=’D:\logprueba.bak with NORECOVERY;

Fijémonos que tanto la restauración del fichero de datos como el del log, son con el parámetro NORECOVERY. Esto es muy importante porque estamos diciendo al SQL Server que restauramos la base de datos pero que no la ponga en marcha y que la deje lista para poder aplicar más logs, osea los logs que vendrán de la otra base de datos cuando comience el mirror.

Base de datos de Prueba restaurada en modo NORECOVERY

Base de datos de Prueba restaurada en modo NORECOVERY

Una vez tenemos hecha la restauración de la base de datos que queremos reflejar en la otra instancia, ya podemos configurar el mirror. Para ello, pulsamos en la primera instancia con el botón derecho del ratón sobre la base de datos,  y seleccionamos Propiedades. En el cuadro de diálogo de las propiedades de la base de datos, seleccionamos la opción Mirror.

Opción Mirror de las propiedades de la base de datos

Opción Mirror de las propiedades de la base de datos

Vemos que aparece un cuadro de diálogo con las opciones de configuración del mirror. Para comenzar a configurarlo, seleccionamos el botón Configure Security.

Botón que lanza el asistente de configuración del Mirror

Botón que lanza el asistente de configuración del Mirror

Vemos que aparece el asistente de configuración del mirror. Lo primero que nos pregunta es si queremos utilizar un witness server. Indicamos que sí. Después debemos indicarle que queremos configurar las 3 instancias para poder hacer el failover automáticamente.

Configuración de las 3 instancias del mirror

Configuración de las 3 instancias del mirror

Seguidamente indicamos la instancia que contendrá la base de datos en sí. Fijémonos que por defecto, el asistente abre el puerto 5022 para comunicarse con el resto de instancias. Dicho puerto y el resto que se configuran en el asistente, deben estar abiertos en los firewalls de windows. Fijémonos también que hemos quitado la opción de cifrado, ya que en esta configuración, no tenemos habilitado el cifrado de la base de datos.

Configuración de la primera instancia

Configuración de la primera instancia

Seguidamente configuramos la segunda instancia que será la que contendrá el reflejo de la base de datos. Fijémonos que por defecto configura el puerto 5023.

Configuración de la segunda instancia

Configuración de la segunda instancia

Por último nos queda configurar el witness server que estará en una tercera instancia. Fijémonos que por defecto configura el puerto 5024.

Configuración de la tercera instancia

Configuración de la tercera instancia

Un último paso en el asistente es configurar la seguridad. Aquí debemos indicar una cuenta con permisos para acceder al SQL Server. Por ejemplo, podemos indicar la cuenta con la que arrancan los servicios de las instancias.

Configuración de la seguridad del mirror

Configuración de la seguridad del mirror

Para acabar con el asistente  pulsamos en Finish. El asistente se pondrá a configurar los puertos (Endpoints) en cada instancia y acabará.

Configuración de los EndPoints

Configuración de los EndPoints

Una vez acabado el asistente, aparece una pantalla en donde nos indica que ha acabado de configurar el mirror y que ya podemos ponerlo en marcha pulsando en Start Mirroring.

Comienzo del mirror

Comienzo del mirror

Desde ese preciso instante, cualquier cambio que se haga en la base de datos de la primera instancia, será reflejado en la base de datos de la segunda instancia. Para ello restaura automáticamente el log de cambios de la primera en la segunda. Además desde ese momento, si la primera instancia falla, la segunda se pondrá automáticamente en marcha, porque una tercera se lo indica.

Para comprobar que el mirror se ha efectuado correctamente, tenemos que mirar la base de datos de la primera instancia y la de la segunda. La primera será accesible e indicará (Principal, Synchronizing) y la segunda no será accesible e indicará (Mirror, Syncronized / Restoring).

Base de datos Principal del mirror

Bases de datos Principal y Reflejada del Mirror

Como podemos observar, hay una base de datos que es la que proporciona el servicio (Principal) y la otra es la Reflejada (Mirror). Cuando falle la instancia o la base de datos de la primera, el witness hará que automáticamente cambie los roles y el mirror pase a principal y el principal a mirror.

Si queremos cambiar los roles, por ejemplo porque queremos instalar y actualizar software en la primera instancia y necesitamos pararla, entonces podemos forzar el failover de una instancia a la otra. Para ello, desde el cuadro de configuración del mirror, podemos pulsar el botón Failover. En el momento lo pulsemos, veremos que la primera instancia se convierte en mirror y la segunda en Principal.

Failover manual de la base de datos en mirror

Failover manual de la base de datos en mirror

6 comentarios to “Alta disponibilidad con Mirror en SQL Server”


  1. Cuando requerimos que sea una aplicacion en otro servidor quien se conecte a la base de datos, la IP seria la del witness server? o la de la BD principal?

  2. Anónimo Says:

    Hola, Santiago. Lo felicito por tan excelente aporte. Muy claro y fácil de entender.
    Tengo una duda: Tengo una base de datos en mirror y las bases de datos de la instancia principal dice “(Entidad de seguridad, Sincronizado)” y no “(Principal, Sincronizado)”, como lo indicas en tu artículo. Qué significa “Entidad de seguridad” ?

  3. Anónimo Says:

    Saludos desde Colombia.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: