Está en la página 1de 231

Portada

Datos de catalogación bibliográfica

Título del libro.

Replicacion y Cluster de Bases de Datos

Lulu. El Salvador 2012

Materia: Bases de Datos, 005.73 C146e


Formato: 21.6 x 27.9 cm. Páginas: 229

Esta edición en español es la única autorizada.

Autores y/o Editores:

Alex Calderón, Gómez Jacqueline,MoránLuis, Urquilla Edwin, Henry Renderos,


David García, Portillo Pablo, Gómez Herber, Mendes Rebeca, Chicas Karla, Samuel
Menéndez, Lisandro Martínez, Isidro Flores, Erick Valenzuela, Ana Rosales, Silvia
Campos, Luis Chávez, Josué Orellana, Erick Cruz, González Mauricio, Ramírez
Heysel, Zometa Henry, Cisneros Rolando, Ibarra Luis, Orellana Hugo, Ana Jiménez,
Byron Guerrero, David Sandoval, Juarez Yonatan, Larios Raquel y Zelaya Josué,

ii
CONTENIDO

Introducción ....................................................................................... iv
Mysql: replicación ............................................................................... 1

Postgresql cluster con pgpool-ii.........................................................15

Oracle stream replication .................................................................. 25

Oracle data guard .............................................................................. 43

Sql server cluster ............................................................................... 60

Clúster en mysql .............................................................................. 105

Sincronización de bases de datos en nube ....................................... 121

Replicación con sql server................................................................ 143

Postgresql cluster con drbd y heartbeat ......................................... 182

Replicación con postgresql .............................................................. 197

Replicacion con postgres y pgpool en linux .................................... 214

iii
Introducción
El área de Bases de datos se ha desarrollado como tecnología a pasos agigantados en los últimos años,
debido al hecho que las empresas consideran de vital importancia a la información, convirtiendo a la misma
en el activo principal de las organizaciones.

Por ello es que dentro de las organizaciones se montan infraestructuras tecnológicas de gran envergadura
para soportar en un primer momento los datos de sus operaciones transaccionales. Sin embargo el área de
Bases de Datos ha crecido enormemente, hasta el punto de convertirse en una especialidad de la
informática, existen Maestrías orientadas a especializar en el área de Bases de Datos. Esta área abarca:
Modelo Relacional y lenguaje SQL, datos NO SQL, big data, bases de datos distribuidas, bases de datos
multidimensionales, Almacenes de Datos, Minería de Datos y/o Inteligencia de Negocios.

El presente documento recoge una serie de proyectos académicos estudiantiles, que abordan de una forma
práctica los temas de Replicación y Clustering de Bases de Datos. Se han utilizado para la implementación
los principales gestores del mercado, enfatizando las diferencias que implica el concepto de réplica y clúster
para cada gestor.

Para cada proyecto se brinda a modo de tutorial paso a paso, las acciones a realizar para poder montar el
escenario de una bases de datos distribuida, los elementos que deben configurarse, las herramientas a
instalar, con lujo de detalles para facilitar la reproducción de dicho escenario en cualquier curso de bases de
datos.

Este aporte es realizado con mucho esfuerzo, mostrando la capacidad y deseo de aprendizaje que existe en
los estudiantes de la Universidad de El Salvador, los cuales a pesar de las enormes limitantes de equipo e
infraestructura, hemos realizado este aporte a la comunidad latinoamericana. Se han sorteado cantidad de
limitantes, por mencionar algunos: en nuestra universidad se carece de un centro de cómputo adecuado para
desarrollar los escenarios de bases de distribuidas, no se cuenta con aulas adecuadas para proyectar, hasta el
acceso a un proyector se vuelve complicado, en algunas de las exposiciones de los escenarios se tenía el lio
que el proyector no tenía entrada hdmi, o de repente por ser un equipo antiguo se le arruinaba un color en
plena presentación. Toda una suerte de aventura, a pesar de todo ello la capacidad de aprender supera las
limitantes, y pues; estamos en total disposición a recibir un apoyo de parte suya desde cualquier parte del
mundo que lea este documento, cualquier apoyo por mínimo que parezca será muy bien recibido por los
estudiantes de El Salvador. Puede escribir al correo calderonperaza@gmail.com si desea apoyarnos o
ayudarnos para mejorar las condiciones de aprendizaje.

Además del presente libro, puede acceder a diferentes recursos en línea, como artículos o tutoriales del blog,
así como también los videos que documentan cada proyecto, los cuales están en las siguientes URLs:

http://BasesdeDatosUES.blogspot.com/

iv
http://www.youtube.com/channel/UCdb3GLHqHU6DIURmkpJjfgw

Si resulta un poco complicada la Url del canal de youtube, puede poner en el buscador: bases de datos ues
y encontrara rápidamente todos los videos de cada escenario de replicación.

Le invitamos a disfrutar del presente libro y de los recursos multimedia con los que se cuenta, que sea de
mucho provecho, se ha escrito con el mejor de los propósitos desde nuestro querido El Salvador, un país
muy pequeño pero muy cálido desde el corazón de Centro América.

Alex Calderón

v
MySQL: Replicación
Gómez Arévalo, Jacqueline Stephanie
Morán Monzón, Luis Antonio
Urquilla Campos, Edwin Alberto

Objetivos:

 Estudiar los principios acerca de replicación, su concepto, alcances, ventajas y desventajas.


 Desarrollar el procedimiento para la replicación en el gestor de bases de datos MySQL bajo un
escenario Maestro – Esclavo y sistemas operativos Debian Wheezy 7.0.
 Determinar las ventajas y desventajas en las diversas formas de replicación, específicamente en
MySQL.

Conceptos:
MySQL

Es un sistema de gestión de bases de datos relacional, distribuido y multihilo. Es código abierto y el soporte
es brindado por Oracle. La más reciente distribución es la 5.6.11 y fue lanzada el 25 de abril de 2013.

Replicación

Es el proceso de copiar y mantener objetos de las base de datos en múltiples bases de datos que forman un
sistema de bases de datos distribuido. La replicación permite que los datos de un servidor de bases de datos
(el maestro), sean replicados en uno o más servidores de bases de datos (los esclavos).

Replicación en MySQL.

Las características de MySQL soportan replicación asíncrona unidireccional: un servidor actúa como
maestro y uno o más actúan como esclavos.

¿Cómo funciona la replicación?1

El servidor maestro escribe actualizaciones en el fichero de log binario, y mantiene un índice de los ficheros
para rastrear las rotaciones de logs. Estos logs sirven como registros de actualizaciones para enviar a los
servidores esclavos. Cuando un esclavo se conecta al maestro, informa al maestro de la posición hasta la que
el esclavo ha leído los logs en la última actualización satisfactoria. El esclavo recibe cualquier actualización
que ha tenido lugar desde entonces, y se bloquea y espera para que el master le envíe nuevas actualizaciones.

1
Debe tenerse en cuenta que cuando se usa replicación, todas las actualizaciones de las tablas que se replican
deben realizarse en el servidor maestro. De otro modo, se debe ser cuidadoso para evitar conflictos entre
actualizaciones que hacen los usuarios a las tablas en el maestro y las actualizaciones que hacen en las tablas
de los esclavos.

Ventajas de la Replicación:

La replicación unidireccional tiene beneficios para la robustez, velocidad, y administración del sistema:

 La robustez se incrementa con un escenario maestro/esclavo. En caso de problemas con el


maestro, puede cambiar al esclavo como copia de seguridad.
 Puede conseguirse un mejor tiempo de respuesta dividiendo la carga de consultas de clientes a
procesar entre los servidores maestro y esclavo. Se puede enviar consultas SELECT al esclavo para
reducir la carga de proceso de consultas del maestro. Sin embargo, las sentencias que modifican
datos deben enviarse siempre al maestro, de forma que el maestro y el esclavo siempre estén
sincronizados. Esta estrategia de balanceo de carga es efectiva si dominan consultas que no
actualizan datos, pero este es el caso más habitual.
 Otro beneficio de usar replicación es que puede realizar copias de seguridad usando un servidor
esclavo sin molestar al maestro. El maestro continúa procesando actualizaciones mientras se realiza
la copia de seguridad

Desarrollo:
Se va a resolver un escenario en el cual se tiene un servidor de Bases de Datos actuando como Maestro o
Master y un servidor de Bases de Datos actuando como Esclavo o Slave; en caso se pueden realizar la
misma configuración para varios esclavos y la replicación seguirá funcionando de la misma manera. El
escenario es el siguiente:

Las configuraciones se realizan bajo dos computadoras con Sistema Operativo Debian Wheezy 7.0.

Si aún no se tiene instalado el servidor MySQL se instalará en una Terminal con la línea de comando:

apt-get install mysql-server

2
SERVIDOR MAESTRO:

Una vez instalado el servidor MySQL se procederá a las configuraciones correspondientes; primeramente se
realizará la configuración del servidor Maestro:2

1. Se modifica con vim, nano o cualquier editor de texto, el archivo my.cnf

# nano /etc/mysql/my.cnf

Y se modifican y/o agregan las siguientes líneas de código:

log-bin = /var/log/mysql/mysql-bin.log

binlog-do-db=DATABASE_TO_BE_REPLICATED

server-id=1

skip-host-cache

skip-name-resolve

Donde DATABASE_TO_BE_REPLICATED es el nombre de la base de datos que se va a replicar.

3
2. Se reinicia el servicio mysql:

# /etc/init.d/mysql restart

3. Se accede como root a mysql, pedirá la contraseña del servidor, ésta será la que se ha configurado en la
instalación:

# mysql –u root –p

4. Dentro de la consola de MySQL se creará una Base de Datos

mysql > CREATE DATABASE ReplicacionDB;

5. Se crean los privilegios para la Replicación:

mysql > GRANT REPLICATION SLAVE ON *.* TO 'USER'@'%' IDENTIFIED BY


'PASSWORD';

4
Donde

USER: Es el nombre del usuario del esclavo.

% : Es la dirección donde está almacenado el esclavo, puede determinarse que la dirección sea

cualquiera, ubicando el símbolo % en lugar de la dirección.

PASSWORD: Es la contraseña del usuario esclavo.

6. Se establecen los privilegios:

mysql > FLUSH PRIVILEGES;

7. Se obtiene la información del servidor maestro:

mysql > SHOW MASTER STATUS;

Este comando nos devolverá el archivo y la posición de la Base de Datos, es importante, tener
presentes estos datos, ya que serán utilizados en la configuración del esclavo.

8. Se accede a la base de datos:

mysql > USE ReplicacionDB;

9. Se congelará la base de datos para poder obtener el respaldo de la misma y poder restaurarla en el
servidor esclavo.

mysql > FLUSH TABLES WITH READ LOCK;

10. Sale de mysql.

mysql > EXIT;

5
11. Con mysqldump se va a crear un backup de la base de datos, para que luego sea restaurada en el
servidor esclavo.

# mysqldump -u root -p DATABASE_TO_BE_REPLICATED >


DATABASE_TO_BE_REPLICATED.sql

Donde DATABASE_TO_BE_REPLICATED es el nombre de la base de datos que se replicará.

Este comando generará un archivo .sql, el cual contendrá el backup de la base de datos, éste se
almacenará en la dirección hacia la cual apunta la terminal.

12. Luego se accede a la consola de mysql nuevamente para descongelar las tablas de la base de datos que
replicamos:

# mysql –u root –p

mysql > USE ReplicacionDB;

mysql > UNLOCK TABLES;

mysql > EXIT;

6
SERVIDOR ESCLAVO:

En el servidor esclavo, será necesario copiar el archivo .sql que fue generado, para restaurar la base de datos
a partir de él, puede ser copiado a través de una memoria usb, transferencia punto a punto o por llaves SSH,
tal cual es el ejemplo de la configuración aquí detallada:

1. A través de claves SSH, se transfiere el archivo de la máquina que sirve como servidor maestro a la que
sirve como servidor esclavo:

# scp DATABASE_TO_BE_REPLICATED.sql >


user@direccionIP:/rutaAlmacenamiento

Donde:

DATABASE_TO_BE_REPLICATED.sql: Es el archivo que se generó con mysqldump en el servidor


maestro.

user: Es el nombre del usuario de la computadora remota.

direccionIP: Es la dirección IP a la cual se copiará el archivo.

7
rutaAlmacenamiento: Es la ruta donde se almacenará el archivo.

2. Se crea la base de datos en el servidor esclavo, por medio del archivo que contiene el backup de la
misma.

# mysql –u root –p DATABASE_TO_BE_REPLICATED <


DATABASE_TO_BE_REPLICATED.sql

3. Con un editor de texto, ya sea vim, nano o cualquier otro se abre el archivo de configuración my.cnf

# nano /etc/mysql/my.cnf

Y se modifican o agregan las líneas:

server-id=2

replicate-do-db=DATABASE_TO_BE_REPLICATED

skip-host-cache

skip-name-resolve

8
4. Se reiniciará el servicio mysql para poder aplicar los cambios.

# /etc/init.d/mysql restart

5. Se accederá la consola de MySQL para configurar el esclavo:

# mysql –u root –p

6. Se detienen los procesos del esclavo:

mysql > SLAVE STOP;

9
7. Luego se hará referencia al servidor maestro del cual obtendrá las actualizaciones el servidor esclavo:

mysql > CHANGE MASTER TO MASTER_HOST='192.168.56.1',

-> MASTER_USER='user',

-> MASTER_PASSWORD='password',

-> MASTER_LOG_FILE='/var/log/mysql/mysql-bin.0000XX',

-> MASTER_LOG_POS=XXX;

Dónde:

MASTER_HOST: Hace referencia a la dirección IP en la cual está el servidor maestro.

MASTER_USER: Usuario del servidor maestro con el cual se accede a MySQL.

MASTER_PASSWORD: Contraseña del servidor maestro con el cual se accede a MySQL.

MASTER_LOG_FILE: La dirección y el número que se obtuvo cuando se realizó el SHOW MASTER


STATUS.

MASTER_LOG_POS: Posición de los logs, también obtenida con SHOW MASTER STATUS en el
servidor maestro.

10
8. Se inicia el servidor esclavo:

mysql > SLAVE START;

9. Se verifica el estado del servidor esclavo:

mysql > SHOW SLAVE STATUS;

DEMOSTRACIÓN:

1. En el servidor maestro se creará una Tabla llamada Alumno:

# mysql –u root –p

mysql > USE ReplicacionDB

mysql > CREATE TABLE Alumno (nombre VARCHAR(10));

11
Y luego verificamos las tablas con el comando:

mysql > SHOW TABLES;

Y se podrá comprobar que la tabla efectivamente ha sido creada:

2. En el servidor esclavo, se accederá a MySQL y se verán reflejados los cambios de la tabla creada en el
servidor maestro:

# mysql – u root –p

mysql > SHOW DATABASES;

mysql > USE ReplicacionDB;

mysql > SHOW TABLES;

Y se podrá ver que el cambio ha sido aplicado en la base de datos.

12
Referencias:

1. Oracle MySQL, Capítulo 6. Replicación en MySQL. Obtenida el 3 de mayo de 2013 en


http://dev.mysql.com/doc/refman/5.0/es/replication.html

2. Wallen J., Set up MySQL database replication to ensure up-to-date backups. Obtenida el 31 de abril
de 2013 en http://www.techrepublic.com/blog/itdojo/set-up-mysql-database-replication-to-
ensure-up-to-date-backups/3340?pg=1

13
PostgreSQL Cluster con PGPOOL-II
Henry Renderos, David García

Objetivos:

 Aprender los conceptos básicos sobre el manejo de un clúster utilizando PostgreSQL 9.1 y
PGPOOL-II en Linux.
 Comprender el funcionamiento de un clúster.
 Establecer los parámetros de inicialización para el clúster.
 Realizar un escenario demostrativo sobre el uso de un clúster empleando replicación de bases de
datos y sentencias SQL.
 Visualizar el comportamiento de la replicación en la red.

Conceptos:

¿Qué es un clúster?

Un clúster es simplemente una colección de componentes que se unen y trabajan como un solo
componente para proveer alta disponibilidad. Cuando hablamos de clúster de bases de datos, nos referimos
a una arquitectura en la que tenemos varios equipos con parte de los datos del usuario trabajando al unísono
como un solo sistema. La arquitectura de un clúster de base de datos viene definida por la manera en que se
almacenan los datos en cada nodo.

¿Qué es PostgreSQL?

PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y
con su código fuente disponible libremente. Es el sistema de gestión de bases de datos de código abierto
más potente del mercado y en sus últimas versiones no tiene nada que envidiarle a otras bases de datos
comerciales.

PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la
estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará
funcionando.

¿Qué es PGPOOL-II?

pgpool-II es un middleware que se encuentra entre los servidores de PostgreSQL y un cliente de base de
datos PostgreSQL. Ofrece las siguientes características:

Agrupación de conexiones

15
pgpool-II mantiene las conexiones establecidas a los servidores PostgreSQL, y los reutiliza cada vez que una
nueva conexión con las mismas propiedades (es decir, nombre de usuario, bases de datos, la versión del
protocolo) entra en juego reduce la sobrecarga de la conexión, y mejora el rendimiento global del sistema.

Replicación

pgpool-II puede gestionar múltiples servidores PostgreSQL. La activación de la función de replicación hace
que sea posible la creación de una copia de seguridad en tiempo real en 2 o más grupos PostgreSQL, de
manera que el servicio pueda continuar sin interrupción si uno de esos grupos falla.

Balanceo de carga

Si se replica una base de datos (ya que se ejecuta en el modo replicación o modo maestro / esclavo), la
realización de una consulta SELECT en cualquier servidor devolverá el mismo resultado. pgpool-II se
aprovecha de la función de replicación con el fin de reducir la carga en cada servidor PostgreSQL. Lo hace
mediante la distribución de las consultas SELECT entre los servidores disponibles, mejorando el
rendimiento global del sistema. En un escenario ideal, el rendimiento de lectura podría mejorar
proporcionalmente al número de servidores PostgreSQL. El equilibrio de carga funciona mejor en un
escenario donde hay una gran cantidad de usuarios que ejecutan muchas consultas de sólo lectura al mismo
tiempo.

Limitar el exceso de conexiones

Hay un límite en el número máximo de conexiones simultáneas con PostgreSQL, y nuevas conexiones son
rechazados cuando se alcanza este número. Al aumentar este número máximo de conexiones, sin embargo,
aumenta el consumo de recursos y tiene un impacto negativo en el rendimiento general del sistema. pgpool-
II también tiene un límite en el número máximo de conexiones, pero las conexiones adicionales se pondrán
en cola en lugar de devolver un error de inmediato.

Consultas en paralelo

Con la función de consultas en paralelo, los datos se pueden dividir entre varios servidores, por lo que una
consulta se puede ejecutar en todos los servidores al mismo tiempo, reduciendo el tiempo de ejecución
total. La consulta paralela es la que funciona mejor en la búsqueda de datos a gran escala.

pgpool-II habla backend de PostgreSQL y el protocolo de interfaz, y transmite mensajes entre un backend y
un frontend. Por lo tanto, una aplicación de base de datos (frontend) piensa que pgpool-II es el servidor
PostgreSQL actual, y el servidor (backend) ve a pgpool-II como uno de sus clientes. Debido a que pgpool-
II es transparente para el servidor y el cliente, una aplicación de base de datos existente se puede utilizar con
pgpool-II casi sin un cambio en su código fuente.

16
Desarrollo:

INSTALACIÓN

1. Utilidades para la gestión y el mantenimiento del clúster.

# apt-get install ntp openssl file psmisc sysstat bzip2 unzip nmap dstat
rsync wget ccze tcpdump pciutils dnsutils host

2. Configuraremos dos archivos del sistema de Debian, esto nos facilitará hacer referencias a nombres de
host y no a direcciones IP.

# nano /etc/hostname

Acá le colocaremos el nombre de pgsql1 en el nodo 1 y pgsql2 en el nodo 2.

# nano /etc/hosts

Acá agregaremos los nombres de host pertenecientes al clúster con sus respectivas direcciones IP.

17
En este momento tenemos configurados los nodos del clúster de la siguiente forma, luego de esto debemos
reiniciar los nodos:

 Nodo 1
o Hostname: pgsql1
o Dirección IP: 192.168.1.7
 Nodo 2
o Hostname: pgsql2
o Dirección IP: 192.168.1.4
 Máscara de red de 24 bits.
 Dirección IP del enrutador: 192.168.1.1

3. Comenzaremos a configurar PostgreSQL en ambos nodos pero pgpool-II solo en el nodo pgsql1. Los
comandos deberán ejecutarse como root (#) o como el usuario postgres ($).

4. Instalaremos las cabeceras de la librería de PostgreSQL, el paquete de desarrollo de PostgreSQL y las


utilidades de compilación de GNU)

# apt-get install libpq-dev postgresql-server-dev-9.1 bison build-essential

5. Una vez instalado, instalaremos PostgreSQL en ambos nodos del clúster:


18
# apt-get install postgresql-9.1 postgresql-contrib-9.1 postgresl-doc-9.1
uuid libdbd-pg-perl

6. Finalmente instalamos pgpool-II en el nodo identificado como pgsql1

# apt-get install pgpool2 libpgpool0

CONFIGURACIÓN DE POSTGRESQL

Los siguientes pasos se aplican a las instancias de PosgreSQL en los nodos pgsql1 y pgsql2.

1. Comenzaremos, como usuario postgres, añadiendo el usuario de base de datos (role) pgpool2, sin
contraseña:

# su – postgres

$ createuser –superuser pgpool2

2. Editamos ahora el fichero /etc/postgresql/9.1/main/pg_hba.conf y añadimos el acceso para todos


los usuarios desde cualquier dirección IP. (NOTA: esto se hace por motivos de enseñanza, el acceso sólo
debe permitirse para el usuario pgpool2 desde la dirección IP en donde está instalado.)

# nano /etc/postgresql/9.1/main/pg_hba.conf

El fichero deberá quedarnos de la siguiente manera:

19
3. Por último indicaremos a PostgreSQL que escuche en todas las interfaces pues, por defecto, sólo lo
hace en el localhost. Editamos el fichero /etc/postgresql/9.1/main/postgresql.conf y cambiamos la
siguiente directiva.

listen_addresses = ‘*’

También podemos restringirlo a que solo escuche peticiones provenientes de la dirección IP en donde se
encuentra pgpool-II

4. Reiniciamos PostgreSQL para activa los cambios.

# service postgresql restart

CONFIGURACIÓN DE PGPOOL-II

La configuración de pgpool-II la realizaremos únicamente en el nodo pgsql1, pues sólo ese host lo posee.

20
1. Editaremos el archivo /etc/pgpool2/pgpool.conf

Deberemos editar el archivo para configurarlo a nuestra medida. Se configurarán:

 Pool de conexiones
 Replicación
 Balanceo de carga

Las únicas directivas que modificaremos se muestran a continuación, las demás las dejaremos intactas:

listen_addresses = ‘*’

port = 9999

backend_hostname0 = ‘pgsql1’

backend_port0 = ‘5432’

backend_weight0 = 1

backend_hostname1= ‘pgsql2’

backend_port1 = ‘5432’

backend_weight1 = 1

replication_mode = true

load_balance_mode = true

replicate_select = true

pgpool2_hostname = ‘pgsql1’

2. Para arrancar pgpool-II lo haremos con el siguiente comando (start o restart):

# service pgpool2 start <restart>

3. Si queremos arrancar pgpool-II en modo de depuración primero lo detendremos con el comando


“service pgpool2 stop” y lo arrancaremos en modo debug con de la siguiente manera:
21
# pgpool –n –d –f /etc/pgpool2/pgpool.conf

4. En otra pestaña o ventana de la terminal probaremos conectarnos a través de pgpool-II con el


siguiente comando:

# psql –h pgsql1 –p 9999 –U pgpool2 –d postgres

El significado del comando anterior se detalla a continuación:

 -h es el nombre del host al que nos vamos a conectar y en donde está instalado pgpool-II.
 -p es el puerto que definimos en el archivo /etc/pgpool2/pgpool.conf
 -U es el usuario que creamos en los dos nodos del clúster.
 -d es la base de datos a la que nos vamos a conectar

Si todo va bien podremos ver que en la terminal se nos muestra algo como sigue:

postgres=#

Lo que nos indica que nos hemos podido conectar a través de pgpool-II

PRUEBAS DE REPLICACIÓN

1. Crearemos una base de datos que será replicada a través de pgpool-II de la siguiente forma:

# createdb –h pgsql1 –p 9999 –U pgpool2 basesdedatosues

2. Si nos loggeamos como usuario postgres en los dos nodos del clúster (su – postgres) y ejecutamos el
siguiente comando para visualizar las bases de datos, nos debería de aparecer en cada nodo la base de datos
que creamos en el paso anterior:

22
$ psql -l

POSTGRESQL Y PGPOOL-II EN LA RED

A continuación se muestran algunas capturas de lo que sucede en la red al momento de que se realiza una
sentencia SQL a través de pgpool-II en los nodos pertenecientes al clúster.

1. Instalaremos el sniffer wireshark y luego lo ejecutaremos:

# apt-get install wireshark

# wireshark &

2. Seleccionaremos la interfaz eth0 y capturaremos algunos paquetes, realizaremos una consulta insert a
través de pgpool-II y observaremos que aparecerán los siguientes paquetes en nuestra escucha:

23
3. Observaremos con más detenimiento el paquete 874 y veremos que al momento de la replicación lo
que se transporta a través de la red son las sentencias SQL. La query que fue introducida en el nodo pgsql1
a través de pgpool-II fue “insert into usuario values („Base‟,‟Pass‟); y efectivamente vemos en el paquete que
esa sentencia es la replicada en el nodo pgsql2 con dirección IP 192.168.1.4.

Referencias:Jaume Sabater (2008). Replicación y alta disponibilidad de PostgreSQL con pgpool-II. (1 Nov –
2008) http://linuxsilo.net/articles/postgresql-pgpool.htmlpgpool Global Development Group (2003 –
2011). Pgpool-II user manual http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-en.html

24
Oracle Stream Replication
Portillo Alvarado, Pablo Oswaldo.
Gómez Arana, Herber Oswaldo.
Mendes Salgado, Rebeca Marcela.
Chicas Blanco, Karla Grisel.

Objetivos:

 Explicar de forma clara los conceptos relacionados con la replicación Stream en Oracle database
11g R2.
 Explicar la diferencia entre una replicación síncrona y una replicación asíncrona.
 Presentar con claridad las configuraciones o pasos que se deben seguir para llevar a cabo una
replicación stream en Oracle database.
 Replicar cambios DML de manera bidirectional en 2 Bases de Datos usando el gestor Oracle
Estándar Edition 11g.

25
Conceptos:
Antes de seguir es importante conocer algunos conceptos.

¿Qué es un Oracle Stream?


Es una herramienta proporcionada por Oracle que se encarga de propagar y administrar datos,
transacciones y eventos en una fuente de datos ya sea dentro de una base de datos, o de una base de datos a
otra, permitiendo tener asi ambas bases de datos “sincronizadas” y la información más segura.

Tipos de Streams:

Replicación Síncrona:

Este tipo de replicación tiene sus limitantes, principalmente debe ser utilizada para aplicaciones en las cuales
se necesite un flujo pequeño de información, ya que solo soporta la replicación de 1 o pocas tablas de un
esquema determinado y solo replica cambios DML; los DDL no son soportados. Utiliza queues llamadas
también colas que se encargan de capturar la replicación y encolarla hacia la otra base de datos, y viceversa.
Para más información consulte:

http://docs.oracle.com/cd/B28359_01/server.111/b28321/strms_capture.htm#STRMS168.

Replicación Asíncrona:
D
T
Replicación mediante procesos, los cambios se propagan a través de redo-logs. Puede propagar tanto
cambios DDL como DML.

Básicamente la replicación Stream de Oracle consta de estos 3 pasos:


D

CAPTURE PROPAGATION APPLY A

Source Destinetion
Database Database

Cuando usted inserta un dato y luego que hace commit, se captura esa transacción, una vez hecho esto, los
datos se propagan hacia la base de Datos destino donde se aplican dichos cambios.

26
Capture (captura):

Esta paso se lleva a cabo en la base de datos origen de la replicación capturando los cambios en el momento
en que son realizados, estos cambios pueden ser DML o DDL dependiendo del tipo de replicación q se este
realizando, y pueden ser realizados mediante COLAS o mediante PROCESOS dependiendo de si es
síncrona o asíncrona.

Propagation (propagación):

Este paso lo realiza la base de datos origen quien envía el cambio luego de capturarlo, este se envía mediante
redologs que son interpretados en la base de datos destino.

Apply (aplicacion):

Este paso se realiza en la base de datos destino quien toma los redologs y los aplica en sus tablas, esquemas
o base de datos.

27
Desarrollo:
Este documento explica cómo implementar una replicación de ORACLE STREAM en ORACLE 11g R2 a
nivel de servidores Oracle entre 2 bases de datos diferentes en Sistemas Operativos Windows Server 2012,
arquitectura para 64bits. Desde nuestro punto de vista lo primero que hay que hacer es revisar el tipo de
instalación que realizamos ya que si es la Standar Edition la única forma de realizar la replicación de
Streams es atreves de un mecanismo sincrono ya que esta instalación no soporta la replicación a través de
procesos, este documento se encargara únicamente de la replicación síncrona (a través de
queues/colas) entre bases de datos.
Si usted necesita replicar grandes volúmenes de información ya sea una base de datos entera o un esquema
completo deberá utilizar otro tipo de instalación como la Enterprise que soporta la replicación de tipo
asíncrona. Vea Imagen 1

Imagen 1

Antes que todo, debemos crear las Bases de Datos en modo archive log.
En nuestro caso se creara la base de datos BDA en el servidor #1 y BDB en el servidor #2.

CONFIGURACION DEL ENTORNO DE RED.

Ambos servidores se encuentran conectados punto-punto utilizando la subred 172.16.0.0/24.

 El servidor #1 tiene la dirección 172.16.0.1


 El servidor #2 la dirección 172.16.0.2.

Si usted creo las bases de datos en modo archive log puede obviar el paso 1.

1. Habilitar el modo Archive log en ambas Bases de Datos.

SQL> shutdown immediate


SQL> startup mount;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE ARCHIVE LOG START

28
2. Agregar las cadenas de conexión respectivas en el archivo TNSNAMES.ORA.
Estas nos ayudaran a lograr la conectividad entre ambos servidores a nivel de las bases de datos.

El directorio en el que se encuentra el archivo es


C:\app\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora

NOTA: ya existe en dichos archivos otra entrada con el nombre de la base de datos que creamos al inicio.

2.1 Editar el archivo tnsnames.ora en Servidor #1 (BDA) agregando la siguiente cadena de


conexión referente a la Base de Datos BDB.
BDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.0.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BDB)
)
)

2.2 Editar el archivo tnsnames.ora en Servidor #2 (BDB) agregando la siguiente cadena de


conexión referente a la Base de Datos BDA.

BDA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BDA)
)
)

3. Creación de Usuario administrador de la replicación stream


De igual manera creamos un Tablespace para el usuario y asignamos los privilegios necesarios para que
nuestro usuario pueda realizar tareas administrativas sobre nuestra replicación stream.
Es recomendable crear un usuario nuevo que administre la replicación stream, dicho usuario deberá ser
creado de la misma forma en ambas bases de datos.

3.1- Creación de Tablespace y Datafiles.



En su navegador abra el Enterprise Manager y conéctese como usuario sys.

De click en la ficha Servidor, luego diríjase a la sección Almacenamiento y de click a Tablespaces.

Dar click el boton crear; esto abrira una ventana, En la seccion Crear Trablespace coloca el
nombre que se le dara al tablespace, en nuestro caso se llama streams_tbs. Ver Imagen 2.
 En la seccion Archivo de Datos, dar click en el boton Agregar. Esto abrira la seccion Agregar
Archivos de Datos
 Escribimos el nombre, el cual sera streams_tbs.dbf.
 En la seccion Almacenamiento damos un incremento de 100MB. El tamaño maximo del archivo
debe de quedar en Ilimitado. Ver configuracion completa en Imagen 3.
 Damos click en Continuar.
 Vamos al final de la pagina y damos click en Aceptar
Se puede ver que se a creado correctamente el tablespace. Ver imagen 4.

29
Imagen 2

Imagen 3

30
Imagen 4

3.2- Crea el usuario strmadmin.


 Ir a ficha Servidor.
 En el apartado Seguridad damos click en la opción Usuarios.
 Se nos abre una ventana en la que hay varios usuarios creados, estos no nos interesan, por lo tanto
crearemos uno nuevo, para ello damos click en el botón Crear.
 Creamos el usuario strmadmin, con contraseña strmadmin y le asignamos el tablespace creado
recientemente streams_tbs y como tablespace Temporal le asignamos el TEMP. Ver Imagen 5.
 Damos click en Aceptar y listo hemos creado nuestro usuario.

31
Imagen 5

3.3- Ahora vamos a asignar privilegios.

3.3.1 Lo primero sera convertir nuestro usuario strmadmin en un superusuario del EM


(Enterprise manager) esto nos va a permitir gestionar y monitorear nuestra replicación
stream síncrona con la ayuda de las herramientas del enterprise manager.

 Dar click en la ficha Servidor.


 Ir a la sección Administración de Enterprise Manager y seleccionamos Usuarios de
Enterprise Manager. Nos abrirá una nueva ventana.
 En la sección Crear Administrador, agregamos el usuario strmadmin creado recientemente, para
ello damos click en la lamparita que se muestra en la Figura 6, se abrirá una ventana en la que
debemos seleccionar nuestro usuario strmadmin, damos click en Seleccionar.
 Una vez seleccionamos el usuario, damos click en el botón Revisar, luego Terminar.
 Ahora lo que queda es dejar nuestro Usuario como Superadministrador, para ello seleccionamos el
usuario recién agregado, se abrirá la ventana en la que lo dejamos como Superadministrador como
se muestra en la Imagen 7. Damos click en Revisar, luego en Terminar y listo.

32
Imagen 6

Imagen 7

La lista de usuarios debe quedar como se muestra en la Imagen 8. Con esto tenemos a nuestro usuario
strmadmin con privilegios de Superadministrador.

33
Imagen 8

3.3.2- Agregación de Privilegios requeridos con GRANT.


Estos privilegios le permitirán a nuestro usuario realizar tareas de administración y ser dueño de nuestra
replicación stream.
Abrimos una consola y con la ayuda del sqlplus nos conectamos como usuarios sys.
>sqlplus „/ as sysdba‟

SQL> grant execute on dbms_aqadm to strmadmin;


SQL> grant execute on dbms_capture_adm to strmadmin;
SQL> grant execute on dbms_propagation_adm to strmadmin;
SQL> grant execute on dbms_streams_adm to strmadmin;
SQL> grant execute on dbms_apply_adm to strmadmin;
SQL> grant execute on dbms_flashback to strmadmin;

SQL> begin dbms_streams_auth.grant_admin_privilege


(grantee => 'strmadmin',
grant_privileges => true);
end;
/

3.3.3 Agregar el rol DBA

SQL> grant connect, resource, dba to strmadmin;

3.3.4 Agregación de los roles EXP_FULL_DATABASE e IMP_FULL_DATABASE.

SQL> grant exp_full_database to strmadmin;


SQL> grant imp_full_database to strmadmin;

34
3.3.5 Agregación de variables de entorno necesarias para el Streams.
SQL> alter system set global_names=true;
SQL> alter system set Streams_pool_size=100m;

4 Crear el Database link


El dblink debe tener el mismo nombre global de la base de datos de destino, en nuestro caso BDA y BDB;
el dblink debe ser creado en el esquema del Database Stream Administrator.
Nos conectamos en nuestra Base de Datos y creamos un enlace hacia la Base de Datos a la que nos
deseamos conectar.

4.1- Creación de Database Link en Base de Datos de Servidor #1: BDA


Para ello nos logeamos en el servidor 1 como nuestro usuario strmadmin utilizando la cadena de conexión
de nuestra base de datos en este caso BDA y Se crea el enlace hacia la Base de Datos de servidor #2 BDB.

SQL> CONNECT strmadmin/strmadmin@BDA


SQL> CREATE DATABASE LINK BDB CONNECT TO strmadmin
IDENTIFIED BY strmadmin USING 'BDB';

4.2- Creación de Database Link en Base de Datos de servidor #2: BDB.

Para ello nos logeamos en el servidor 2 como nuestro usuario strmadmin utilizando la cadena de conexión
de nuestra base de datos en este caso BDB y Se crea el enlace hacia la Base de Datos de servidor #1 BDA.

SQL> CONNECT strmadmin/strmadmin@BDB


SQL> CREATE DATABASE LINK BDA CONNECT TO strmadmin
IDENTIFIED BY strmadmin USING 'BDA';

5 Creación de las colas.

Este paso debe llevarse a cabo en el Enterprise Manager, ingresando con el usuario que se creó
anteriormente y con su respectiva contraseña. Esto debe de realizarse en ambas Bases de Datos.

Se crearan 2 parámetros de inicialización, con nombres, capture_queue y apply_queue .

Vea el siguiente enlace y diríjase a la sección

http://docs.oracle.com/cd/B28359_01/server.111/b28324/tdpii_common_ii.htm#CHDJHCAI
 Ir a la pestaña Movimiento de Datos
 En la sección Streams seleccionar la opción Gestionar Colas Avanzadas. Esto abrirá una nueva
ventana
 Buscamos un botón que dice Crear.
 Seleccionamos Cola Normal, Tipo de Dato SYS.ANYDATA
 Creamos las colas capture_queue y apply_queue como se muestran en las Figuras Imagen 9 e
Imagen 10.

35
Imagen 9

Imagen 10

36
6 Creación de tabla en el esquema del usuario HR.
Esta tabla debe crearse en ambas bases de datos ya que nuestra replicación será síncrona, por lo tanto no
podremos replicar cambios de tipo DDL y al crear una tabla en una base de datos esta no se replicara en la
otra, para ello creamos esta tabla en este esquema y en ambas DB y la definiremos mas adelante para ser el
objeto que tenemos como objetivo de nuestra replicación, para ello:

Conectarse al esquema de la Base de Datos en el que se desea crear una nueva tabla.
Si no ha desbloqueado el esquema, puede hacer lo siguiente en SQLPLUS desde el usuario sys. Para este
caso se usara el esquema hr.
> sqlplus „/ as sysdba‟
SQL> alter user hr account unlock identified by hr;

Con esto desbloqueamos el esquema hr y le asignamos la contraseña hr.


Nos conectamos a dicho esquema.
> sqlplus „/ as sysdba‟
SQL> connect hr/hr@BDX
Donde X representa A o B, Si está en maquina Servidor #1 reemplace BDX por BDA, de lo contrario
reemplácela por BDB. Ahora creamos la tabla.
SQL> create table alumno ( ID number primary key, nombre varchar2(20), carrera varchar2(20));

7 Creación y agregación de reglas del apply process en ambas Bases de Datos.


7.1.1- Creación del apply process en BDA ubicada en Servidor #1.
BEGIN
DBMS_APPLY_ADM.CREATE_APPLY(
queue_name => 'strmadmin.apply_queue',
apply_name => 'apply_emp_dep',
apply_captured => FALSE);
END;
/

7.1.2- Agregación de reglas del apply process en BDA ubicada en Servidor #1.
BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_RULES(

table_name => 'hr.alumno',

streams_type => 'apply',

streams_name => 'apply_emp_dep',

37
queue_name => 'strmadmin.apply_queue',

source_database => 'BDB');

END;

7.2.1- Creación del apply process en BDB ubicada en Servidor #2.


BEGIN

DBMS_APPLY_ADM.CREATE_APPLY(

queue_name => 'strmadmin.apply_queue',

apply_name => 'apply_emp_dep',

apply_captured => FALSE);

END;

7.2.2- Agregación de reglas del apply process en BDB ubicada en Servidor #2.
BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_RULES(

table_name => 'hr.alumno',

streams_type => 'apply',

streams_name => 'apply_emp_dep',

queue_name => 'strmadmin.apply_queue',

source_database => 'BDA');

END;

38
8 Configuración de la Propagación para la notificación de cambios.
8.1. En Base de Datos BDA.

BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(

table_name => 'hr.alumno',

streams_name => 'send_emp_dep',

source_queue_name => 'strmadmin.capture_queue',

destination_queue_name => 'strmadmin.apply_queue@BDB',

source_database => 'BDA',

queue_to_queue => TRUE);

END;

8.2. En Base de Datos BDB.

BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(

table_name => 'hr.alumno',

streams_name => 'send_emp_dep',

source_queue_name => 'strmadmin.capture_queue',

destination_queue_name => 'strmadmin.apply_queue@BDA',

source_database => 'BDB',

queue_to_queue => TRUE);

END;

39
9 Configuración de Captura Síncrona.
En ambas Bases de Datos hacer lo siguiente. Esto es necesario para capturar lo que se propaga de la otra
Base de Datos con la que se está conectado.
BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_RULES(

table_name => 'hr.alumno',

streams_type => 'sync_capture',

streams_name => 'sync_capture',

queue_name => 'strmadmin.capture_queue');

END;

10 Configuración de instanciación de SCN.


10.1 En Base de Datos BDA.
DECLARE

iscn NUMBER;

BEGIN

iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();

DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@BDB(

source_object_name => 'hr.alumno',

source_database_name => 'BDA',

instantiation_scn => iscn);

END;

40
10.2 En Base de Datos BDB.
DECLARE

iscn NUMBER;

BEGIN

iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();

DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@BDA(

source_object_name => 'hr.alumno',

source_database_name => 'BDB',

instantiation_scn => iscn);

END;

11 Iniciar apply process.


Esta configuración se hace en ambas Bases de Datos.
BEGIN

DBMS_APPLY_ADM.START_APPLY(

apply_name => 'apply_emp_dep');

END;

12 Probar nuestro Oracle Stream.


Nos conectamos en la base de Datos BDA conectados como usurio “hr” y contraseña “hr” e insertamos
algunos campos.
INSERT INTO alumno values(1,’Pablo’,’Sistemas’);
INSERT INTO alumno values(2,’Oswaldo’,’Sistemas’);
commit;

Si nos conectamos en Base de Datos BDB como hr y hacemos un select de la siguiente forma obtendremos
el siguiente resultado.

SELECT * FROM alumno;


1 Pablo Sistemas
2 Oswaldo Sistemas.

De igual forma se pueden ingresar campos en la base de Datos BDB, y se propagaran los cambios a BDA.

41
Referencias:

 Documentación oficial proporcionada por Oracle :

http://docs.oracle.com/cd/B28359_01/server.111/b28321/strms_capture.htm#STRMS168

http://docs.oracle.com/cd/B28359_01/server.111/b28324/tdpii_common_ii.htm#CHDJHCAI

42
Oracle Data Guard
Samuel Menéndez, Lisandro Martínez, Isidro Flores, Erick Valenzuela

Objetivos

 Documentar la creación de una base de datos standby (física) con la solución de Oracle Data Guard
11g R2.
 Sincronizar una base de datos standby física con su contraparte de producción para la protección de
datos y la alta disponibilidad.
 Permitir que una base de datos standby física esté abierta para acceso de solo lectura– para
informes, consultas simples o complejas, clasificación, acceso basado en la web, etc. mientras se
aplican cambios a la base de datos de producción.
 Identificar todos requisitos necesarios tanto de software como de hardware para tener un óptimo
rendimiento en la tecnología Oracle en su versión Enterprise.

Conceptos
Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo
contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca
puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos
en papel e indexados para su consulta. Actualmente, y debido al desarrollo tecnológico de campos
como la informática y la electrónica, la mayoría de las bases de datos están en formato digital
(electrónico), y por ende se ha desarrollado y se ofrece un amplio rango de soluciones al problema
del almacenamiento de datos.

Un Sistema de Gestión de Bases de Datos (SGBD) es un conjunto de programas que permiten


el almacenamiento, modificación y extracción de la información en una base de datos, además de
proporcionar herramientas para añadir, borrar, modificar y analizar los datos. Los usuarios pueden
acceder a la información usando herramientas específicas de interrogación y de generación de
informes, o bien mediante aplicaciones al efecto. Los SGBD también proporcionan métodos para
mantener la integridad de los datos, para administrar el acceso de usuarios a los datos y recuperar la
información si el sistema se corrompe. Permite presentar la información de la base de datos en
variados formatos. La mayoría de los SGBD incluyen un generador de informes. También puede
incluir un módulo gráfico que permita presentar la información con gráficos y tartas.

Oracle Corporation es una de las mayores compañías de software del mundo. Sus productos van
desde bases de datos (Oracle) hasta sistemas de gestión. Cuenta además, con herramientas propias
de desarrollo para realizar potentes aplicaciones, como Oracle Designer, Oracle JDeveloper y
Oracle Developer Suite. Hoy Oracle es el estándar de oro para la tecnología de base de datos y
aplicaciones en las empresas en todo el mundo. La compañía es el proveedor líder mundial de
software de gestión de información y la segunda mayor compañía de software independiente. La
adquisición de Sun le otorgó un papel de liderazgo en el campo del software.

Se considera a Oracle Database como uno de los sistemas de bases de datos más completos,
destacando:
43
 Soporte de transacciones: Una transacción es una interacción con una estructura de datos
compleja, compuesta por varios procesos que se han de aplicar uno después del otro. La
transacción debe realizarse de una sola vez y sin que la estructura a medio manipular pueda
ser alcanzada por el resto del sistema hasta que se hayan finalizado todos sus procesos.
 Estabilidad: se dice que un sistema es estable cuando su nivel de fallos disminuye por
debajo de un determinado umbral, que varía dependiendo de la estabilidad que se requiera.
 Escalabilidad: es la propiedad deseable de un sistema, una red o un proceso, que indica su
habilidad para reaccionar y adaptarse sin perder calidad, o bien manejar el crecimiento
continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande
sin perder calidad en los servicios ofrecidos.
 Soporte multiplataforma: es un atributo conferido a los programas informáticos o los
métodos de cálculo y los conceptos que se ejecutan e interoperar en múltiples plataformas
informáticas.

Oracle Data Guard proporciona la infraestructura de software de administración, control y


automatización para crear y mantener una o más bases de datos de reserva y así proteger los datos
de Oracle contra fallas, desastres, errores y daños. Data Guard es una de las numerosas
características de alta disponibilidad (HA) integradas en Oracle Database, que aseguran la
continuidad de los negocios reduciendo al mínimo el impacto del tiempo de inactividad
programado y no programado.[1]

Las bases de datos de reserva o stanby pueden usarse para realizar tareas de mantenimiento
programadas en forma gradual. El mantenimiento se realiza primero en la base de datos de reserva.
Una vez completadas las tareas de mantenimiento, la producción pasa a la base de datos de reserva.
El único tiempo de inactividad es el necesario para efectuar la transición. De ese modo, aumenta la
disponibilidad y se reduce el riesgo al realizar mantenimiento de hardware o del sistema operativo,
mantenimiento de sitios o al aplicar nuevos grupos de parches a la base de datos, actualizar a
versiones completas o implementar otros cambios significativos en la base de datos.

Una base de datos física de reserva, como es una réplica exacta de la base principal, también
puede servir para aliviar a la base de datos principal de la sobrecarga de realizar backups.

Data Guard 11g versión 2 está diseñado para reducir el impacto del transporte sincrónico en el
rendimiento de la base de datos principal. Ahora los datos redo se transmiten a la base de datos de
reserva remota en paralelo con las E/S de archivos de registro locales en línea de la base principal, y

44
así se evita que las E/S de reserva influyan sobre el total de tiempo de recorrido de ida y vuelta. De
ese modo, se permite mayor distancia geográfica entre las bases de datos principal y de reserva en
una configuración sincrónica con cero pérdidas de datos. En redes de baja latencia, puede reducir el
impacto de la replicación sincrónica en el rendimiento de la base de datos principal hasta alcanzar
un nivel cercano a cero, por lo cual resulta interesante para complementar una base de reserva
asincrónica remota a fin de lograr una protección de alta disponibilidad y cero pérdida de datos
contra fallas de las bases de datos y los componentes (fallas de redes SAN, por ejemplo).

Una transición es una operación planificada que se usa para reducir el tiempo de inactividad
durante el mantenimiento programado, como actualizaciones de hardware o del sistema operativo,
actualizaciones graduales de la base de datos de Oracle y otras tareas de mantenimiento que se
realizan en las bases de datos. Independientemente del servicio de transporte (ya sea sincrónico o
asincrónico) o el modo de protección que se utilice, una transición siempre es una operación en la
que no se pierde ningún dato.

El archivo pfile contiene todos los parámetros de inicialización de la base de datos. [2]

Un SPFILE (archivo de parámetros del servidor), por otro lado, es un archivo binario de servidor
persistente que sólo se puede modificar con el comando "ALTER SISTEMA DE JUEGO". Esto
significa que usted ya no necesita una copia local de la pfile para iniciar la base de datos desde un
equipo remoto. Edición de una SPFILE se corrompen, y usted no será capaz de iniciar la base de
datos más. [3]

 SQL*Plus es un programa de línea de comandos de Oracle que puede ejecutar comandos SQL y
PL/SQL de forma interactiva o mediante un script. SQL*Plus opera como una herramienta
relativamente simple con una interfaz de líneas de comando básica. Los programadores y los
administradores de bases de datos (DBA's) lo usan de forma muy común como interfaz
fundamental en la mayoría de las instalaciones de software de Oracle. Oracle 2010, Oracle®
Database SQL Language Reference 11g, obtenida el 1 de mayo de 2013, de
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6016.htm

Desarrollo
La práctica consta de dos bases de datos: una primaria y una secundaria que servirá de respaldo en caso de
fallar la primaria, en ese ese caso la base de datos secundaria lleva un backup de todos los datos y se pueden
acceder a ellos pero en modo protegido o de lectura.

Requisitos:

 2 computadoras con características similares (una se utilizara como primaria y la otra como bases de
datos secundaria).
 Un cable UTP cruzado.
 Sistema operativo OpenSUSE en su versión 12.3 (32 bits).
 Oracle Enterprise 11g R2 (32 bits), es necesario utilizar la versión Enterprise ya que en las demás
versiones no cuenta con las herramientas necesarias para configurar un Data guard.
 La máquina primaria debe tener instalada una base de datos y la maquina secundaria
únicamente el software de Oracle (sin base de datos).

45
Lo primero que debe hacerse es que cada computadora tenga una dirección IP del mismo rango para tener
conectividad entre las dos computadoras, en este caso se utilizan las siguientes:

Maquina primaria: 192.168.15.100/24

Línea de comando: ifconfig eth0 192.168.15.100/24 up

Maquina secundaria: 192.168.15.101/24

Línea de comando: ifconfig eth0 192.168.15.101/24 up

Los nombres de host quedan de la siguiente manera:

Base de Datos Primaria: dga1

Base de Datos Stanby: dga2

Una vez comprobada la conectividad se procede a configurar las bases de datos.

BASE DE DATOS PRIMARIA

Configuración del Listener

En esta explicación estamos utilizando el puerto 7438 y el archivo listener.ora queda de la siguiente manera:

46
Verificar que la base de datos está en modo archivelog:

SQL>SELECT log_mode FROM v$database;

LOG_MODE

------------

NOARCHIVELOG

SQL>

Si en dado caso no se encuentra en dicho modo, se establece de la siguiente manera:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE ARCHIVELOG;

SQL>ALTER DATABASE OPEN

Activamos FORCE LOGGING con el siguiente comando:

SQL>ALTER DATABASE FORCE LOGGING;

Inicialización de parámetros:

Verificar que los parámetros DB_NAME y DB_UNIQUE_NAME sean iguales, en este caso DB11G en la
base de datos primaria.

DB_NAME especifica un identificador de base de datos de hasta 8 caracteres. Este parámetro debe ser
especificado y debe corresponder con el nombre especificado en la sentencia CREATE DATABASE.

DB_UNIQUE_NAME especifica un nombre único global para la base de datos. De cada base de datos
DB_UNIQUE_NAME debe ser único dentro de la empresa. El valor de DB_UNIQUE_NAME puede ser
de hasta 30 caracteres y distingue entre mayúsculas y minúsculas. Los siguientes caracteres son válidos en un
nombre de base de datos: caracteres alfanuméricos, guion bajo (_), signo de número (#) y el signo de dólar
($). [4]

47
El DB_NAME de la base de datos secundaria deberá ser el mismo (DB11G) de la primaria, pero deben
tener diferente valor de DB_UNIQUE_NAME. Los valores DB_UNIQUE_NAME de ambas bases serán
utilizadas en el DG_CONFIG configurando el parámetro LOG_ARCHIVE_CONFIG. Para esta
configuración la base secundaria será configurada con el valor “DB11G_STBY”.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G,DB11G_STBY)';

LOG_ARCHIVE_CONFIG: este parámetro habilita o deshabilita el envío de redo logs a destinos remotos
y el recipiente de estos. Este parámetro tiene varios atributos pero el que utilizaremos será el siguiente:

DG_CONFIG especifica hasta 30 nombres de bases de datos únicas (Definidas con el parámetro
DB_UNIQUE_NAME) para todas las bases de datos en tu configuración de Data Guard. [5]

Se establece los destinos de los archivos remotos. En este caso se utiliza flash recovery área para la
ubicación local.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC


VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

LOG_ARCHIVE_DEST_n controla diferente aspectos de como los servicios de transporte de los Redo
transfiere los datos de redo de la base de datos primaria a su destino de standby.

Este parámetro tiene varios atributos que son necesarios para configurar tu ambiente de Dataguard:

 ASYNC (Default): Los datos generados de redo por transacción no tienen que haber sido recibidos
en cada uno de los destinos habilitados antes de cometerse ésta.
 SYNC: Los datos generados de redo por transacción tienen que haber sido recibidos en cada uno
de los destinos habilitados antes de cometerse ésta.
 AFFIRM y NOAFFIRM: Controla si un destino de transporte de redo acusa de recibo los datos de
redo antes o después de escribir estos al standby redo log.
 DB_UNIQUE_NAME: Especifica un nombre único para la base de datos que va a recibir los
datos de redo. Tienes que especificar este nombre, no hay un valor por default.
 VALID_FOR .- Identifica cuando el servicio de transporte de redo puede transmitir datos de redo
a los destinos, esto se basa en los siguiente factores:

 redo_log_type: Si los archivos de Online Redo Log, Standby Redo log o ambos este siendo
archivados en la base de datos destinada.
 database_role: Si el rol de la base de datos es la Primaria o la base de datos en Stanby. [6]
48
Los parámetros LOG_ARCHIVE_FORMAT y LOG_ARCHIVE_MAX_PROCESSES deben
configurarse con los valores apropiados, así como el REMOTE_LOGIN_PASSWORDFILE debe
establecerse en modo exclusive.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;

SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;

SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE


SCOPE=SPFILE;

Adicionalmente a la configuración previa es recomendable estar seguro de que la base de datos primaria esta
lista para cambiar de rol y convertirse en una secundaria.

SQL>ALTER SYSTEM SET FAL_SERVER=DB11G_STBY;

SQL>ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB11G_STBY','DB11G'


SCOPE=SPFILE;

SQL>ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/flash_recovery


_area/DB11G_STBY','/u01/app/oracle/flash_recovery _area/DB11G' SCOPE=SPFILE;

SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

Recordar que se debe reiniciar para que algunos parámetros tengan efecto.

Configuración del servicio

Las siguientes configuraciones son necesarias tanto en la base primaria y secundaria en el siguiente archivo:
"$ORACLE_HOME/network/admin/tnsnames.ora", esto se puede configurar con la ayuda de la
herramienta Network Configuration (netca) o manualmente. A continuación se muestran las entradas para
este ejercicio:

49
Respaldo de la base de datos primaria

Para un backup de la base de datos basado en duplicado, o en restaurado manual debe hacerse lo siguiente:

$ rman target=/

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

Crear un Controlfile y PFILE para la base de datos secundaria:

Crear control file para la base de datos secundaria usando el siguiente comando:

SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl';

Crear el archivo de parámetros (PFILE) para la secundaria:

SQL>CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE;

Una vez creado el archivo de parámetros, se procede a configurar las siguientes entradas:

*.db_unique_name='DB11G_STBY'
*.fal_server='DB11G'
*.log_archive_dest_2='SERVICE=db11g ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G'

FAL_SERVER especifica el servidor FAL (Fetch Archive Log) para un base de datos en Standby. Este
valor es un nombre de servicio de Oracle Net.

Se deben crear los standby redo logs de la siguiente manera:

50
SQL>ALTER DATABASE ADD STANDBY LOGFILE
('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 52428800;

CONFIGURACIÓN MANUAL DE LA BASE SECUNDARIA

Verificar la configuración de listener.ora y tnsnames.ora, deberán contener la siguiente configuración:

Listener.ora

Tnsnames.ora

51
Crear los siguientes directorios que son necesarios:

$ mkdir -p /u01/app/oracle/oradata/DB11G
$ mkdir -p /u01/app/oracle/flash_recovery_area/DB11G
$ mkdir -p /u01/app/oracle/admin/DB11G/adump

Se copian los siguientes archivos de configuración de la base de datos primaria hacia la secundaria.

#Control File

$ scp oracle@dga1:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/DB11G/control01.ctl


$ cp /u01/app/oracle/oradata/DB11G/control01.ctl
/u01/app/oracle/flash_recovery_area/DB11G/control02.ctl

#Archivo de parametros

$ scp oracle@dga1:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

#Archivo de contraseña.

$ scp oracle@dga1: /u01/app/oracle/product/11.2.0/db_1/dbs/orapwDB11G


/u01/app/oracle/product/11.2.0/db_1/dbs

Es recomendable desactivar el firewall o añadir una regla de permitir escuchar por el puerto 22, ya que SCP
usa ese puerto para el copiado seguro (Secure CoPy).

Iniciar listener

Asegurarse de que el listener de la base de datos secundaria es iniciado.

52
$ lsnrctl start

Restaurar copia de seguridad

Crear el SPFILE a partir del PFILE

$ export ORACLE_SID=DB11G
$ sqlplus / as sysdba

SQL> CREATE SPFILE FROM PFILE='/tmp/initDB11G_stby.ora';

Restaurar los archivos de copia de seguridad.

$ export ORACLE_SID=DB11G
$ rman target=/

RMAN> STARTUP MOUNT;


RMAN> RESTORE DATABASE;

Verificar que el db_name y db_unique_name esten de la siguiente manera:

Crear los Redo Logs

Crear los online redo logs para la base secundaria

SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;

SQL>ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo01.log')


SIZE 52428800;

53
SQL>ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo02.log')
SIZE 52428800;

SQL>ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo03.log')


SIZE 52428800;

SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

Después de crear los online redo logs, se deben crear los standby redo logs

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 52428800;

SQL>ALTER DATABASE ADD STANDBY LOGFILE


('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 52428800;

Una vez completado esto, podemos empezar el proceso de aplicación.

Inicie el proceso de aplicación en el servidor secundario

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM


SESSION;

Si se necesita cancelar el proceso de aplicación, se debe ejecutar el siguiente comando:

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Si se prefiere, se puede establecer un retardo entre la llegada de los redo log archivados y el aplicado en el
servidor de reserva con los siguientes comandos.

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 30


DISCONNECT FROM SESSION;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY


DISCONNECT FROM SESSION;

Prueba de registros de transporte [7]

En el servidor principal, consultar las últimas novedades de redo log archivados y forzar un cambio de
registro.

54
SQL>ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SQL>SELECT sequence#, first_time, next_time FROM v$archived_log ORDER BY sequence#;

SQL>ALTER SYSTEM SWITCH LOGFILE;

Compruebe el nuevo redo log archivados ha llegado al servidor en espera y se han aplicado.

SQL>ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SQL>SELECT sequence#, first_time, next_time, applied FROM v$archived_log ORDER BY


sequence#;

Modo de protección

Cada vez que configuramos un Data Guard (StandBy mas envío de archives automáticos) siempre vamos a
quedar enmarcados en unos de estos tipos de disponibilidad de la StandBy :

MAXIMA PROTECCION (MAXIMUM PROTECTION)


MAXIMA DISPONIBILIDAD (MAXIMUM AVAILABILITY)
MAXIMA PERFORMANCE (MAXIMUM PERFORMANCE)

Con los 3 modos siempre estamos protegiendo los datos, pero la gran diferencia está en cómo actúa la base
de datos primaria cuando la StandBy tiene problemas.

MAXIMA PROTECCION (MAXIMUM PROTECTION)

Este modo garantiza que no hay perdida de datos si la base de datos primaria falla

Con este nivel de protección cada redo data -vector de redo generado en la primaria- debe ser aplicado por
lo menos en una StandBy , en los on line redo logs y además en los redo de stanby de esa Standby sólo allí
se produce el commit.
Si por ABC motivo el redo data no es escrito en una StandBy , la base de datos primaria se viene abajo
(shutdown), si existen 2 StandBy en máxima protección , basta que los redo data sean escritos en 1 de ellas,
para que la base de datos productiva siga arriba.

MAXIMA DISPONIBILIDAD (MAXIMUM AVAILABILITY)

Este modo de protección no afecta la base de datos y proporciona un alto nivel de protección de los datos,
tal cual en el modo de máxima protección, las transacciones no se comitean hasta que el redo data sea
aplicado en los redologs de la base de datos standby , por lo menos en una de ellas (si existe más de una)
Si no se puede escribir el redo data, en por lo menos una StandBy , la base de datos primaria no se cae.

55
MAXIMA PERFORMANCE (MAXIMUM PERFORMANCE)

Este modo de protección ofrece la mayor seguridad en la base de datos sin perder nada en la performance
de la base de datos primaria, acá las transacciones de la base de datos primaria se les generá commit sólo
cuando la transacción llega a los redo locales.
Este modo se debiese usar cuando la red hacía la StandBy no es lo suficientemente óptima y se producen
delays al momento de traspasar paquetes a través de TCP.
De forma predeterminada, con la creación de una base de datos en espera, la base de datos primaria está en
modo de rendimiento máximo.

SQL>SELECT protection_mode FROM v$database;

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE

SQL>

El modo se puede cambiar el uso de los siguientes comandos. Tenga en cuenta las alteraciones en los
atributos de transporte redo.

 Disponibilidad máxima.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC


VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';

SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

 Máximo rendimiento.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC


VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';

SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

 Máxima protección.

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC


VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

SQL>ALTER DATABASE OPEN;

56
Base de datos de conmutación (SWITHOVER) (primaria y secundaria)

Una base de datos puede estar en uno de dos modos mutuamente excluyentes (primaria o en espera). Estas
funciones se pueden modificar en tiempo de ejecución sin pérdida de datos o restablecimiento de registros
redo. Este proceso se conoce como conmutación (switchover) y puede llevarse a cabo mediante las
siguientes declaraciones

 Convertir base de datos primaria a secundaria.

SQL>CONNECT / AS SYSDBA

SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP NOMOUNT;

SQL>ALTER DATABASE MOUNT STANDBY DATABASE;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM


SESSION;

 Convertir la base de datos standby original a primaria.

SQL>CONNECT / AS SYSDBA

SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP;

Failover

Si la base de datos principal no está disponible la base de datos standby se puede activar como base de datos
primaria con las siguientes sentencias.

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

SQL>ALTER DATABASE ACTIVATE STANDBY DATABASE;

Dado que la base de datos standby es ahora la base de datos principal debe estar respaldada
inmediatamente.

57
La base de datos primaria original, ahora se puede configurar como un modo de espera. Si Flashback base
de datos se habilita en la base de datos primaria, a continuación, esto se puede hacer con relativa facilidad
(que se muestra aquí). De lo contrario, todo el proceso de instalación se deben seguir, pero esta vez
utilizando el servidor principal original como el modo de espera.

Base de datos standby de solo lectura (Read-Only Standby)

Una vez que se ha configurado una base de datos standby, se puede abrir en modo de sólo lectura para
permitir el acceso de consulta. Esto se utiliza a menudo para descargar información del servidor standby
para conseguir más recursos en el servidor principal. Cuando se abre en modo de sólo lectura, el envío de
archive log continúa, pero la recuperación gestionada se detiene, por lo que la base de datos standby se
convierte cada vez más obsoleta hasta que se reanude la recuperación gestionada (managed recovery).
Para cambiar la base de datos a solo lectura haga lo siguiente:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE OPEN READ ONLY;

Para reanudar la recuperación gestionada (managed recovery) haga lo siguiente:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM


SESSION;

En 11g, Oracle introdujo la característica Active Data Guard. Esto permite que la base de datos en espera
de ser abierto en modo de sólo lectura, pero aún se aplica la información de los redo. Esto significa que una
base de datos stanby puede estar disponible para la consulta, y aun así estar al día o actualizada. Hay
implicaciones de licencia para esta función, pero los siguientes comandos muestran cómo Active Data
Guard se puede activar:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE OPEN READ ONLY;

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM


SESSION;

58
Referencias:

 Oracle 2010, Oracle® Database SQL Language Reference 11g, obtenida el 1 de mayo de 2013, de
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6016.htm

 Oracle 2009, Documento técnico de Oracle: Oracle Data Guard 11g versión 2, obtenida el 1 de
mayo de 2013, de http://www.oracle.com/technetwork/es/database/enterprise-
edition/documentation/tutorial-oracle-data-guard-11gr2-1707492-esa.pdf

 Oracle 2012, Oracle® Data Guard Concepts and Administration 11g Release 2 (11.2), obtenida el 4
de mayo de 2013, de http://docs.oracle.com/cd/E11882_01/server.112/e17022/create_ps.htm

59
60
SQL SERVER CLUSTER
Ana Rosa Rosales Mancia
Silvia Yessenia Argueta Campos

OBJETIVOS

o Conocer el funcionamiento del clúster en SQL Server, la configuracion necesaria.


o Identificar las ventajas que ofrece la implementacion de un cluster de conmutacion por
error.
o Implementar un cluster en una red local.

INTRODUCCION

SQL Server Cluster ofrece alta disponibilidad, escalabilidad y alto rendimiento. Esta compuesto por nodos
activo pasivo lo más recomendable es configurar máximo tres nodos. La construcción de los ordenadores
del clúster es más fácil y económica debido a su flexibilidad: pueden tener toda la misma configuración de
hardware y sistema operativo (clúster homogéneo), diferente rendimiento pero con arquitecturas y sistemas
operativos similares (clúster semihomogéneo), o tener diferente hardware y sistema operativo (clúster
heterogéneo), lo que hace más fácil y económica su construcción.

CONCEPTOS BASICOSSQL SERVER

SQL Server es un conjunto de objetos eficientemente almacenados. Los objetos donde se almacena la
información se denominan tablas, y éstas a su vez están compuestas de filas y columnas. En el centro de
SQL Server está el motor de SQL Server, el cual procesa los comandos de la base de datos. Los procesos se
ejecutan dentro del sistema operativo y entienden únicamente de conexiones y de sentencias SQL. SQL
Server incluye herramientas para la administración de los recursos que el ordenador nos proporciona y los
gestiona para un mejor rendimiento de la base de datos. Una buena instalación y configuración de SQL
Server, y sobre todo una buena administración de las herramientas que éste nos proporciona, logrará: · Qué
las consultas que se realicen mediante sentencias SQL obtengan un tiempo de Respuesta óptima.· Qué la
memoria y la CPU de la máquina estén aprovechadas al máximo.

CLÚSTER

El término clúster se aplica a los conjuntos o conglomerados de computadoras construidos mediante la


utilización de hardware común y que se comportan como si fuesen una única computadora. Hoy en día
desempeñan un papel importante en la solución de problemas de las ciencias, las ingenierías y del comercio
moderno. Simplemente, un clúster es un grupo de múltiples ordenadores unidos mediante una red de alta
velocidad, de tal forma que el conjunto es visto como un único ordenador, más potente que los comunes de
escritorio. Los clústeres son usualmente empleados para mejorar el rendimiento y/o la disponibilidad por

61
encima de la que es provista por un solo computador típicamente siendo más económico que computadores
individuales de rapidez y disponibilidad comparables. La construcción de los ordenadores del clúster es más
fácil y económica debido a su flexibilidad: pueden tener toda la misma configuración de hardware y sistema
operativo (clúster homogéneo), diferente rendimiento pero con arquitecturas y sistemas operativos similares
(clúster semihomogéneo), o tener diferente hardware y sistema operativo (clúster heterogéneo), lo que hace
más fácil y económica su construcción. Para que un clúster funcione como tal, no basta solo con conectar
entre sí los ordenadores, sino que es necesario proveer un sistema de manejo del clúster, el cual se encargue
de interactuar con el usuario y los procesos que corren en él para optimizar el funcionamiento.

CLASIFICACIÓN DE LOS CLÚSTER

Alto rendimiento:

Son clústeres en los cuales se ejecutan tareas que requieren de gran capacidad computacional, grandes
cantidades de memoria, o ambos a la vez. El llevar a cabo estas tareas puede comprometer los recursos del
clúster por largos periodos de tiempo.

Alta disponibilidad:

Son clústeres cuyo objetivo de diseño es el de proveer disponibilidad y confiabilidad. Estos clústeres tratan
de brindar la máxima disponibilidad de los servicios que ofrecen. La confiabilidad se provee mediante
software que detecta fallos y permite recuperarse frente a los mismos, mientras que en hardware se evita
tener un único punto de fallos

.Alta eficiencia:

Son clústeres cuyo objetivo de diseño es el ejecutar la mayor cantidad de tareas en el menor tiempo posible.
Existe independencia de datos entre las tareas individuales. El retardo entre los nodos del clúster no es
considerado un gran problema.

VENTAJAS DE USAR CLÚSTER

De un clúster se espera que presente combinaciones de los siguientes servicios:Alto rendimientoAlta


disponibilidadBalanceo de cargaEscalabilidad

CONFIGURACION DE UN CLUSTER DE CONMUTACION POR ERROR

1-CONFIGURACION DEL SERVIDOR DNS

62
Para configurar el servidor DNS click-> Administrador de servidor ->Agregar roles

Seleccionar la caracteristica de Servidor de dominio de Active Directory luego siguiente

Hacer click en siguiente

63
Hacer click en el boton instalar

Esperar unos minutos mientras se instala

64
Click en el botón cerrar

65
Aquí ya se tiene la característica de servidor de dominio luego se crea el nuevo bosque al cual se van a unir
los nodos de la red del cluster. Para esto ejecutamos la aplicación dcpromo.exe

Aparecera un asistente para crear el nuevo bosque click-> Siguiente

Seleccionar un nuevo bosque click->siguiente

66
Escribir el nombre del bosque a crear click-> siguiente

Seleccionar la versión del Windows server en este caso Windows server 2008 r2 click ->siguiente

67
Escribir la contraseña de administrador del dominio

Para finalizar muestra resumen del dominio a crear luego de hacer estas configuraciones hay que reiniciar la
computadora.

68
En estos momentos ya se tiene el dominio ahora hay que crear un usuario con privilegios de administrador
de dominio para esto click -> inicio ->Herramientas del sistema->Usuarios y equipos de Active Directory -
>Users

Click derecho y seleccionar nuevo usuario luego ingresar el nombre de usuario como se muestra en la figura
y dar siguiente

69
Colocar la contraseña para el nuevo usuario dar siguiente y listo ya se tiene el nuevo usuario.

Todas las computadoras que se utilicen como nodos del cluster tienen que pertenecer al dominio creado y
agregar este usuario en el grupo de administradores.

70
2 -CONFIGURACION DEL SERVIDOR DE ALMACENAMIENTO ISCSI

El servidor de dns y almacenamiento están alojados en la misma computadora, para poder configurar el
servidor de almacenamiento iscsi hay que instalar el siguiente software iscsi Target 3.3 como se muestra a
continuación:

Click -> siguiente a todas las opciones dejar los valores por defecto.

Y esperamos que se instale.

71
Luego de instalar esta aplicación el siguiente paso es crear un destino iscsi para esto Click-> herramientas
del sistema ->iscsiTarget aparecerá una ventana como la siguiente damos click derecho sobre Destinos iscsi
y seleccionamos crear destino iscsi

Seleccionar un nuevo bosque click->siguiente

72
Escribir el nombre del bosque a crear click-> siguiente

Seleccionar la versión del Windows server en este caso Windows server 2008 r2 click ->siguiente

73
Escribir la contraseña de administrador del dominio

Para finalizar muestra resumen del dominio a crear luego de hacer estas configuraciones hay que reiniciar la
computadora.

74
En estos momentos ya se tiene el dominio ahora hay que crear un usuario con privilegios de administrador
de dominio para esto click -> inicio ->Herramientas del sistema->Usuarios y equipos de Active Directory -
>Users

Click derecho y seleccionar nuevo usuario luego ingresar el nombre de usuario como se muestra en la figura
y dar siguiente

75
Colocar la contraseña para el nuevo usuario dar siguiente y listo ya se tiene el nuevo usuario.

Todas las computadoras que se utilicen como nodos del cluster tienen que pertenecer al dominio creado y
agregar este usuario en el grupo de administradores.

76
2 -CONFIGURACION DEL SERVIDOR DE ALMACENAMIENTO ISCSI

El servidor de dns y almacenamiento están alojados en la misma computadora, para poder configurar el
servidor de almacenamiento iscsi hay que instalar el siguiente software iscsi Target 3.3 como se muestra a
continuación:

Click -> siguiente a todas las opciones dejar los valores por defecto.

Y esperamos que se instale.

77
Luego de instalar esta aplicación el siguiente paso es crear un destino iscsi para esto Click-> herramientas
del sistema ->iscsiTarget aparecerá una ventana como la siguiente damos click derecho sobre Destinos iscsi
y seleccionamos crear destino iscsi

78
El cual abre un asistente como la figura siguiente click ->siguiente

Escribimos el nombre del destino una breve descripción y damos siguiente

Luego de esto nos pide agregar los destinos el cual son las ip de los nodos que van a poder acceder a los
discos

virtuales click->avanzados

Nos aparecerá la siguiente ventana aquí agregamos las ip de los nodos y damos aceptar.

79
Y se finaliza el asistente.

Ahora ya tenemos el destino iscsi que tendrá los discos virtuales que utilizara el cluster para ello hay que
realizar l

os siguientes pasos:Hacer click derecho sobre el iniciador iscsi creado->seleccionar crear disco virtual, esta

acción:

80
Seleccionamos siguiente y colocamos el nombre del disco virtual con extencion y seleccionamos siguiente.

Luego colocamos el tamaño del disco en MB. Seleccionamos siguiente.

81
Se finalza el asistente estos mismos pasos hay que realizar todos los discos virtuales a utilizar en este caso
creamos tres.

esta imagen muestra el disco virtual creado.

82
Ahora que ya se tiene el almacenamiento procedemos a realizar la conexión de los nodos con el servidor de
almacenamiento.

Para esto nos vamos a la computador que va servir de nodo1 y damos click ->Inicio ->Iniciador iscsi y
aparecerá una ventana como esta:

Colocamos la ip del servidor de almacenamiento click-> conexión rápida y aparecerá conectado.

Luego click-> En la pestaña volúmenes y dispositivos ->Autoconfigurar aparecerán todos los discos
virtuales creados como se muestra a continuación.

83
Luego le damos aceptar y listo ya se tiene la conexión con el servidor estos mismos pasos hay que realizar
en el otro nodo.

Ahora hay que poner en línea estos discos esto se realiza siempre en el nodo 1.

Click ->Inicio ->Administrador de servidor ->Almacenamiento ->Administración de dispositivos.

Aquí se muestran los discos virtuales hay que dar click derecho sobre cada uno de ellos y ponerlos en línea,
luego dar formato y listo.

84
Ya se tiene el almacenamiento para el cluster.

3-CONFIGURACION DE CLUSTER DE WINDOWS.

Para poder realizar una configuración de cluster de conmutación por error es necesario instalar esa
característica en todos los nodos. Para ello hay que seguir los siguientes pasos:

Click -> Administrador de servidor -> Caracteristicas ->Agregar características

Seleccionar cluster de conmutación por error.

85
Y click en instalar

Ya que tenemos instalada la característica damos click -> Inicio ->Administrador de cluster de conmutación
por error damos click -> crear cluster.

86
Nos pedirá ingresar los nombres de los nodos

Damos click -> siguiente

87
Realiza la confirmación de los datos click ->siguiente

88
Realiza todos las validaciones si da algún error no se puede continuar, esto tarda varios minutos en
completarse.

Si todo está bien muestra el resumen le damos finalizar

Luego de haber realizador las validaciones se pasa al siguiente cuadro de dialogo:

Aquí colocamos el nombre del cluster y la dirección ip.


89
Finalizamos la creación del cluster

90
Ahora bien ya tenemos el cluster creado falta crear un servicio para este cluster para esto damos click
derecho al cluster creado-> Servicios y aplicaciones ->Coordinador de transacciones distribuidas DTC -
>siguiente

Agregamos el nombre en este caso se deja el que da por defecto, agregamos la dirección ip, damos siguiente
y finalizamos.

91
Ya tenemos toda la configuración del cluster de conmutación por error a nivel del sistema operativo solo
falta configurar el SQL server.

4-CONFIGURACION DE CLUSTER DE CONMUTACIÓN POR ERROR EN SQL SERVER.

Ejecute setup.exe desde el disco de instalación de SQL Server para iniciar el Centro de instalación. Haga
click ->Instalacion->Nuevo sql server de conmutación por error

92
En el cuadro de diálogo Configuración de las Reglas de Apoyo, validar que los controles devolver resultados
exitosos y haga click en Siguiente.

En el cuadro de diálogo Condiciones de Licencia, haga click en Acepto los términos de la licencia casilla de
verificación y haga clic en Siguiente.

93
En el cuadro de diálogo Configuración de Apoyo a las Reglas, haga clic en Instalar. Validar que los controles
devolver resultados exitosos. Si los cheques devueltos algunas advertencias, asegúrese de corregirlos antes
de proceder con la instalación. Haga clic en Siguiente para continuar.

94
En el cuadro de diálogo Selección de características, seleccione sólo los componentes que desea instalar.
Haga clic en Siguiente.

En el cuadro de diálogo Configuración de instancia, escriba el nombre de red de SQL Server. Este es el
nombre que estará disponible en la red para los clientes. Esto variará dependiendo de su selección si se trata
de una instancia predeterminada o con nombre. En este ejemplo, la instancia por defecto se selecciona

95
Un par de cosas Hay que destacar en esta sección. De forma predeterminada, el nombre de instancia se
utiliza como identificador de la instancia. Esto se utiliza para identificar los directorios de instalación y las
claves del registro para la instancia de SQL Server y es útil cuando se desea ejecutar varias instancias en un
clúster. Este es el caso para las instancias predeterminadas y las instancias con nombre. Para una instancia
predeterminada, el nombre y el identificador serían MSSQLSERVER. Para utilizar un identificador de
instancia no predeterminado, se debe seleccionar la casilla de identificador de instancia y especifique un
valor.

96
En el cuadro de diálogo Requisitos de espacio en disco haga clic en Siguiente.

En el cuadro de diálogo Grupo de recursos de clúster, consulte los recursos disponibles en Windows Server
2008 de clúster. Esto le dirá que un grupo de recursos se creará en el clúster de SQL Server. Para especificar
el clúster de SQL Server recurso de nombre de grupo, puede utilizar el cuadro desplegable para especificar
un grupo existente o escriba el nombre de un nuevo grupo para crearlo. Haga clic en Siguiente.

97
En el cuadro de diálogo de selección de disco de clúster, seleccione los grupos de discos que están
disponibles en el clúster de SQL Server 2008 para su uso. Haga click en Siguiente.

98
En el cuadro de diálogo Configuración de red de clúster, escriba la dirección IP y la máscara de subred que
el clúster de SQL Server 2008 va a utilizar. Desmarque la casilla bajo la columna de DHCP que va a utilizar
direcciones IP estáticas. Si no ha deshabilitado los adaptadores y protocolos IPv6, que sería mejor para
desactivar la fila para IPv6

En el cuadro de diálogo Directiva de seguridad del clúster, acepte el valor por defecto de uso de los
servicios SID (recomendado).

99
En el cuadro de diálogo Configuración del servidor, escriba las credenciales que se utilizarán para sus
cuentas de servicio de SQL Server en la ficha Cuentas de servicio. En la ficha Clasificación, seleccione la
intercalación apropiada para ser utilizada por SQL Server. Tenga en cuenta que el tipo de inicio está
establecido en manual para todos los clústeres de servicios y no se puede cambiar durante el proceso de
instalación. Haga clic en Siguiente.

En el cuadro de diálogo Configuración de Database Engine, seleccionar el modo de autenticación


apropiado. Si desea agregar el usuario actualmente conectado a formar parte del grupo de administradores
de SQL Server, haga clic en el botón Agregar usuario actual.

100
En la ficha de datos de directorios, escriba la ruta donde se va a su sistema y archivos de usuario de base de
datos creada. Esto será por defecto y damos click siguiente.

En el error y la caja de diálogo de informes de uso, haga clic en Siguiente.

101
En el cuadro de diálogo Reglas de instalación del clúster, compruebe que todas las comprobaciones son
correctas y haga clic en Siguiente.

102
En la página Preparado para instalar el cuadro de diálogo, compruebe que todas las configuraciones son
correctas. Haga clic en Siguiente.

103
En el cuadro de diálogo completo, haga clic en Cerrar. Con esto concluye la instalación de un clúster de
conmutación por error de SQL Server 2008

En la realización de una correcta instalación y configuración del nodo, ahora tiene una instancia de
conmutación por error del clúster completamente funcional.

Ahora falta agregar un nuevo nodo los pasos son muy parecidos ya que so le especificamos el cluster de
conmutación por error al queremos pertenecer y la instancia.

104
Para poder desarrollar un cluster de conmutación por error se pueden seguir estos pasos eso si hay que
tener cuidado en la infraestructura de red a utilizar y compatibilidad de los programas.

PUEDES VISITAR NUESTRO VIDEO PARA MAYOR INFORMACION AQUI:


http://youtu.be/Ljwz9GvV8_o

BIBLIOGRAFIA:

o Microsoft documentacion, visitado dia 10 de abril de 2013 http://technet.microsoft.com/es-


es/library/cc730692.aspx.
o Microsoft, visitado 16 de abril de 2013 http://msdn.microsoft.com/es-
es/library/ms189134%28v=sql.90%29.aspx
o SlideShared, visitado 16 abril de 2013 http://www.slideshare.net/javacero/presentacin-de-
cluster-de-w2008-r2-cluster-de-conmutacin-por-error-por-francisco-javier-acero-
lucena.aspx
o Scribd, visitado 16 de abril de 2013 http://es.scribd.com/doc/84699812/Agregar-
almacenamiento-a-un-cluster-de-conmutacion-por-error.html
o Youtube.com, visitado 20 de abril de 2013
http://www.youtube.com/watch?v=Q5x0D79afRM

105
Clúster en MySQL
Luis Josué Chávez Vigil, Josué Daniel Orellana Aguirre, Erick Stanley Cruz Martínez

Objetivos:

 Conocer el funcionamiento del clúster en MySQL, así como de la manera de configurarlo en una
red local, además de distinguir los elementos que lo conforman.
 Identificar las características, requerimientos hardware/software, ventajas y desventajas de un
clúster MySQL.
 Definir lo que es un clúster, así como los diferentes tipos de nodos que el clúster MySQL maneja, y
además, aprender la manera correcta de configuración.

Introducción:

MySQL Cluster es la versión de MySQL pensada para alta disponibilidad, escalabilidad y alto rendimiento.
Un MySQL server que es parte de un MySQL Clúster difiere sólo en un aspecto de un servidor MySQL
normal (no clúster), en que emplea el motor NDB Clúster.

Este motor también se conoce simplemente como NDB, y las dos formas del nombre son sinónimas.
Desde que MySQL server es parte del clúster, necesita datos de configuración que sepa cómo acceder al
nodo MGM para obtener datos de configuración del clúster.

El comportamiento por defecto es buscar el nodo MGM en localhost. Sin embargo, puede necesitar
especificar su localización donde se encuentre, esto puede hacerse en my.cnf o en la línea de comandos del
servidor MySQL.

Antes de poderse usar el NDB, al menos un nodo MGM debe ser operacional, así como los nodos de datos
deseados.

Conceptos Básicos:

Clúster: Grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el
conjunto es visto como un único ordenador, más potente que los comunes de escritorio.

106
De un clúster se espera lo siguiente:

 Alto rendimiento
 Alta disponibilidad
 Equilibrio de carga
 Escalabilidad

Una de las ventajas de MySQL Clúster es que puede ejecutarse en hardware normal sin ningún
requerimiento especial, aparte de grandes cantidades de RAM, debido al hecho que todos los datos se
almacenan en memoria.

Características:

Para comunicación entre nodos, el clúster soporta red TCP/IP en cualquier topología estándar, y como
mínimo se espera una red 100 Mbps Ethernet, más un switch, hub, o router para proporcionar conectividad
de red al clúster entero. Recomendamos que MySQL Clúster se ejecute en su subred que no está compartida
con máquinas no-clúster por las siguientes razones:

 Seguridad: La comunicación entre nodos del clúster no está cifrada. La única forma de proteger
transmisiones dentro de un MySQL Clúster es ejecutar su clúster en una red protegida.
 Eficiencia: Inicializar un MySQL Clúster en una red privada o protegida permite que el clúster
haga uso exclusivo del ancho de banda entre máquinas del clúster.

ndbd_mgm.

Es el nodo de Management. Tiene la configuración del clúster. No es necesario más de uno, pero consume
tan poco que se pueden tener dos. Nosotros lo usamos para lanzar backups, reiniciar nodos, activar el log…
además, los nodos ndbd lo usan al entrar en el clúster para recoger la configuración

ndbd:

Son los nodos de almacenamiento. Estos deben tener la capacidad de procesamiento y la memoria RAM
suficiente para trabajar con los datos. Al menos debemos tener dos nodos ndbd. Si queremos usar múltiples
cores, el demonio será ndbmtd mysqld. Al clúster se puede acceder usando la API o mediante un servicio.

mysqld:

Al menos debemos tener dos nodos mysqld o tendremos un SPOF

Desventajas:

 La configuración y puesta en marcha difiere completamente de la versión estándar de la base de


datos.

107
 Requiere gran cantidad de memoria RAM.
 Índices en RAM siempre.
 Datos en RAM o en disco duro.
 El engine es ndbclúster, no se puede usar InnoDB o MyISAM en clúster.
 No es una base de datos de propósito general.
 Subqueries lentas
 Joins lentas
 No soporta integridad referencial y claves externas
 No hay rollbacks parciales ni savepoints, solo rollbacks completos
 No se garantiza el commit

Recomendaciones:
La web de MySQL recomienda 5 servidores:

 2 ndbd
 2 mysqld
 1 ndb_mgmd

Podemos mejorar esta arquitectura y hacerla más barata montando un ndb_mgmd en cada mysqld

 2 ndbd
 2 mysqld + ndb_mgmd

108
Topología:

Hardware:

 3 COMPUTADORAS CON WINDOWS 7


 MYSQL CLÚSTER EN C/U DE PC
 SWITCH
 CABLES DE RED

Archivos de Configuración:

ndb_mgm

config.ini

Acá estan las configuraciones para el manejo de nodos. Dentro se encuentra los datadir y los database.

· En el database se encuentran los binarios y archivos de configuracion para la ejecución correcta de


config. · En el datadir se hace referencia a los logs que arroja el clúster.

109
ndbd

Se arranca desde los binarios alojados en el directorio /mysqlc/bin/ndbd -c 192.168.4.1:1186

mysqld

Se configura el my.cnf el cual es el encargado de enlazar el nodo de MySQL al nodo de administrador,


soportando el engine ndbclúster.

Procedimiento:

Descargamos el cluster mysql de la siguiente dirección: http://dev.mysql.com/downloads/cluster/

Definimos nuestro sistema operativo y descargamos:

Nos pedirá que ingresemos nuestra cuenta de Oracle. Si no posee una deberá crearla. Una vez descargado,
descomprimimos el archivo y genera una carpeta con los siguientes directorios:

110
Arrancar Cluster

c:/mysql/bin/ndb_mgmd -f conf/config.ini --initial --configdir=c:\my_cluster\conf\

Mostrar los nodos conectados al administrador

c:\mysql\bin\ndb_mgm -e show

Arrancar todo

start /B c:\Users\"Chavez Vigil"\mysql\bin\ndbd -c localhost:1186

Arrancando mysql

start /B c:\Users\"Chavez Vigil"\mysql\bin\mysqld --defaults-file=conf\my.ini

c:\Users\"Chavez Vigil"\mysql\bin\mysql -h 127.0.0.1 -P5000 -u root

Apagando servicios

c:\Users\"Chavez Vigil"\mysql\bin\mysqladmin -u root -h 127.0.0.1 -P5000 shutdown

c:\Users\"Chavez Vigil"\mysql\bin\ndb_mgm -e shutdown

C:\Users\Chavez Vigil\my_cluster\ndb_data

Pasos a seguir:

Cree las siguientes carpetas en el directorio raíz del sistema. Para ello abrimos cmd y presionamos
Ctrl+Shift+Enter para abrirlo en modo administrador:

111
Creamos una nueva carpeta llamada mysql:

Cuando descargamos el cluster desde el enlace mostrado anteriormente y lo descomprimimos, el contenido


de la carpeta que se crea cuando se descomprime lo copiamos completamente en la carpeta mysql que
acabamos de crear:

112
Abrimos una nueva consola en modo de administrador y copiamos el contenido de esta carpeta mysql en
mycluster:

Ahora bien, dentro de mycluster creamos un archivo config.ini Entramos en la carpeta conf. Lo que
continua será editar el archivo config.ini para los nodos de datos:

[ndb_mgmd]
HostName=192.168.4.1
DataDir=c:\my_cluster\ndb_data
Nodeid=1

Esto significa que el nodo de administrador tendra esa ip y que los log's que generen se estaran
almacenando el esa direccion de archivo.

113
[Ndbd default]
NoOfReplicas=2

Esto significa que seran 2 nodos de datos por defecto; si queremos agregar mas solo incrementamos ese
numero.

[Ndbd]
HostName=192.168.4.2
DataDir=c:\my_cluster\ndb_data
Nodeid=3

Esto significa que es el primer nodo de datos y esta alojado en esa ip y los logs iran a parar a esa direccion.

Nodeid=4
HostName=192.168.4.3
DataDir=c:\my_cluster\ndb_data

Esto significa que es el segundo nodo de datos y esta alojado en esa ip y los logs iran a parar a esa direccion.

[Mysqld]
[Mysqld]

Y estas 2 lineas significan que por cada nodo de datos tendremos 1 nodo mysql

Ahora crearemos las variables de entorno del sistema. Desde el menú inico escribimos variables de entorno
y escogemos la que dice SISTEMA:

114
En la ventana que aparece damos clic en el icono Variables de Entorno. Ahí buscamos la variable path que
es la que vamos a editar. Al final de la variable escribimos:

C:\mysql\bin:C;\my_cluster\ndb_data

Esto es para que ejecute los binarios necesarios para el funcionamiento del cluster. Reiniciamos la
computadora.

Después del reinicio abrimos como administrador la consola y arrancamos el cluster:

Abrimos una nueva consola y ejecutamos netstat –h para verificar si esta corriendo el cluster:

115
En este momento ya está escuchando peticiones de los nodos de datos. En la misma terminal ejecutamos:

Con el comando show mostramos los nodos de datos conectados:

Por el momento NO tenemos nodos de datos conectados. Avanzando un poco, esto deberíamos ver
cuando los nodos de datos estén conectados. Note que están conectados con las ip que le definimos en el
archivo de configuración:

116
Ahora pasamos a la configuración de los nodos de datos. Esto se hará en cada máquina que será nodo de
datos y mysql. Creamos la misma estructura de directorios que se hizo en el nodo de administrador.
Descomprimimos el archivo del cluster y hacemos lo siguiente:

Volvemos a copiar el contenido del archivo descomprimido, tal como en el administador. Una vez hecho
esto, entramos en la carpeta conf. Editamos (creamos mas bien dicho) un archivo llamado my.cnf que se
encuentra en el directorio conf. Cada uno de los nodos de datos lo poseerá:

117
En síntesis, lo que este archivo significa es que el nodo mysql ocupará el motor ndbcluster para conectarse
al nodo de administrador a través del puerto 4002, la cadena de conexión muestra la ip del administrador y
el mysql_cluster se encontrará también en la misma máquina administrador.

Posteriormente abrimos la cmd de Windows y OJO, una vez arrancados los servicios, estas ventanas NO
deben cerrarse, de lo contrario se interrumpirá la comunicación.

Arrancamos el nodo de datos:

Vemos si el servicio esta corriendo:

Iniciamos el nodo mysql:

Nos conectamos a una instancia mysql (hacemos constar que NO esta mysql instalado en ninguna PC):

118
A manera de ejemplo, veamos los motores. Veremos que ndbcluster está corriendo usando el comando
show engines; (Este es el motor del cluster) y para ver las bases de datos usamos show databases;

En uno de los nodos de datos se ha creado una base de datos llamada prueba. Si ejecutamos nuevamente
show databases; debemos verla reflejada:

119
Ahora bien, vamos a crear una tabla en este nodo de datos. Para ello escribimos use prueba; que representa
que ocuparemos la base de datos prueba. Luego creamos la tabla en ella llamada alumno, y al final de la
consulta de create table alumno escribimos engine=ndb;para que esta sentencia se ejecute en todos los
nodos conectados:

Ahora insertamos un alumno nuevo y describimos la tabla:

120
Bibliografía

 MySQL®, obtenida el 26 de abril de 2013, de


http://downloads.mysql.com/tutorials/cluster/mysql_wp_cluster_quickstart_windows.pd
f
 Uv.mx, obtenida el 26 de abril de 2013, de
http://www.uv.mx/personal/lizhernandez/files/2013/04/Comandos-mysql.pdf
 Manuales Guebs.com®, obtenida el 27 de abril de 2013, de http://manuales.guebs.com/mysql-
5.0/ndbcluster.html#mysql-cluster-configuration
 Slideshare® Base de Datos MySQL, obtenida el 27 de abril de 2013, de
http://www.slideshare.net/miguelangelnieto/mysql-high-availavility-load-balacing-cluster
 Scribd® ¿Qué es un CLUSTER?, obtenida el 27 de abril de 2013, de
http://es.scribd.com/doc/6858172/QUE-ES-UN-CLUSTER

121
Sincronización de Bases de Datos en Nube
González Martínez Mauricio Antonio, Ramírez Reyes Heysel Yanira, Zometa Sanchez Henry Mauricio

Objetivos

 Conocer e implementar el uso de bases de datos en la nube como un mecanismo de sincronización.


 Conocer las ventajas y desventajas que tiene el uso de bases de datos en la nube.
 Utilizar los servicios de sincronización que provee Sql Azure.

Conceptos
¿Qué es la sincronización de Bases de Datos en Nube?

La sincronización de bases de datos en nube es el mecanismo de mantener la misma versión de datos en


múltiples dispositivos a través de un servidor alojado en internet.

La sincronización en la nube consiste en un grupo de servidores alojados en internet encargados de atender


las peticiones en cualquier momento. Se puede tener acceso a su información o servicio, mediante una
conexión a internet desde cualquier dispositivo móvil o fijo ubicado en cualquier lugar. Sirven a sus usuarios
desde varios proveedores de alojamiento repartidos frecuentemente por todo el mundo. Esta medida reduce
los costes, garantiza un mejor tiempo de actividad y que los sitios web sean invulnerables a los hackers, a los
gobiernos locales y a sus redadas policiales.

Ventajas:

 Integración con facilidad y rapidez.


 Prestación de servicios a nivel mundial.
 Actualizaciones automáticas.
 Reducción de equipos.
 Comodidad y Accesibilidad inmediata a los datos.

Desventajas:

 La disponibilidad de las aplicaciones está ligada a la disponibilidad de acceso a Internet.


 Los datos "sensibles" de la empresa no residen en sus instalaciones.
 La confiabilidad de los servicios depende de la "salud" tecnológica y financiera de los proveedores
de servicios en nube.

122
 Escalabilidad a largo plazo. A medida que más usuarios empiecen a compartir la infraestructura de
la nube, la sobrecarga en los servidores aumentará, si no se posee un esquema de crecimiento
óptimo puede llevar a degradaciones en el servicio.

¿Qué es Windows Azure?

Windows Azure (anteriormente Azure Services Platform) es una plataforma ofrecida como servicio y alojada
en los Data Centers de Microsoft.

Una ventaja añadida es que los desarrolladores y el personal de IT no necesita instalar, actualizar y gestionar
la infraestructura de bases de datos. La alta disponibilidad, aspecto siempre complejo, es gestionado de
manera transparente.

La gran ventaja de utilizar SQL Azure frente a otros sistemas de almacenamiento en la nube es que todos
los conocimientos sobre bases de datos relacionales y el lenguaje de consulta SQL siguen siendo válidos. No
es necesario adaptar los conocimientos a nuevos paradigmas de almacenamiento, como pasa con otros
sistemas de almacenamiento en la nube no basados en bases de datos relacionales ni SQL. “Si sabes utilizar
SQL Server, todos tus conocimientos te valen para SQL Azure”.

Es cierto que hay ciertas características de SQL Server que SQL Azure no soporta, pero si soporta todas las
más usadas:

 Tablas, tablas temporales, vistas, índices, roles, procedimientos almacenados y funciones.


 Consultas complejas y „joins‟ entre múltiples tablas.
 Insert, update y delete.
 Restricciones
 Transacciones

Entre las caracteristicas no soportadas cabe destacar:

 Transacciones distribuidas
 El broker de mensajes de SQL Server
 Consultas a servidores remotos
 Acceso desde tecnologías antiguas, ya obsoletas, en concreto OleDb, etc.

123
Sincronización con Windows Azure

Con la aparición de SQL Azure, se abre todo un mundo de posibilidades para el uso de bases de datos en la
nube; no solo para albergar aplicaciones sin necesidad de infraestructura y en régimen de pago por uso, sino
también para mantener versiones de bases de datos SQL Server sincronizadas en la nube, a modo de
herramienta de continuidad de negocio, que permita mantener los datos sincronizados y en una ubicación
física diferente a la empresarial. Asimismo, aquellas aplicaciones que cuenten con usuarios móviles, o que
necesiten proporcionar parte de la información a proveedores o clientes a través de Internet, son buenas
candidatas para sincronizar con los servidores de SQL Server on-premise.

Las bases para la sincronización: SQL Azure Data Sync

Microsoft Data Sync es el marco de trabajo que nos proporciona la infraestructura necesaria para realizar
este tipo de sincronizaciones, permitiéndonos centrarnos solo en la parte más relacionada con el negocio y
abstrayendo la parte más "de detalle" del proceso.

Es un servicio de sincronización de datos en la nube basada en las tecnologías de Microsoft Sync


Framework. SQL Azure Data Sync permite crear y programar sincronizaciones periódicas entre SQL Azure
y SQL Server (local) u otras bases de datos de SQL Azure. Proporciona sincronización bidireccional de
datos y las capacidades de gestión de datos permite que los datos que se pueden compartir fácilmente a
través de bases de datos SQL Azure en múltiples centros de datos.

Requisitos para el uso de SQL Azure Data Sync

Los requisitos previos para el uso de SQL Azure Data Sync son:

• Tener una cuenta de Windows Live ID. Si no se tiene, una cuenta de Windows Live

• ID ir a la página de Windows Live y registrarse.

• Tener una cuenta de Windows Azure activa. Si no tiene una cuenta de Windows Azure ir a la página de
inicio de Windows Azure y regístrate o aplicar a la evaluación gratuita de 90 días.

• Tener una suscripción activa de base de datos de Windows Azure SQL Database.

Las bases de datos On-premises deben ser SQL Server 2005 Service Pack 3 o posterior.

Desarrollo
El escenario planteado consiste la replicación de una base de datos local de SQL Server, con otra
almacenada en la nube, para fines demostrativos solamente replicamos una tabla muy sencilla, cuya

124
estructura deberá ser la misma en la base de datos Azure. Esto puede ser escalado y dependerá de que tablas
o campos queramos mantener sincronizados.

Instalar el Client Agent

Instale el software requerido

• .NET Framework 4.0

• Microsoft SQL Server 2008 R2 SP1 System CLR Types (x86)

• Microsoft SQL Server 2008 R2 SP1 Shared Management Objects (x86)

Para lograr la sincronización de Bases de Datos de SQL Server con la de SQL Azure se debe instalar el
Agent Client., el cual es el encargado de gestionar todo lo relacionado a la sincronización de la base de datos
local.

Una vez instalado el software requerido procedemos a la Instalación de Microsoft SQL Data Sync Agent
Preview como se muestra en las siguientes imágenes:

125
Introducir un nombre de usuario y una contraseña

Elegir el directorio donde se va a instalar. A continuación solo dar click en siguiente hasta finalizar.

126
Procedimiento para la Sincronización en Windows Azure con Data Sync

Entrar a la Base de Datos usando la autenticación de Windows

En este documento se hará referencia a una Base de Datos llamada “uesocc”, con una tabla llamada
“dbo_alumnos” la cual ya contiene algunos datos agregados.

127
Dirigirse al sitio web de Windows Azure cuya dirección es www.windowsazure.com/es-es/ dentro del sitio
de Azure dar clic en la opción de Portal

Iniciar sesión con nuestra cuenta de correo electrónico y la contraseña.

Aparecerá el portal de Windows Azure con todos sus servicios.

128
En el panel izquierdo damos clic en Bases de Datos SQL para crear una nueva base de datos

129
Ahora creamos un Servidor dando clic en la opción SERVIDORES

Dar clic en la opción Crear un servidor de Bases de Datos SQL

Ingresamos el nombre del servidor, la contraseña de acceso al mismo y la región que este mas cerca a
nuestra zona. La contraseña debe contener letras mayúsculas, minúsculas y números. Después de llenar los
campos damos clic en el cheque o Aplicar.

130
Una vez creado el servidor aparece en el panel inicial, ahora vamos a crear la base de datos dando clic en
BASE DE DATOS

Dar clic en Crear una Base de Datos SQL

131
Se coloca el nombre de la Base de Datos, se define que es una edición web, se asigna el tamaño de
capacidad de almacenamiento, se define el tipo de lenguaje que se utilizara y por último se le indica que
pertenecerá al servidor que recién acabamos de crear. Luego dar clic en Aplicar

Para administrar la Base de datos damos clic en Administrar

132
Espera un momento mientras se carga el portal de administración. Iniciar sesión con el nombre de la Base
de Datos, el nombre de Usuario y Contraseña del servidor, luego dar clic en Iniciar Sesión

Una vez cargado el modulo de administración dar clic en Diseñar

133
Hay dos formas de crear una tabla:

PRIMERA - Mediante una nueva consulta sql.

1.- Dar clic en la opción Nueva que se encuentra en parte superior.


2.- En el apartado se introduce el código para crear una tabla la cual tiene que ser exactamente igual a la
creada en la Base de Datos del Servidor local.
3.- Dar clic en Ejecutar y aparecerá un mensaje que nos indica que la tabla se ha creado con éxito.
4.- Volvemos al panel de Diseñar y damos clic en Actualizar
5.- Aparecerá la tabla con todos sus campos creados.

134
SEGUNDA - Con el diseñador.

1.- Dar clic en Nueva Tabla

2.- Comenzar a llenar los campos con la estructura que tendrá la tabla con nombre de la tabla, nombre de
las columnas, tipo de datos y longitud.

3.- Clic en Guardar y aparecerá la nueva tabla creada

135
Lo que sigue es crear el Agente de Sincronización. Dirigirse a la parte inferior del panel y dar clic en la
opción Agente de Sincronización, luego elegir Nuevo Agente de Sincronización.

Agregar un nombre al Nuevo Agente de Sincronización y una Contraseña, luego dar clic en Aplicar

136
Lo que sigue es crear una clave de identificación con la cual se podrá tener acceso a la Base de Datos que se
encuentra en Azure.

Dar clic en el botón Generar y luego en la opción Copiar. Posteriormente clic en Aplicar.

En el equipo local ejecutar Microsoft SQL Data Sync Agent Preview y dar clic en Submit Agent Key y
pegar la contraseña generada con el Agente de Sincronizacion

137
Para comprobar la conexión se hace un ping de servicio haciendo clic en Ping Sync Service, si todo esta bien
aparecerá un mensaje indicando el resultado positivo de conexión.

A continuación se hace el registro del servidor y de la Base de Datos que vamos a sincronizar dando clic en
Register. Seleccionar la autenticación de Windows, ingresar el nombre del servidor y el nombre de la Base
de Datos, luego dar clic en Test Conection para verificar que todo este bien de ser asi aparecerá un mensaje
corroborándolo

138
Lo siguiente es crear un grupo de Sincronizacion, dicho grupo contendrá las bases de datos que participaran
en la sincronización. En el panel principal de Windows Azure dar clic en Agente de Sincronización luego
elegir la opción Nuevo Grupo de Sincronización

139
Agregar un nombre al nuevo Grupo de Sincronización y seleccionar la región, luego clic en la flecha
siguiente

Seleccionar la ubicación de la Base de Datos Central, introducir el nombre de usuario y contraseña de la


misma. Dar clic en la flecha siguiente.

Seleccionar la Base de Datos que se encuentra en el servidor local, los otros campos quedan vacios. Dar clic
en el botón Siguiente.

140
Lo que sigue es crear las reglas de sincronización. Seleccionar el grupo creado y luego dar clic en REGLAS
DE SINCRONIZACION

En el panel que aparece dar clic en DEFINIR REGLAS DE SINCRONIZACION, aparecerá un asistente
para crear la regla. Seleccionar el nombre del Servidor, los campos y la tabla que se quiere sincronizar para
finalizar dar clic en Guardar.

141
Una vez creada la regla, ir a la opción CONFIGURAR ahí se hará lo siguiente:

1.- Activar el grupo de Sincronización.


2.- Definir cada cuanto se estarán actualizando los datos.
3.- Guardar la configuración

Con esto ya tenemos listo todo el escenario, ahora queda por parte del usuario hacer las pruebas respectivas
para comprobar la funcionalidad con esta herramienta. Para una ayuda audiovisual puede ver el video donde
se encuentran los mismos pasos con mayor detalle, pueden verlo en la siguiente dirección:
http://www.youtube.com/watch?v=r-hPtf_iLjU

142
Referencias
http://www.estoyenlanube.com/microsoft-sync-framework-y-sql-azure/

http://msdn.microsoft.com/en-us/library/hh456371.aspx

http://msdn.microsoft.com/en-us/library/jj823137.aspx

www.windowsazure.com/en-us/manage/services/sql-databases/getting-started-w-sql-data-sync/

http://jonathanvanderoost.com/2013/02/01/how-to-use-windows-azure-sql-data-sync-newportal/

geeks.ms/blogs/johnbulla/archive/2012/10/12/sql-azure-data-sync-sincronizaci-243-n-de-datos-entre-
bases-de-datos-sql-server-on-premise-y-base-de-datos-de-windows-azure-sql-database.aspx

143
Replicación con SQL Server
Autores:

 Cisneros Cente, Rolando Alexis


 Ibarra Bonilla, Luis Armando
 Orellana Hugo, Rosembel

Introducción a la replicación con SQL Server

La replicación es un conjunto de tecnologías destinadas a la copia y distribución de datos y objetos de


base de datos desde una base de datos a otra, para luego sincronizar ambas bases de datos y mantener su
coherencia. La replicación permite distribuir datos entre diferentes ubicaciones y entre usuarios remotos
o móviles mediante redes locales y de área extensa, conexiones de acceso telefónico, conexiones
inalámbricas e Internet.

La réplica tiene una analogía al sector editorial para representar los componentes de una topología de
réplica, que incluyen el publicador, el distribuidor, los suscriptores, las publicaciones, los artículos y las
suscripciones. Resulta útil pensar en la réplica de Microsoft SQL Server como si fuera una revista:

 El publicador (editor) de una revista produce una o más publicaciones.


 Una publicación contiene artículos.
 El publicador distribuye la revista directamente o a través de un distribuidor.
 Los suscriptores reciben las publicaciones a las que se han suscrito.

Es importante señalar que la réplica de SQL Server incluye funciones como: la posibilidad de que un
suscriptor realice actualizaciones y de que un publicador envíe cambios incrementales a los artículos de
una publicación.

Existen varios procesos de réplica (denominados agentes) que son responsables de copiar y mover los
datos entre el publicador y los suscriptores. En la siguiente figura se muestra información general acerca
de los componentes y procesos que participan en la réplica.

145
Los elementos que participan en la replicación Sql Server son los siguientes:

Publicador

Es una instancia de base de datos que permite que los datos estén disponibles para otras ubicaciones a
través de la réplica. El publicador puede tener una o más publicaciones, cada una de las cuales representa un
conjunto de objetos y datos relacionados lógicamente para replicar.

Distribuidor

Es una instancia de base de datos que funciona como almacén para datos específicos de réplica asociados
con uno o más publicadores. Cada publicador está asociado con una sola base de datos (conocida como la
base de datos de distribución) en el distribuidor. La base de datos de distribución almacena los datos de
estado de la réplica, metadatos acerca de la publicación y, en algunos casos, funciona como cola para los
datos que se transfieren del publicador a los suscriptores. En muchos casos, una sola instancia de servidor
de bases de datos funciona como publicador y como distribuidor Esto se conoce como un distribuidor
local. Cuando el publicador y el distribuidor se configuran en instancias distintas del servidor de bases de
datos, el distribuidor se denomina un distribuidor remoto.

Suscriptores

Es una instancia de base de datos que recibe datos replicados. Un suscriptor puede recibir datos de varios
publicadores y publicaciones. En función del tipo de réplica elegida, el suscriptor también puede devolver
los datos modificados al publicador o volver a publicar los datos en otros suscriptores.

Artículo

Un artículo identifica un objeto de base de datos incluido en una publicación. Una publicación puede
contener diferentes tipos de artículos, como tablas, vistas, procedimientos almacenados y otros objetos.
Cuando las tablas se publican como artículos, se pueden usar filtros para restringir las columnas y filas de
datos que se envían a los suscriptores.

Publicación

146
Es un conjunto de uno o más artículos de una base de datos. La agrupación de varios artículos en una
publicación permite especificar más fácilmente un conjunto de objetos y datos de bases de datos
relacionados lógicamente, que se replican como una unidad.

Suscripción

Es una solicitud de una copia de una publicación que se entrega a un suscriptor. La suscripción define qué
publicación se recibirá, dónde y cuándo. Hay dos tipos de suscripciones: de inserción y de extracción.

Agentes necesarios para configurar apropiadamente la replicación SQL Server

Agente SQL Server

El Agente SQL Server aloja y programa los agentes utilizados en la réplica, y proporciona una manera
sencilla de ejecutar los agentes de réplica. El Agente SQL Server también controla y supervisa las
operaciones fuera de la réplica.

De manera predeterminada, el servicio del Agente SQL Server está deshabilitado cuando se instala SQL
Server 2005, a menos que se elija explícitamente iniciar el servicio automáticamente durante la instalación.

Agente de instantáneas

Por lo general, el Agente de instantáneas se utiliza con todos los tipos de réplica. Prepara esquemas y
archivos de datos iniciales de tablas publicadas y otros objetos, almacena los archivos de instantáneas y
registra la información acerca del estado de sincronización en la base de datos de distribución. El Agente de
instantáneas se ejecuta en el distribuidor.

Agente de registro del LOG

147
El Agente de registro del LOG se utiliza en la réplica transaccional. Mueve las transacciones marcadas para
réplica desde el registro de transacciones del publicador a la base de datos de distribución. Cada base de
datos publicada con la réplica transaccional tiene su propio Agente de registro del LOG, que se ejecuta en el
distribuidor y se conecta al publicador (el distribuidor puede estar en el mismo equipo que el publicador).

Agente de distribución

El Agente de distribución se utiliza en la réplica de instantáneas y transaccional. Aplica la instantánea inicial


al suscriptor y mueve las transacciones contenidas en la base de datos de distribución a los suscriptores. El
Agente de distribución se ejecuta en el distribuidor, para las suscripciones de inserción, o en el suscriptor,
para las suscripciones de extracción.

Agente de mezcla

El Agente de mezcla se utiliza con la réplica de mezcla. Aplica la instantánea inicial al suscriptor, y transfiere
y reconcilia los cambios incrementales de datos que se producen. Cada suscripción de mezcla tiene su
propio Agente de mezcla, que se conecta con el publicador y con el suscriptor, y los actualiza. El Agente de
mezcla se ejecuta en el distribuidor, para las suscripciones de inserción, o en el suscriptor, para las
suscripciones de extracción. De forma predeterminada, el Agente de mezcla carga los cambios del suscriptor
al publicador y, a continuación, descarga los cambios del publicador al suscriptor..

Agente de lectura de cola

El Agente de lectura de cola se utiliza con la réplica transaccional y la opción de actualización en cola. El
agente se ejecuta en el distribuidor y transfiere los cambios realizados en el suscriptor de vuelta al
publicador. A diferencia del Agente de distribución y del Agente de mezcla, sólo existe una instancia del
Agente de lectura de cola para todos los publicadores y las publicaciones de una determinada base de datos.

Servicio SQL Server Browser


El programa SQL Server Browser se ejecuta como un servicio de Windows. SQL Server Browser
escucha las solicitudes entrantes de recursos de Microsoft SQL Server y proporciona información acerca
de las instancias de SQL Server instaladas en el equipo. SQL Server Browser permite efectuar las
siguientes acciones:

 Examinar una lista de los servidores disponibles


 Conectarse a la instancia correcta del servidor
 Conectarse a los extremos de la conexión de administrador dedicada (DAC)

148
Para cada instancia de Motor de base de datos y SSAS, el servicio SQL Server Browser (sqlbrowser)
proporciona el nombre de la instancia y el número de versión. SQL Server Browser se instala con SQL
Server y proporciona este servicio para las versiones anteriores de SQL Server que se ejecutan en el
equipo, empezando por SQL Server 7.0.

SQL Server Browser se puede configurar durante la instalación o utilizando el Administrador de


configuración de SQL Server. De manera predeterminada, el servicio SQL Server Browser se inicia
automáticamente:

 Cuando se actualiza una instalación.


 Cuando se instala simultáneamente con una instancia de SQL Server 2000.
 Cuando se instala en un clúster.
 Cuando se instala una instancia con nombre de SQL Server Database Engine (Motor de base de
datos de SQL Server) que incluye todas las instancias de SQL Server Express.
 Cuando se instala una instancia con nombre de Analysis Services.

Tipos de réplica en SQL Server

 Réplica transaccional.

Se inicia con una instantánea de los datos y los objetos de la base de datos de publicaciones. En cuanto se
obtiene la instantánea inicial, los posteriores cambios de datos y modificaciones de los esquemas realizados
en el publicador habitualmente se entregan en el suscriptor cuando se producen (casi en tiempo real). Los
cambios de datos se aplican al suscriptor en el mismo orden y dentro de los mismos límites de la
transacción que cuando se produjeron en el publicador. Por tanto, en una publicación, se garantiza la
coherencia transaccional.

 Réplica de mezcla.

Normalmente se inicia con una instantánea de los objetos y datos de una base de datos de publicaciones.
Los cambios de datos y las modificaciones de esquema posteriores que se lleven a cabo en el publicador
y en los suscriptores se controlan mediante desencadenadores. El suscriptor se sincroniza con el
publicador cuando están conectados a la red e intercambian todas las filas que han cambiado entre el
publicador y el suscriptor desde la última vez que se produjo la sincronización.

La réplica de mezcla se suele utilizar en entornos de servidor a cliente.

 Réplica de instantáneas.

La réplica de instantáneas distribuye los datos exactamente como aparecen en un momento específico en el
tiempo y no supervisa las actualizaciones de los datos. Cuando se produce la sincronización, se genera la
instantánea completa y se envía a los suscriptores.

149
Desarrollo de escenario practico de replicación

Base de datos:

La base de datos que se utilizara en la demostración está compuesta de 4 tablas y simula un pequeño
centro comercial para su ilustración práctica se presenta la siguiente figura con el diagrama de base de
datos y sus respectivas tablas, esta será la base de datos a replicar:

150
Escenario de replicación:

El diagrama nos muestra la ip que cada una de las computadoras servidoras deben tener (se asume para
el presente tutorial que cada una de las computadoras posea la interfaz de red en el segmento que se
indica, para nuestra demostración 192.168.254.X)

Como se puede observar en la figura anterior la base de datos estará en los tres servidores el servidor
con el nombre distribuidor será el encargado de realizar la publicación y las sucursales Sonsonate y
Santa Ana respectivamente realizaran la suscripción al servidor central que para nuestra simulación
estará en San Salvador.

Bien….. Comencemos!!!!

Lo primero será verificar que los servicios necesarios estén activos en el sistema operativo y corriendo
para poder realizar las publicaciones desde el servidor central para ello seguimos los pasos siguientes:

Clic en el menú inicio, Todos los programas luego buscamos: Microsoft SQL Server 2005,
Configuration Tools y luego SQL Server Configuration Manager.

151
Si los servicios de Agente, Browser e Instancia no están corriendo tendremos que iniciarlos
manualmente para ello daremos click derecho a cada uno y luego Start

Iniciamos sesión en SQL Server Management Studio, ya sea con credenciales de Usuario de Sql o
Credenciales de Sistema Operativo (Windows) En este caso utilizaremos Credenciales de Usuario Sql
server llamada “sa”

152
Vemos que tenemos la base de datos mostrada anteriormente con sus respectivas tablas y diagramas:

El siguiente paso será crear la replicación para ello comenzaremos cambiando algunos permisos en la base
de datos, para ello hacemos clic derecho en Replication y luego en Publisher properties

153
En la ventana siguiente seleccionamos Publications Databases y permitimos Transactional y Merge asi
nuestras publicaciones de bases de datos podrán realizarse tanto para transaccionales como para mezcla

Luego de esto hacemos clic en OK, haremos clic en local Publications para comenzar con el asistente de
creación de publicación nueva y Luego clic en New Publication

154
Se abrirá la ventana siguiente donde buscaremos las bases de datos a replicar. Luego daremos clic en next
para luego elegir qué tipo de replicación queremos hacer; recuerde que son 3 tipos diferentes de replicación
en SQL Server.

En la siguiente ventana colocaremos el tipo de replicación en este caso haremos una replicación
transaccional

hacemos clic en next

155
Ahora lo que tenemos que hacer es seleccionamos los objetos que deseamos publicar en este caso
dejaremos seleccionada la tabla producto, ahora la razon para ello es que: los servidores esclavos no podran
modificar ni realizar transacciones a la tabla productos. solamente el administrador podra hacerlo. luego de
esto hacemos clic en Next.

156
En la siguiente ventana daremos clic en next, y despues podremos ver la siguiente figura:

En esta configuraremos algunos atributos de las instantaneas que se enviaran en la replicacion, para ello
seleccionamos los checkbox que se muestran en la imagen y daremos clic en el boton change.

la siguiente ventana que saldra muestra algunos parametros de la frecuencia con la cual el agente de
instantaneas monitoreara la base de datos en esta ventana, para nuestro caso dejaremos Occurs Daily

y en Daily Frecuency colocaremos 30 minutes, en la sección Duration pondremos No end date, estas
configuraciones las mostramos en la siguiente imagen.

157
Daremos clic en Ok luego en la siguiente ventana haremos clic en next, en la siguiente figura daremos clic
en el boton Security Settings.. para configurar algunos parametros de seguridad

Despues de esto tendremos que proporcionar ciertas credenciales para acceder al publicador

158
Estas se muestran en la imagen siguiente el usuario que usaremos sera: "sa" y le colocaremos una contraseña

hacemos clic en OK y en la siguiente imagen en siguiente (next)

159
Colocamos un nombre para finalizar con el asistente de publicacionen este caso será el nombre:
Pubproductos

Damos clic en finish y si hemos realizado todo correctamente esperamos ver la siguiente ventana, veremos
que todo a concluido con éxito

160
Cerramos la ventana de asistente de publicación nueva, y veremos en local publications que ahora tenemos
una publicación nueva creada.

161
la publicación para productos se ha definido, ahora crearemos la otra publicación para compartir la tabla
stock ventas y sucursal

Ahora seguimos los mismos pasos anteriores pero nos detendremos en la parte. donde escogemos el tipo de
replicación pero ahora seleccionaremos replicación por mezcla pues nuestro ejemplo podrán los servidores
secundarios replicar también en el servidor matriz pues el servidor matriz podrá monitorear todas las
transacciones de las sucursales secundarias.

En la siguiente ventana escogemos base de datos SQL Server 2005

162
En la siguiente ventana crearemos los filtros necesarios para que los datos que repliquemos se vayan a la
sucursal que corresponde para lo cual seleccionamos las 3 tablas a replicar las cuales son: stock, sucursales y
venta.

Ahora damos clic en next y realizamos el filtro dando clic en el boton addfilter

163
Escogeremos el filtro para la sucursal 1 luego seleccionamos la tabla stock, por lo tanto tendremos que
escribir la consulta siguiente:

164
Hacemos clic en Ok y luego en add para añadir un nuevo filtro para otra tabla

luego hacemos lo mismo para la tabla sucursal y venta

165
Ahora tendríamos creados los filtros:

en la siguiente ventana dejamos los checkbox asi como aparecen pero hacemos clic en el boton change y
luego hacemos los cambios mostrados en la siguiente ventana

166
luego tendremos que aplicar la seguridad el usuario que colocaremos será "sa"

167
En las 2 ventanas siguientes hacemos clic en next para luego ponerle un nombre a la publicación en este
caso le pondremos el nombre: "PubSucursal1"

si todo lo hemos realizado de forma correcta tendríamos que ver la siguiente ventana

168
En este momento tendríamos creadas las 2 publicaciones que utilizaremos, ahora hacemos los mismos
pasos que acabamos de hacer para la sucursal 2.

luego tendremos que realizar las pruebas

Ahora lo que aremos será una conexión con un servidor remoto, para lo cual tendremos que estar
conectados con el servidor remoto y habilitar los puerto 1433 y 1434 respectivamente en el firewall de
windows

en Sql server realizamos las siguientes configuraciones:

Hacemos clic en el botón Connect, luego en Database Engine luego en la opción Browse for more

Luego en la pestaña NetworkServer Expandimos el arbol DataBase Engine y veremos que tenemos el
servidor remoto damos clic en el que nos queremos conectar y luego clic en Ok

169
Para la Authentication nos conectaremos con autenticación de SQL Server para ello usaremos el usuario
"sa"

170
Después de conectar podremos ingresar a las configuraciones del servidor remoto, luego crearemos una
suscripción, para ello, hacemos clic derecho en la carpeta Local Subscriptions y después en New
Subscription

En La siguiente ventana daremos clic en Find SQL Server Publisher, para buscar el servidor publicador y
poder suscribirnos a sus publicaciones.

171
Luego daremos clic en Server Name, damos clic en el combo y seleccionaremos Browse for more, luego en
la pestaña Network Servers y esperamos a que nos aparezca el árbol de Servidores remotos, del cual
seleccionaremos el servidor publicador y hacemos clic en Ok

172
Después de esto nos autenticaremos con cuenta de SQL Server y utilizaremos el usuario "publicador" y la
contraseña que definio el publicador luego daremos clic en connect

luego hacemos clic en PubProductos y luego en next

173
En esta ventana definiremos que el distribuidor esta en el publicador

En la siguiente ventana configuraremos una nueva base de datos hacemos clic en New database

174
Luego definiremos la base de datos con nombre Demo y dejaremos lo demás tal cual nos aparece

175
luego daremos clic en next y después en la siguiente ventana daremos clic en el botón que se muestra en la
siguiente imagen

Luego realizaremos las configuraciones de seguridad utilizaremos el usuario "sa" para la autenticacion luego
daremos clic en Ok
176
en las 4 ventanas siguientes daremos clic en next y luego en finalizar , veremos que todo se ha creado con
éxito

177
Cerramos la ventana y luego hacemos clic derecho en Local Subscriptions y luego en Refresh, ahora
crearemos la subscripcion de mezcla para ello seguimos los mismos pasos que acabamos de seguir pero en
la siguiente ventana seleccionamos pubSucursal1

los siguientes pasos serán igual quee para la suscripción anterior, hasta llegar a la parte de Synchronization
Schedule, En esta parte Seleccionaremos el Agent schedule como Run continuously para que sea mas rápida
la sincronización, hacemos clic en next

178
En la siguiente ventana seleccionaremos en el parametro Initialize When: Inmediately , para que los cambios
se realicen inmediatamente, por lo tanto veremos en el transcurso de un minutos que los registros que
ingresamos en la base de datos inicial se replicaran en esta sucursal

En la siguiente ventana Susbcription type seleccionamos Client y damos clic en next

179
En la siguiente ventana damos clic en siguiente y luego en finish, tendriamos que ver la siguiente imagen si
todo a sucedido satisfactoriamente

180
Luego tendremos que dar clic derecho en local subscriptions y luego refresh para, refrescar las
subscripciones y luego realizamos el mismo procedimiento para la base de datos Demo luego abrimos la
base de datos y la tabla producto y veremos que los datos del servidor principal se replican en el servidor
secundario.

181
183
PostgreSQL Cluster con DRBD y
Heartbeat

Ana Jiménez, Byron Guerrero, David Sandoval.

Objetivos:

 Conocer los conceptos básicos relacionados con Cluster y las tecnologías de


PostgreSQL , Heartbeat y DRBD.
 Analizar el funcionamiento de las tecnologías mencionadas anteriormente como una
solo entidad.
 Presentar un escenario en el cual se pueda a dar demostrar el funcionamiento del
Cluster y la replicación.

Conceptos:

 Cluster:

El término cluster se aplica a un conjunto o conglomerado de computadores, construido utilizando


componentes de hardware comunes y en la mayoría de los casos, software libre; los computadores se
interconectan mediante alguna tecnología de red. El cluster puede estar conformado por nodos
dedicados o por nodos no dedicados

Simplemente, un cluster es un grupo de múltiples computadores unidos mediante una red de alta
velocidad, de tal forma que el conjunto es visto como un único computador, más potente que los
comunes de escritorio.

 PostgreSQL

Es un SGBD relacional orientado a objetos y libre, publicado bajo la licencia BSD. Como muchos otros
proyectos de código abierto, el desarrollo de PostgreSQL no es manejado por una empresa y/o
persona, sino que es dirigido por una comunidad de desarrolladores que trabajan de forma
desinteresada, altruista, libre y apoyada por organizaciones comerciales.

184
PostgreSQL es un potente sistema de base de datos objeto-relacional de código abierto. Cuenta con
más de 15 años de desarrollo activo y una arquitectura probada que se ha ganado una sólida reputación
de fiabilidad e integridad de datos.

 DRBD

DRBD (DistributedReplicated Block Device) es un sistema de almacenamiento distribuido para


plataformas basadas en linux. Consiste de un modulo de kernel, herramientas para manejar los discos y
una serie de scripts, que son usados normalmente en cluster de alta disponibilidad, es similar a
un RAID 1, pero corre bajo la Red.Al hablar de DRBD, nos referimos al modulo de kernel y a las
correspondientes herramientas de administración.

 Heartbeat

Es un dominio que proporciona servicios de infraestructura de cluster (comunicación y pertenencia) a


sus clientes. Esto permite a los clientes tener conocimiento de la presencia (o desaparición) de los
procesos en otras maquinas e intercambiar fácilmente mensajes entre ellos.
Para resultar útil a los usuarios el dominio HEARTBEAT necesita emplearse en combinación con un
gestor de recursos del cluster (clusterre source manager (CRM)) el cual posee la tarea de iniciar y parar
los servicios (Direcciones IP, servidores web...) a los cuales el cluster aportará alta
disponibilidad. Pacemaker es el gestor de recursos de cluster preferido para los clusters basados en
Heartbeat.

 Replicacion

DRBD posee tres tipos de replicación estas son:

Protocol A: Protocolo de replicación asíncrona.

Protocol B: Protocolo de replicación síncrona de memoria

Protocol C: Protocolo de replicación síncrona. Utilizada en este tutorial.

Para más información de cada tipo de replicación en el siguiente enlace:

http://www.drbd.org/users-guide/s-replication-protocols.html

185
Desarrollo:

Se necesitan dos servidores o máquinas de similares características (tanto en las arquitecturas de dichos
servidores y en sus sistemas operativos). En ambas es necesario tener una partición sin montar y sin
formatear que esta será utilizada para el DRBD.

La capacidad de almacenamiento reservado en estas particiones permitirá almacenar como máximo la


capacidad de la partición más chica.

A demás se utilizara un Switch y una tercera maquina que será utilizada como cliente y hará uso de los
servidores. La topología utilizada para este tutorial es la siguiente:

Secundario Primario

El Hardware que se utilizo en la implementación:

 2 maquinas como servidores con sistema operativo Debian


 Un Switch
 Cables UTP
186
 1 maquina cliente para la conexión a la base de datos
 Interfaces usb Lan Ethernet

Instalación y configuración de DRBD

1. Procederemos inicialmente a la instalación de los paquetes necesarios para la


configuración del Heartbeat

# sudoapt-getinstall drbd8-utils build-essential libreadline6-dev zlib1g-dev

2. Primero vamos a guardar una copia del archivo de configuración original:

# mv /etc/drbd.con /etc/drbd_backup.conf

3. Ahora procederemos a la configuración de dicho archivo:

187
4. La primera línea de código hace referencia a una encuesta en la cual drbd nos invita a
participar y la segunda línea (common) la velocidad de sincronización entre las dos
maquinas.

5. De igual manera también denominamos el nombre de recurso (resource pg) en donde


un recurso lo podemos definir como término colectivo pero que hace una referencia en
particular al conjunto de información que se va a replicar.

6. Declaramos que utilizaremos un método de replicación C (protocol c), en el cual la


replicación se dará como completa cuando en ambas maquinas se actualicen los datos.

7. Luego también declaramos el tiempo de espera para la sincronizaion.

8. De igual manera también se declaran los nodos que participaran en el proceso DRBD
los cuales cederán el recurso cuando uno se encuentre bajo o fuera de línea. Junto a
estos nodos internamente se le declaran:

a. La unidad lógica del drbd que se va a crear (/dev/drbd0).


b. La partición sin formato en el cual se va montar (en nuestro caso /dev/sda4).
c. La dirección IP por medio de la cual se cederán recuro.
d. La creación de meta-data correspondiente a la partición lógica que se realizara
más adelante.

9. Recordar que este archivo de configuración debe de estar presente en ambas maquinas
tanto en la primaria como en la secundaria

10. Una vez realizada correctamente la configuración anterior en ambos nodos


procederemos a colorcarnos las respectivas direcciones IP´s para poder iniciar la
sincronización del DRBD

# Ifconfig eth1 10.0.0.2/24 up (nodo primario)

# Ifconfig eth1 10.0.0.3/24 up (nodo secundario)

11. Ahora iniciamos el DRBD:

188
Y observaremos un error al tratar de inicializar el drbd, la causa de este error es que aun no hemos
creado la meta-data del recurso que va a compartir.

12. Creamos la meta-data de la siguiente forma:

Mediante el comando drbdadm (este comando permite usar comando para manipular drbd0) create-md
pg (pg es el nombre del recurso declarado anteriormente en el archivo drbd.conf) nos permite crear la
meta-data del dispositivo lógico drbd0 y el recurso. Recordad que estos comandos deben de realizarse
en ambos nodos.

189
13. El paso siguiente es inicializar de nuevo el drbd, el cual no debería de darnos ningún
tipo de error.

Podemos ver el estado de la sincronización por medio del comando cat /proc/drbd :

Como podemos ver ya se encuentran conectados pero aun no listos para realizar la replicación o
intercambiarse el recurso para ello necesitamos definir un nodo primario y darle formato a la partición
que se va a replicar.

14. Ahora es necesario establecer el nodo primario del cluster. Para este ejemplo elegimos
absdeb como servidor primario por lo que solo en ésta máquina ejecutamos el
siguiente comando, luego damos formato a la partición compartida y montamos la
partición:

# sudo drbdadm -- --overwrite-data-of-peer primaryall

# sudo mkfs.ext4 -j /dev/drbd0

# sudo mount -t ext4 /dev/drbd0 /data (carpeta definida en postgresql para nuestro
caso la carpeta data)

Y con esto iniciara la sincronización:


190
Una vez finalizado la sincronización y completada de forma satisfactoria se mostrara algo como lo
siguiente:

Como se podrá ver el estado (cs:Connected) se encuentra estable o conectado, estadefinido el nodo
primario y secundario y se encuentran listos para la replicación o copiar datos(uptodate/uptodate).

Instalación y Configuración de Heartbeat

1. Procedemos a la instalación de Heartbeat desde los repositorios con el siguiente


comando:

# sudo apt-get install Heartbeat

2. En el nodo primario copiamos los archivos de configuración de ejemplo o


simplemente creamos archivos nuevos:

# cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/

# cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/

# cp /usr/share/doc/heartbeat/haresources.gz /etc/ha.d/
191
# gzip -d ha.cf.gz

# gzip -d haresources.gz

3. Ahora procederemos a la configuración del archivo ha.cf

Esta fue la configuración realizada para nuestro escenario se muestra un comentario a la par de cada
uno de los comandos, el initdead que es el único que no se alcanza a ver es el tiempo se que esperan
para cuando ambos nodos no se inician al mismo tiempo, es el tiempo que esperan para iniciar el
proceso.

4. Por último debemos modificar el archivo haresources. Ahí declaramos los servicios
que queremos monitorear y que deben estar siempre disponibles. En cuanto caiga una
máquina, la otra tomará el control levantando los servicios monitoreados y tomando la
IP Virtual. Dentro de haresources ingresamos:

Les voy a explicar que significa cada parte de este archivo. En primer lugar definimos cuál va a ser el
nodo principal en este caso asbdeb. IPaddr::10.0.0.1 es el script que asigna la IP virtual que tendrá el
192
cluster y el cual será el punto de acceso,también la podríamos llamar un ip flotante que será la que el
Heartbeat asigne cuando una maquina caiga.

Con drbddisk::pg le decimos que recurso DRBD queremos brindar, luego


con Filesystem::/dev/drbd0::/opt/postgresql::ext4::defaults montamos el dispositivo
virtual drbd0 en la carpeta /opt/postgresql y por último decimos que arranque o inicie postgresql.

5. En indispensable copiar el archivo de arranque de PostgreSQL


a /etc/ha.d/resources.d y modificar la variable de entorno PGDATA de dicho script
para que apunte a la carpeta /opt/postgresql/data que es el lugar donde van a residir
las bases de dato y al mismo tiempo otorgar los permisos necesarios:

# cp postgresql-9.x.x.x/contrib/start-scripts/linux /etc/ha.d/resources.d/postgresql

# chmod +x /etc/ha.d/resources.d/postgresql

6. Luego copiamos los archivos de configuración a todos los nodos o realizamos las
mismas configuraciones

193
Instalación y configuracion del PostgreSQL acceso remoto

1. La instalación de PostgreSQL será a través de la compilación del código fuente porque


debemos hacer algunas modificaciones a la variable pg_ctl para que todo funcione
correctamente. Descargue el código fuente del siguiente enlace
http://www.postgresql.org/download/

2. Luego de bajar los fuentes del PostgreSQL descomprimimos, y modificamos el código


de la aplicación pg_ctl, el archivo fuente de esta aplicación esta en postgresql-
8.X.XX/src/bin/pg_ctl/ y se llama pg_ctl.c.

3. Una vez ubicado esta aplicación buscamos la leyenda “no server runnig” dentro del
código y reemplazamos la palabra “runnig” por cualquier otra.

Esto tiene una explicación y es que Heartbeat verifica si un servicio está corriendo o no buscando la
cadena “running” u “ok” al pedir su status, entonces cuando heartbeat le pregunta a PostgreSQL si está
ejecutándose correctamente él responde “no server running” y heartbeat supone que todo está bien
aunque realmente no sea así.

4. Con la partición montada en la maquina primaria crearemos la ubicación de Postgres


dentro de ella con:

# Mkdir /opt/postgresql/data

5. Le asignamos permisos al directorio para que pertenezca al usuario “postgres”

# Chown postgres.postgres –R /opt/postgresql/data

6. Como usuario “postgres” inicializamos los datos de Postgres

# sudo su postgres

# /usr/local/pqsql/bin/initdb –D /opt/postgresql/data

194
7. A continuación modificamos un par de archivos para permitir el acceso remoto a la
base de datos; el primero de estos seria /opt/postgresql/data/postgresql.conf

Modificamos la línea de listen_addresses igualándola a “*” para que escuche en cualquier


interfaz de las que el servidor tiene disponibles.

8. El otro archivo a modificar será /opt/postgresql/data/pg_hba.confy agregamos al


final de este la siguiente línea:

Host all all 10.2.0.0/24 trust

Con la línea anterior indicamos a Postgres que permita al bloque de direcciones 10.2.0.0/24 que acceda
a cualquier base de datos con cualquier usuario en el servidor. Recordad que estos pasos se aplican solo
para la maquina primaria.

195
Pruebas de del Escenario

1. Una vez realizado correctamente la configuraciones anteriores tanto para Heartbeat y


drbd e inicializar el motor PostgreSQL, haber definido el tanto el nodo primario y
secundario procedemos a la iniciación de Heartbeat y el servicio DRBD en ambos
servidores, PostgreSQL solo en la maquina primaria:

# /etc/init.d/Heartbeat start

# /etc/ini.d/drbd start

# /etc/ha.d/resources.d/postgresql start

2. Una vez inicializado el PostgreSQL en la maquina primaria procedemos crear la base


de datos y empezar a crear las tablas, índices, vistas, etc., desde cero.

3. Luego para probar que se estén replicando correctamente los datos, en el nodo
secundario ejecutamos el comando “watch cat /proc/drbd” mientras que en el nodo
principal bajamos el servicio de hearbeat. Antes de bajar el servicio en el nodo
secundario deberíamos tener la siguiente salida en la maquina primaria:

4. Luego bajamos a Heartbeat en la maquina primaria

# /etc/init.d/Heartbeat stop

5. Ahora bien una vez detenido el Heartbeat en la maquina primara, en nuestro servidor
secundario deberíamos de ver algo similar a la captura anterior pero con la diferencia
que ahora nuestro servidor secundario será primario:

196
Referencias

Documentacion de implementación y comandos DRBD

 http://www.drbd.org/

Documentacion de implementación e instalación de Heartbeat

 http://www.habitacion511.eu/index.php/alta-disponibilidad-en-linux/

Documentacion de PostgreSQL

 http://www.postgresql.org/docs/9.1/static/install-procedure.html

Documentacion de Cluster con PostgreSQL

 http://www.ipcorp.com.ar/blog/2009/10/01/cluster-de-alta-disponibilidad-de-
servidores-postgresql-con-drbd/
 http://wiki.postgresql.org/images/0/07/Ha_postgres.pdf
 http://www.slideshare.net/jessejajti/hadrbdpostgres-postgreswest-08-presentation

197
Replicación con PostgreSQL

JuarezYonatan, Larios Raquel, Zelaya Josue

Objetivos:

 Aprender sobre el contenido amplio de PostgreSQL.


 Analizar el funcionamiento de réplicas de datos.
 Conocer sobre Slony-I y Pgpool.
 Aplicar los conocimientos obtenidos a un escenario real.

Conceptos:

¿Qué es PostgreSQL?
PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD
y con su código fuente disponible libremente. Es uno de los sistemas de gestión de bases de datos de
código abierto más potentes del mercado y en sus últimas versiones no tiene nada que envidiarle a otras
bases de datos comerciales.

PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la
estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará
funcionando.

¿Qué es una Replicación?


La réplica es un conjunto de tecnologías destinadas a la copia y distribución de datos y objetos de base
de datos, desde una base de datos a otra, para luego sincronizar ambas bases de datos y mantener su
coherencia. La réplica permite distribuir datos a diferentes ubicaciones y a usuarios remotos o móviles
mediante redes locales y de área extensa, conexiones de acceso telefónico, conexiones inalámbricas e
Internet.

¿Qué es Slony-I?
Es un software que nos permite hacer replicaciones maestro/esclavo asíncrono, realizando
actualizaciones en cascada.

199
Slony-I es un maestro "a varios esclavos" sistema de replicación en cascada de apoyo (por ejemplo - un
nodo puede alimentar a otro nodo que se alimenta de otro nodo) y de conmutación por error.

El panorama para el desarrollo de Slony-I es que es un esclavo de replicación del sistema principal que
incluye todas las características y las capacidades necesarias para replicar bases de datos de gran tamaño
a un número razonablemente limitado de los sistemas esclavistas.

Slony-I es un sistema diseñado para su uso en centros de datos y sitios de respaldo, en el modo normal
de operación es que todos los nodos están disponibles.

Sobre pgpool-II.

Pgpool-II habla los protocolos de frontend y backend de PostgreSQL, y pasa las conexiones entre ellos.
De ese modo, una aplicación de base de datos (frontend) cree que pgpool-II es el verdadero servidor de
PostgreSQL, y el servidor (backend) ve a pgpool-II como uno de sus clientes. Debido a que pgpool-II
es transparente tanto para el servidor como para el cliente, una aplicación de base de datos existente
puede empezar a usarse con pgpool-II casi sin ningún cambio en su código fuente.

pgpool-II funciona sobre Linux, Solaris, FreeBSD y la mayoría de las arquitecturas UNIX. Windows no
está soportado. Las versiones de PostgreSQL soportadas son de la 6.4 para arriba. Para usar la
paralelización de consultas es necesaria la versión 7.4 o superior.

Pgpool-II proporciona las siguientes características:

Limita el excedente de conexiones.PostgreSQL soporta un cierto número de conexiones


concurrentes y rechaza las que superen dicha cifra. Aumentar el límite máximo de conexiones
incrementa el consumo de recursos y afecta al rendimiento del sistema. pgpool-II tiene también un
límite máximo de conexiones, pero las conexiones extras se mantienen en una cola en lugar de devolver
un error inmediatamente.

Pool de conexiones.pgpool-II mantiene abiertas las conexiones a los servidores PostgreSQL y las
reutiliza siempre que se solicita una nueva conexión con las mismas propiedades (nombre de usuario,
base de datos y versión del protocolo). Ello reduce la sobrecarga en las conexiones y mejora la
productividad global del sistema.

Replicación. pgpool-II puede gestionar múltiples servidores PostgreSQL. El uso de la función de


replicación permite crear una copia en dos o más discos físicos, de modo que el servicio puede
continuar sin parar los servidores en caso de fallo en algún disco.

Balanceo de carga. Si se replica una base de datos, la ejecución de una consulta SELECT en
cualquiera de los servidores devolverá el mismo resultado. pgpool-II se aprovecha de la característica de
replicación para reducir la carga en cada uno de los servidores PostgreSQL distribuyendo las consultas
SELECT entre los múltiples servidores, mejorando así la productividad global del sistema. En el mejor
200
caso, el rendimiento mejora proporcionalmente al número de servidores PostgreSQL. El balanceo de
carga funciona mejor en la situación en la cuál hay muchos usuarios ejecutando muchas consultas al
mismo tiempo.

Paralelización de consultas. Al usar la función de paralelización de consultas, los datos pueden


dividirse entre varios servidores, de modo que la consulta puede ejecutarse en todos los servidores de
manera concurrente para reducir el tiempo total de ejecución. La paralelización de consultas es una
solución adecuada para búsquedas de datos a gran escala.

Desarrollo:

REPLICACION CON POSTGRES EN WINDOWS UTILIZANDO


SLONY-I

INSTALACION DE POSTGRES Y SLONY-I


Las herramientas que utilizaremos son:

 PostgreSQL 9.2
 PGAdmin
 Slony-I

Cabe destacar que los pasos que a continuación se describen deben de realizarse en todas las maquinas
en las cuales se realizara una replicación de bases de datos. Lo primero que debemos hacer es
descargar la versión de postgres, en nuestro caso la versión 9.2, lo pueden descargar del
siguiente enlace http://www.enterprisedb.com/products-services-training/pgdownload.

1 Ejecutamos el instalador como administrador, y nos aparecerá un cuadro de dialogo para


la instalación de postgres.

201
2 Damos clic en siguiente y debemos especificar la ruta donde se instalara postgres

3 Presionamos 3 veces siguiente y comenzara el proceso de instalación


202
4 Luego, que ya se haya terminado la instalación, debemos de tener cuidado de seleccionar
la opción de descargar otras herramientas, y damos clic en finalizar.

203
5 Automaticamente se nos abriráuna aplicación StackBuilder, que nos servirá para la
instalación de slony-I. En la pestaña seleccionamos POSTGRESSQL9.2 en el puerto
5432 y damos clic en siguiente

6 Ahora se no muestra una ventana con las categorías de complementos que podemos
instalar, debemos elegir soluciones de replicación y chequear la casilla de SLONY-I

Si todo es correcto presionamos siguiente. Se instalaran los paquetes seleccionados y damos clic en
finalizar. Se debe aclarar que para realizar esta instalación se debe tener una conexión a internet.

Ahora que ya tenemos instalado lo necesario en nuestras maquinas, procedemos a realizar las
configuraciones necesarias para realizar la replicación en Windows utilizando PostgreSQL y
Slony-I.
204
A continuación mostraremos un ejemplo de una réplica Maestro-Esclavo con la siguiente
topología:

MAESTRO ESCLAVO

No debemos olvidar que las direcciones de los nodos deben encontrarse en el mismo
segmento de red, además la DB a replicar debe de crearse tanto en el nodo maestro como en el
nodo esclavo, debe de tener el mismo nombre, los mismos campos y del mismo tipo, es decir,
debe ser idéntica.

Después de tener las consideraciones anteriores, pasamos a realizar los pasos para la
replicación de Bases de Datos.

PASO 1: Primero debemos de crear la BD a replicar (debe de crearse en ambos nodos), en este
ejemplo utilizaremos la que trae postgres por defecto (postgres) y crearemos una tabla, la cual
tendrá que replicarse. La tabla que crearemos se llama PERSONA y tiene como campos,
nombre, apellido y dui.

persona
nombre (tex)
apellido (tex)
dui (tex)

Para crear la tabla aremos uso del pgAdminIII, para ello nos vamos a Inicio Todos los
Programas PostgreSql pgAdmin III.

205
Luego postgresEschemasPublicTables

Seleccionamos Nueva Tabla, colocamos el nombre de la tabla y luego damos clic en columnas,
luego clic en Agregar y ahí agregamos los campos de nuestra tabla.

206
PASO 2:Ahora lo que haremos será configurar Slony-I, y para esto nos iremos a opciones,
caminos y agregaremos la ruta donde se encuentra nuestoSlony-I

207
Nota: Es importante notar que antes del paso anterior (ruta del slony-I) postgres no nos dejara crear cluster, es
decir no podemos replicar datos, como se muestra en la siguiente imagen

Cuando ya hemos establecido la ruta de slony-I, el mensaje de la parte inferior de la creación del Cluster cambia
a “Especificar el nombre del cluster”

Debemos de verificar que tengamos disponible el lenguaje pgsql

208
Si el lenguaje no está, lo agregamos de la siguiente manera: File OpcionDisplay y
seleccionamos Lenguanges

PASO 3: Ahora necesitamos configurar el firewall de Windows para que nos permita
conexiones a través del puerto 5432 que es el que utiliza postgres por defecto, para ello nos
vamos a PANEL DE CONTROL  SISTEMA Y SEGURIDAD  FIREWALL DE
WINDOWS  CONFIGURACION AVANZADA REGLAS DE ENTRADA 
209
NUEVA REGLA

Luego REGLA DE ENTRADA NUEVA REGLA

Luego seleccionamos el protocolo TCP y especificamos el puerto 5432

210
Damos permitimos la conexión y siguiente

Luego seleccionamos dominio y publico

211
Y por último colocamos un nombre y finalizar

PASO 4: Ahora lo que haremos será configurar el archivo pg_hba de postgres en todas las
maquinas donde realizaremos la réplica, este archivo se encuentra en, C:\Program Files
(x86)\PostgreSQL\9.2\data\pg_hba. En este archivo definiremos las direcciones de los nodos

212
y les diremos a cuales BD pueden conectarse y con cuales usuarios y cuál será el metodo de
encriptación de la contraseña. Deberá quedarnos así:

# TYPE DATABASE USER ADDRESS METHOD

# IPv4 local connections:


host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5

#Maestra
host all all 192.168.0.1/24 md5

#Esclavo
host all all 192.168.0.2/24 md5

PASO 5: Ahora crearemos un scriptSOLAMENTE PARA EL NODO MAESTRO que lo


hemos llamado Maestro.txt este archivo llevara lo siguiente, y deberá guardarse en C:\Program
Files (x86)\PostgreSQL\9.2\bin

cluster name = slony_postgres;

node 1 admin conninfo = 'dbname = postgres host = 192.168.0.1 user = postgres


password = oracle';
node 2 admin conninfo = 'dbname = postgres host = 192.168.0.2 user = postgres
password = oracle';

init cluster (id=1, comment = 'Maestro');

create set (id=1, origin=1, comment= 'Mistablas');

set add table (set id=1, origin=1, id=1, fully qualified name = 'public.persona',
comment= 'postgres');

store node (id = 2, comment = 'nodoesclavo', EVENT NODE = 1);

213
store path (server = 1, client = 2, conninfo = 'dbname = postgres host = 192.168.0.1
user = postgres password = oracle');
store path (server = 2, client = 1, conninfo = 'dbname = postgres host = 192.168.0.2
user = postgres password = oracle');

store listen (origin = 1, provider = 1, receiver = 2);


store listen (origin = 2, provider = 2, receiver = 1);

PASO 6: Ahora crearemos un scripSOLO PARA EL NODO ESCLAVO que lo hemos


llamado Suscritptor.txt este archivo llevara lo siguiente, y deberá guardarse en C:\Program Files
(x86)\PostgreSQL\9.2\bin

cluster name = slony_postgres;

node 1 admin conninfo = 'dbname = postgres host = 192.168.0.1 user = postgres


password = oracle';
node 2 admin conninfo = 'dbname = postgres host = 192.168.0.2 user = postgres
password = oracle';

subscribe set (id = 1, provider = 1, receiver = 2, forward = yes );

PASO 7: Ahora ejecutamos el escrip Maestro.txt en el nodo maestro, para ello abrimos la
consola de windows y nos colocamos en la ruta donde se encuentra guardado y ejecutamos el
commandoslonik Maestro.txt

PASO 8: Ahora ejecutamos el escrip Suscriptor.txt en el nodo esclavo, para ello abrimos la
consola de windows y nos colocamos en la ruta donde se encuentra guardado y ejecutamos el
214
commandoslonik Suscriptor.txt

PASO 9: Ahora en ambos nodos (siempre en la consola de windows) ejecutamos la siguiente


línea: slonslonypostgres “dbname = postgresuser=postgrespassword=oracle”

NOTA:No se deben de cerrar ninguna de las consolas de Windows, de lo contrario la réplica se cancela.

215
REPLICACION CON POSTGRES Y
PGPOOL EN LINUX

PREPARATIVOS INICIALES

El ejemplo de réplica presentado a continuación corresponde al siguiente escenario.


Figura 1.

En el escenario descrito en la figura 1, se encuentran dos máquinas conectadas a la red 192.168.1.0/24,


cuyos nombres de host son pgsql1 y pgsql2 y sus direcciones IP asignadas son: 192.168.1.6/24 y
192.168.1.5/24 respectivamente.
El host pgsql1 tendrá instalado:
 postgresql.
 pgpool2.
Mientras que el host pgsql2 solo tendrá instalado:
 postgresql.

Para llevar a cabo la configuración de este escenario seguiremos los siguientes pasos:

Paso 1. Configuración de los nombres de host.


Esta configuración es importante porque nos permitirá usar el nombre de host en lugar de la dirección
IP para poder realizar la configuración. Lo primero que debemos hacer en ambos nodos es editar el
216
fichero /etc/host.
# nano /etc/host

Deberá quedar como se muestra en la figura 2.

Figura 2.

Paso 2. Instalación de postgres y pgpool2.


En el host pgsql1 deberemos instalar POSTGRES y PGPOOL2, en el host pgsql2 solo instalaremos
postgres.

Pgsql1:
# apt-get installpostgresql pgpool2

Pgsql2:
# apt-getinstallpostgresql

217
Paso 3. Configuración de Postgresql.

Los siguientes pasos aplican a ambas instancias de PostgreSQL en los nodos pgsql1 y pgsql2.
Logueados como usuario postgres debemos añadir al usuario pgpool2 a los administradores de
postgres. Para loguearnos:

# su - postgres
Añadiendo al usuario pgpool2 .
createuser --superuser pgpool2
exit
A continuación vamos a controlar a cuáles host se les permitirá conectarse, cómo deberán autenticarse,
cuáles nombres de usuario de postgresql pueden usar y a cuáles bases de datos pueden acceder. Lo cual
lograremos editando el fichero: /etc/postgresql/9.2/main/pg_hba.conf

# nano /etc/postgresql/9.2/main/pg_hba.conf

La figura 3 muestra como debe quedar el fichero.


Figura 3.

218
Por último indicamos a postgresql que escuche en todas las interfaces en el puerto 5432, editamos:

# nano /etc/postgresql/9.2/main/postgresql.conf

Cambiamos los siguientes parametros:


listen_addresses = '*'
port = 5432

Reiniciamos postgres para activar los cambios:

# /etc/init.d/postgresqlrestart

Paso 4. Configuración pgpool2.


La configuración de pgpool-II la realizaremos únicamente en el nodo pgsql1, pues sólo en ese host lo
tenemos instalado.

El fichero pcp.conf es un fichero de nombres de usuario y contraseñas usado para autenticarse con la
interfaz. Todos los comandos requieren que pcp.conf se haya configurado. Debemos editar el fichero:
/etc/pgpool2/pcp.conf para añadir nuestro usuario y contraseña.

Utilizaremos pg_md5 para que nos devuelva encriptado en md5 el password que le pasemos.

Ahora editamos el archivo:


# nano /etc/pgpool2/pcp.conf

219
y agregamos al final:
root:dd22141acb5ea065acd5ed773729c98f

Luego editamos el archivo de configuración de pgpool2


# nano /etc/pgpool2/pgpool.conf

Lo dejamos de la siguiente manera:


listen_addresses = '*'
port = 9999
pcp_port = 9898
socket_dir = '/var/run/postgresql'
pcp_socket_dir = '/var/run/postgresql'
backend_socket_dir = '/var/run/postgresql'
pcp_timeout = 10
num_init_children = 32
max_pool = 4

220
child_life_time = 300
connection_life_time = 0
child_max_connections = 0
client_idle_limit = 0
authentication_timeout = 60
logdir = '/var/run/postgresql'
replication_mode = true
load_balance_mode = true
replication_stop_on_mismatch = true
replicate_select = false
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = false
connection_cache = true
health_check_timeout = 20
health_check_period = 60
health_check_user = ''
failover_command = ''
failback_command = ''
insert_lock = false
ignore_leading_white_space = true
log_statement = false
log_connections = false
log_hostname = false
parallel_mode = false
enable_query_cache = false

#set pgpool2 hostname


pgpool2_hostname = 'pgsql1'

# system DB info
system_db_hostname = 'localhost'

221
system_db_port = 5432
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'pgpool'
system_db_password = ''

# backend_hostname, backend_port, backend_weight


# here are examples
backend_hostname1 = 'pgsql2'
backend_port1 = 5432
backend_weight1 = 1

backend_hostname0 = 'pgsql1'
backend_port0 = 5432
backend_weight0 = 1

EL siguiente paso es arrancar pgpool2


# /etc/init.d/pgpool2 start

Ahora ya somos capaces de conectarnos al puerto 9999 de la IP de administración del nodo pgsql1 .
222
# psql -h pgsql1 -p 9999 -U pgpool2 -d postgres

Paso 5. Probrando la replicación.


Tras haber comprobado que ya podemos conectarnos, vamos a proceder a probar la replicación.
Para ello es necesario que la misma configuración de postgresql que se hizo en psql1 esté en psql2.
Para probar la replicación escribimos en la terminal lo siguiente:
createdb -h pgsql1 -p 9999 -U pgpool2 base_a_replicar

Como usuario postgres, en ambos nodos podremos usar psql para ver las bases de datos y verificar que
se han creado:

# su - postgres
$ psql -l

NOTA ACLARATORIA:
EN PSQL2 NO SE INSTALÓ PGPOOL2, POR LO TANTO LA CONFIGURACIÓN DE
PGPOOL2 SOLO SE DEBE HACER EN PSQL1.

223
Bibliografía.

 Wallen J., Set up MySQL database replication to ensure up-to-date backups. Obtenida el 31 de
abril de 2013 en http://www.techrepublic.com/blog/itdojo/set-up-mysql-database-
replication-to-ensure-up-to-date-backups/3340?pg=1

 Oracle MySQL, Capítulo 6. Replicación en MySQL. Obtenida el 3 de mayo de 2013 en


http://dev.mysql.com/doc/refman/5.0/es/replication.html

 Campos M., Flores C., Ortiz R., Zuniga C,. Replicación en MySQL. Obtenida el 5 de mayo de
2013 en http://basesdedatosues.blogspot.com/2012/06/replicacion-mysql-replicacion-en-
mysq.html

 Jaume Sabater (2008). Replicación y alta disponibilidad de PostgreSQL con pgpool-II. (1 Nov
– 2008) http://linuxsilo.net/articles/postgresql-pgpool.html
 pgpool Global Development Group (2003 – 2011). Pgpool-II user manual
http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-en.html
 Cristián Fabres A. Levantar el servicio postgres en linux.
http://mundo2.cl.tripod.com/colabora/inst_pg_01_cf.htm
 Replicación con Postgres http://www.slideshare.net/JohannaMendez2/replicacion-con-
postgresql-y-slony
 Slony-I Support. http://www.pgadmin.org/docs/dev/slony.html
 Slony-I enterprise-level replication system http://www.slony.info/

224
225

También podría gustarte