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.
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.
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.
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:
Botón derecho sobre la base de datos principal -> Tasks -> Mirror…
Configure Security…
Include Witness Server -> No
Por defecto aparecerán los siguientes parámetros.
Le damos a connect, y hacemos loggin contra la instancia mirroring y nos rellenará el Listner port y Endpoint name.
En principal añadimos la cuenta Domain Contoller del servidor principal y en mirror la del servidor de mirroring.
Le damos a Start Mirroring
Una vez iniciado, las bases de datos deben aparecer con los siguiente estados:
Instancia Principal (Principal, Synchronized) Instancia Mirroring (Mirror, Synchronized / Restoring…)
Business Intelligence Expert Consultant. Specialising in creation of Data Warehouse, Analysis Services, Power BI, SSIS, SSRS and Databricks.