Mis queridos amiguitos amarillos, ha llegado el momento de la verdad, el momento en el que vais a tener que trabajar como chinos, en virtud de ese cliente pelmazo que no para de dar el cacorrio con que sus datos son lo mas importante del mundo mundial. Algo habrá que hacer para que deje de dar la murga y por fin ha llegado el momento de la verdad, lo que los gungans llamaban “la hora del dolor”.
Pero no todo tiene que ser necesariamente malo en las oscuras tierras de Microsoft, donde se extienden las sombras -"Atrás!! llama de Udûn!!!"-, de modo que para traer un poco de claridad al proceloso mundo de las réplicas en SQL Server vamos a elegir un disco de Chill Out que sonará a un volumen moderadamente moderado en vuestros altavoces, al tiempo que le dais a la tecla con alegría y desparpajo. Nunca antes existió cirujano escuchando chill mientras extirpaba un tumor, pero vosotros si que podéis escuchar algo bueno mientras tecleáis; es por ello que vosotros no os coméis los mocos con vuestro suelducho de mileurista mientras que ellos se ponen morados a bogavante, que coge por detrás, te coge por delante.
Bien, el disco va a ser "Café del Mar – Dreams Vol 2", se indica como requisito para poder llevar a buen puerto esta instalación. Si algo falla es q no estáis escuchando el disco correcto.
Para empezar con buen pinrrelillo vamos a partir de una instalación límpida, que consistirá en:
- 2 máquinas Windows 2003 R2 SP2 32 bits que llamaremos diligentemente “Nodo1” y “Nodo2”.
- Nodo1 será el DC principal del dominio y Nodo2 el DC secundario. No trataré aquí cómo montar un dominio porque no es el objetivo, y además hoy en día es insultantemente facil montar lo que otrora era un PDC y un BDC (ahhh que tiempos los del NT 3.5 mas… horrorosos!!) .
- Comprobar que está instalado IIS en ambas máquinas al completo.
- Iniciar ambas máquinas con la cuenta de administrador de dominio e instalar SQL Server 2005 al completo. Las opciones por defecto serán mas que válidas por el momento.
No es necesario que las máquinas sean iguales en lo tocante a hardware ya que en este tipo de entorno todo se resuelve por soft (a diferencia del modo Cluster) si bien yo os recomendaría que para hacer esta prueba os montarais un par de VMwares antes que usar dos máquinas físicas, por comodidad mas que nada (a los efectos da exactamente igual). Apunto aquí una nota mental para un posterior articulo sobre hypervisors, que la cosa esta que hecha chispas en este sector.
Una vez llegados a en este punto no faltarán los que se empiecen a revolver en su silla: “porque un dominio?”, “porque instalaciones completas?” etc. Bueno, yo diría que porque sí y te jodes, pero la verdad es que la cosa no funciona si todas las máquinas que van a participar en la réplica no están metidas en el mismo dominio. Domino eh? no grupo de trabajo, dominio. Las instalaciones completas se hacen para minimizar errores, luego vosotros ya lo iréis puliendo una vez q lo tengáis en marcha. Al hilo de todo esto, solo se va a usar la cuenta de administrador para configurar las credenciales de los procesos necesarios, cosa que es un poco fea como todos sabemos. Un nivel mayor de control se deja al feliz informático que quiera hacer las cosas bien, que de esos hay pocos y se esconden; aqui solo se muestra la base del asunto de forma muy elemental.
Finalmente para quitarnos problemas con las políticas de seguridad del 2003 os recomiendo que configures una contraseña de 8 caracteres con números y mayúsculas para la cuenta de administrador, por si acaso.
Presentaciones
Llegados a este punto vamos a establecer como montaremos este primera escenario:
Nodo1
Sera el Publicador y el que tenga la base de datos a replicar, que llamaremos “origen”. La Publicación va a ser de tipo transaccional en un solo sentido (del Publicador al Suscriptor) aunque en el arranque le vamos a enchufar al Suscriptor una instantánea o snapshot fresca y completita.
Nodo2
Será el Suscriptor, va a aplicar la Publicación en la base de datos llamada “destino”. El porqué llamamos a las bases de datos de forma distinta es un poco por claridad pero en el fondo es tontería: imaginar que tenéis una aplicación que dispara contra la base de datos “origen”. Lo suyo seria que si el sistema se cae podre seguir atacando a “origen” pero en el esclavo, de modo que lo suyo seria llamar a las dos bases de datos igual aunque aqui como digo no se hará asi por claridad.
Además, el tercer rol, el del Distribuidor lo podremos colocar donde nos plazca pero nosotros lo haremos en el Suscriptor, para dejar mas libre al Publicador ya que se supone que es la máquina contra la que tiran los clientes normalmente. En este caso, si el Distribuidor está en el Suscriptor vamos a operar por el método “pull” o “polling” que como bien sabemos consiste en preguntar cada 2×3 al Publicador si hay cambios pendientes de aplicar. Poner el Distribuidor en el Publicador implica un esquema de tipo “push” en el que el Publicador “empuja” los datos al Suscriptor, algo en principio más óptimo a nivel general pero particularmente para el publicador mas costoso ya que tiene que ejecutar un proceso adicional, que es el del Distribuidor. Sobre pull vs push se podría hablar un poco más y en próximas entregas quizá se haga si os portáis bien y no dejáis nada en el plato.
Finalmente comentar que toda la configuración del percal se realiza a través del Microsoft SQL Server Management Studio, la herramientilla grafica basada en MMC que trae el SQL Server, y mas concretamente en la rama de “replicación”.
Hechas las presentaciones comienza el baile:
Prolegómenos
- Creamos una base de datos de prueba llamada Origen en Nodo1.
- Creamos una tabla de nombre “miTabla” con 2 campos de tipo nchar(10) que llamaremos Clave y Datos.
- El campo Clave será la clave primaria.
OJO: TODAS LAS TABLAS TIENEN QUE TENER CLAVE PRIMARIA!. Si la base de datos que queréis replicar no tuviera una clave primaria en TODAS las tablas se la añadís a manubrio. Si no lo hacéis el proceso de réplica casca y os iréis a casa taciturnos y cejijuntos, os lo digo ahora, luego no me vengáis con lloros y malas caras.
- Creamos la base de datos Destino vacía en Nodo2.
Ahora tenemos todo lo necesario para poder configurar la réplica. Hay que adelantar que el proceso puede resultar un poco confuso porque a pesar de que se nota que el interface gráfico tiene unas cuantas vueltas no es lo suficientemente claro. Por ejemplo no queda representado de forma gráfica el rol del Distribuidor y además la secuencia de pasos que hay q seguir no es del todo lógica (lo lógico seria configurar primero el Publicador y luego el resto pero hay que empezar por el Distribuidor, el rol mas “gris” de los 3).
Nodo2
Como nuestro Distribuidor va a estar en Nodo2 lo configuramos allí:
- Ahora tendremos que seguir el Wizard (que de Wizard no tiene mucho la verdad) rellenando los datos necesarios:
- Se nos pregunta donde va a ir el Distribuidor, por defecto se ilumina Nodo2 y asi que lo dejamos. Como hemos dicho antes el Distribuidor podría ponerse en otra máquina, que no será el caso.
- Aqui se nos pregunta el path donde reside el snapshot inicial. Ojo al dato que nos lo rellena con un path local tal y como viene en la figura, cosa que en este caso no aplica. Y porque no aplica? porque hemos quedado que en Nodo1 está el Publicador y en Nodo2 el Distribuidor asi que tenemos que decirle al Distribuidor que el snapshot no está en un path local sino remoto. Como se hace esto? facil: ponemos “\\nodo1\recurso_compartido”. No dejarse llevar por el pánico por el hecho de que todavía no hayamos creado el recurso compartido (ni sepamos a donde hay que apuntarlo) en Nodo1. Todo llegará a su debido tiempo mis pezqueñines.
- Ahora damos nombre a la base de datos de Distribución. Esta base de datos es de tipo System y nosotros no la tocaremos para nada. Yo la llamo “miDistribucion”.
- En esta pantalla se nos esta preguntando por los Publicadores (que todavía no tenemos) que usarán este Distribuidor. Por defecto viene Nodo2 pero eso no es correcto porque el Publicador hemos dicho que lo tenemos en Nodo1 asi que con el botón add lo añadimos y desactivamos nodo2, que de hecho no va a llevar Publicador.
- En la pantalla siguiente se nos pide una password que usara el Publicador cuando quiera realizar labores de administración sobre el Distribuidor. No se por qué no se usa una cuenta del dominio simplemente, cosas de Windows supongo. La cosa: poner la password y recordarla porque la tendréis que introducir en el Publicador cuando lo configuremos más adelante.
- Finalmente se nos ofrece la posibilidad de crear el Distribuidor o en su defecto solo generar la secuencia de comandos para poder nosotros lanzarlos a mano con posterioridad. Elegimos crear el Distribuidor ahora y finalizamos con lo que se nos presentará una pantalla resumen de las sabias elecciones tomadas en el proceso y luego una pantalla de progreso que deberá culminar en iconos verdes con un OK bien grande.
Llegados a este punto nada parece haber cambiado a simple vista en la MMC ya que no hay icono asociado al Distribuidor como decía, si bien se ha creado una base de datos de sistema llamada “miDistribucion” con lo que la cosa se supone va por su camino.
Nodo1
Pasamos al Nodo1.
- Creamos una nueva Publicación
- Se nos pregunta donde esta el Distribuidor, asi que le decimos que lo tenemos en Nodo2
- Rellenamos la password que introdujimos en Nodo2
- Elegimos la base de datos a replicar (“Origen”)
- Aqui elegimos el tipo de réplica que queremos: snapshots, transaccional, combinación etc. Elegimos una publicación transaccional, que nos permitirá además enviar un snapshot inicial como veremos a continuación.
- Elegimos los artículos a incluir en la Publicación: no nos liaremos en absoluto, añadimos la tabla completa de la base de datos Origen.
- Podemos filtrar los datos a Publicar: en el apartado anterior podíamos elegir columnas y tablas, aqui se nos deja construir una SELECT para cribar datos. Sin mas pasamos del tema.
- Ahora se nos interpela por el agente de snapshots: si queremos que genere un snaphost ahora mismo, y si queremos que los genere vía scheduler a horas determinadas (lo cual esta muy fresco porque como ya decíamos “ayer” al hacer un snapshot se bloquea para escritura y selectivamente la tabla que se está copiando, ergo es una opción guapa hacer snapshots a las 3 de la mañana, cuando solo curran los pelotas o los desesperados (o los jartos de coca, que también los hay). Nosotros como no somos ni lo juno ni lo jotro vamos a poner que genere un snapshot ahora mismo y listo.
- Ya para ir terminando se nos pregunta por las credenciales del Publicador para el agente de logs y de snapshots. Para ambos dos le vamos a dar la cuenta de admin del dominio, para que no falte de nada y estén contentos. Esto vuelve a ser una cagada y como tal hay que decirlo pero aqui lo vamos a dejar asi.
- Y como ya es costumbre se nos pregunta si queremos generar el Publicador ahora o mas tarde con unas secuencias de comandos (lo generamos ahora), presentándonos un bonito resumen de las elecciones tomadas, pidiéndonos nombre para la Publicación(yo he puesto “miPublicacion”) y unas alegres barritas de progreso iguales que las del Distribuidor, que también tiene que terminar el verde, color de la esperanza.
En este caso si que hay un cambio evidente en la MMC:
Chulo eh? bueno, que ya queda menos. Mejor dicho, ya no queda nada porque ahora terminamos con el Suscriptor, asi que volvemos a Nodo2
chsst! un momento ahí ! pensabas que se me iba a olvidar eh?? noooo!!: hay que hacer el recurso compartido! –ein? cual recurso?- Despierta hombre! si, el recurso compartido donde reside el snapshot claaaaaro que genera el Publicador y que recoge el Publicador. Bueno pues sencillamente se trata de compartir la carpeta donde reside el susodicho, que es:
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\ReplData\
Le dais un nombre coincidente con el que le disteis mas arriba en el Distribuidor y tira millas. Dar permisos de lectura y escritura a granel por cierto.
Nodo2 revisited
- Creamos la Suscripción
- Elegimos la Publicación ya creada en Nodo1
- Elegimos donde queremos ejecutar el Suscriptor, en el equipo que ejecuta el Distribuidor (Nodo2) o en el equipo que ejecuta el Publicador (Nodo1). Esta es la diferencia que mencionábamos antes: push vs pull. Lo dejamos en Nodo2.
- Elegimos base de datos de Suscripción. Esto es, el Publicador nos manda los datos y el Suscriptor los deja en una base de datos que nosotros hemos llamado Destino y es el efectivamente la base de datos replicada.
- El Suscriptor se tiene q conectar con el Distribuidor así que le enchufamos credenciales frescas de administrador.
- Igual que antes se nos pregunta por la periodicidad con la que el Suscriptor busca cambios. Nosotros le vamos a poner que constantemente. Esto se podría rebajar si no fuera necesario estar sincronizados al segundo y asi aligerar la carga de CPU y red primando el tamaño de las transferencias por encima del numero de ellas.
- Se nos pregunta si inicializamos ya mismo la Suscripción con un snapshot o lo vamos a hacer en la primera sincronización. Como hemos dejado el snapshot al crear el Publicador ya preparado le damos candela y le ponemos que ya mismo.
- Y lo de siempre: barras, verdes y parabienes, congratulations you are the best, gracias por confiar en Microsoft y toda la fanfarria y boato necesarios por haber seguido un wizard diligentemente. Estos se deben de creer que somos gilipollas o algo.
Y aqui termina la configuración porque ya es muy tarde y no da tiempo ni para recoger. La replica ahora tendria que funcionar a plena satisfacción, cosa que podeis comprobar si en Nodo1 metéis filas y veis en Nodo2 como se van añadiendo como por arte de birli birloque.
En la(s) próxima(s) entrega(s) vamos a configurar el Distribuidor en el Publicador, a montar una replica en las dos direcciones para el caso de que hagamos inserciones en el nodo2 (y evitar los errores que se dan si ahora mismo hacemos ahora inserciones en Nodo2), a hacernos un poco con la configuración modificándola y retorciéndola y a monitorizar el estado de la replica, reiniciándola y tal. Finalmente nos pondremos la pegata de “replicante” en el pecho al tiempo que disfrutamos con un par de tomas falsas o descartes.