Saltar al contenido
Categoría: Sin categorizar
2016-09-12

Creación de Mirroring sin Active Directory en SQL Server 2012

Database Mirroring es una tecnología de Alta Disponibilidad basada en un modo de funcionamiento Activo / Pasivo. Es decir, mientras una Instancia realiza un papel de Servidor Principal (Activo) para una base de datos en particular, la otra instancia realiza el papel de Servidor Espejo o Secundario (Pasivo) para dicha base de datos.

Requisitos previos

Para realizar el siguiente ejemplo necesitamos dos máquinas virtuales SQL Server 2012 Enterprise Edition . La primera instancia que en nuestro ejemplo llamaremos principal contiene la base de datos, de la cual queremos hacer el mirroring, y la instancia secundaria a la que hemos llamado mirroring está totalmente vacía.

img1

Configuración Inicial

Nos situamos en el directorio C:\Windows\System32\drivers\etc y abrimos el archivo hosts con cualquier editor de textos para editarlo.

hosts

Una vez editado el archivo hosts en el servidor principal y mirroring comprobamos que tengan ping con sus respectivos nombres de máquina. Para hacer la comprobación abrimos el CMD y ejecutamos los siguientes comandos: ping principal y ping mirroring.

Creación de Certificados

El primer paso a seguir es crear los certificados correspondientes en cada instancia SQL Server, para que las dos bases de datos puedan enviar y recibir datos cifrados y puedan descifrarlos para su correspondiente tratamiento.

-- Instancia principal

-- Creamos una clave de encriptado
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'aleson123.';
GO
-- Creamos un certificado
CREATE CERTIFICATE Cert_principal WITH SUBJECT = 'certificate for database principal';
GO
-- Y para finalizar hacemos un backup del certificado.
BACKUP CERTIFICATE Cert_principal TO FILE = 'Cert_principal.cer';
GO
-- Instancia Mirroring

USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'aleson123.';
GO

CREATE CERTIFICATE Cert_mirroring WITH SUBJECT = 'certificate for database mirroring';
GO

BACKUP CERTIFICATE Cert_mirroring TO FILE = 'Cert_mirroring.cer';
GO

Creación de conectores del servicio

Creamos un EndPoint en cada servidor y le asignamos su certificado, esto nos permitirá utilizarlos para establecer la trasferencia de datos de forma segura.

-- Instancia Principal

CREATE ENDPOINT Endpoint_Mirroring
   STATE = STARTED
   AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
   FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE Cert_principal, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
-- Instancia Mirroring

CREATE ENDPOINT Endpoint_Mirroring
   STATE = STARTED
   AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
   FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE Cert_mirroring, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO

Enlace de certificados

Una vez creados los certificados de cada base de datos y los EndPoint, procederemos a enlazar el certificado de la base de datos de mirroring, con la base de datos principal y viceversa. Gracias a esto, las bases de datos podrán enviarse datos cifrados entre ellas y podrán descifrarlos.

Copiamos los ficheros de los certificados en ambos servidores, es decir el Cert_mirroring en el servidor principal y el Cert_principal en el servidor mirroring.

Mirroring_img2

Una vez copiados los certificados, ejecutamos el siguiente script:

-- Instancia Principal

-- Creamos un inicio de sesión.
CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'aleson123.';
GO
-- Creamos un usuario para ese inicio de sesión.
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
-- Creamos el certificado de la base de datos de mirroring, poniéndole como propietario el usuario recién creado. 
CREATE CERTIFICATE Cert_mirroring AUTHORIZATION DBMirroringLogin FROM FILE = 'Cert_mirroring.cer'
GO
-- Le damos permisos al usuario para conectarse al EndPoint
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
-- Instancia Mirroring

CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'aleson123.';
GO

CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO

CREATE CERTIFICATE Cert_principal AUTHORIZATION DBMirroringLogin FROM FILE = 'Cert_principal.cer'
GO

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO

Activación del Reflejo

En el servidor principal realizamos una copia de seguridad completa de la Base de datos y una copia de seguridad del Log de transacciones.

BACKUP DATABASE ALESON_DB TO DISK='C:\BACKUP\ALESON_DB_FULL.BAK' WITH FORMAT, COMPRESSION
GO
BACKUP LOG ALESON_DB TO DISK='C:\BACKUP\ALESON_DB.BAK' WITH FORMAT, COMPRESSION
GO

Copiamos los ficheros de backup en el servidor mirroring y restauramos las base de datos en modo NO RECOVERY.

RESTORE DATABASE ALESON_DB FROM DISK='C:\BACKUP\ALESON_DB_FULL.BAK' WITH NORECOVERY
GO
RESTORE LOG ALESON_DB FROM DISK='C:\BACKUP\ALESON_DB_LOG.BAK' WITH NORECOVERY
GO

Activamos en el servidor mirroring el reflejo añadiéndolo como partner.

ALTER DATABASE ALESON_DB SET PARTNER = 'TCP://PRINCIPAL:5022';
GO

Activación Mirroring

Para finalizar nos situaremos en la instancia principal y seguiremos los siguientes pasos:

img4

Botón derecho sobre la base de datos principal -> Tasks -> Mirror…

Mirroring_img5

Configure Security…

Mirroring_img6

Include Witness Server -> No

Mirroring_img7

Por defecto aparecerán los siguientes parámetros.

Mirroring_img8

Le damos a connect, y hacemos loggin contra la instancia mirroring y nos rellenará el Listner port y Endpoint name.

Mirroring_img9

En principal añadimos la cuenta Domain Contoller del servidor principal y en mirror la del servidor de mirroring.

Mirroring_img10

Le damos a Start Mirroring

Una vez iniciado,  las bases de datos deben aparecer con los siguiente estados:

Mirroring_img11

Instancia Principal (Principal, Synchronized) Instancia Mirroring (Mirror, Synchronized / Restoring…)