SEDE REGIONAL CHOROTEGA, CAMPUS NICOYA
CARRERA: Ingeniería en Sistemas de Información
CURSO: Administración de Base de Datos
PROFESOR: José A. Jiménez Torrentes
SEMESTRE: II Ciclo 2010
Tema:
Replicación Base de Datos PostgreSQL
Presentado por:
Participación
Nombre Carné
(%)
1° Apellido 2° Apellido Nombres #####
Fernández Mora Gabriel 5 0374 0124 33.3
Pérez Meza Raymond 7 0193 0792 33.3
Vargas Ramírez Walter 5 0371 0262 33.3
Diciembre 01, 2010
Nicoya, Guanacaste, Costa Rica
Tabla de Contenido
Introducción .................................................................................................................................3
Manual de instalación de PostgreSQL en Windows .....................................................................4
Manual de instalación de MYSQL ...........................................................................................11
Instalación de PostgreSQL en Ubuntu 10.04 ..............................................................................16
Instalación de MySQL en Ubuntu 10.04 .....................................................................................18
Implementación de replicación de Bases de Datos en Windows ...............................................20
Replicación Homogénea con PostgreSQL ...............................................................................20
Replicación Heterogénea con PostgreSQL..............................................................................27
Implementación de replicación de Bases de Datos en Ubuntu ..................................................29
Configuraciones previas para la replicación en Ubuntu .........................................................29
Replicación Maestro – Maestro Homogénea .........................................................................30
Replicación Heterogénea, PostgreSQL y MySQL con Rubyrep...............................................32
Referencias.................................................................................................................................34
Introducción
En el presente documento se mostrará cómo se hace la replicación de base de datos
PostgreSQL tanto homogénea como heterogéneamente de las siguientes formas:
- Maestro – Maestro
- Maestro –Esclavo
Ambos tipos de replicación en plataforma Windows así como también en plataforma
Linux (Ubuntu).
Como parte inicial se mostrarán las instalaciones de los gestores necesarios, en este caso
PostgreSQL y MySQL en Windows así como en Ubuntu, y como segunda parte las
configuraciones necesarias para la replicación.
Manual de instalación de PostgreSQL en Windows
En esta pantalla nos pide el idioma con el que deseamos trabajar
Acá pulsamos el botón siguiente, para continuar con la instalación
Se nos muestran algunas características que se tendrá con la siguiente instalación
Marcamos cada una de las opciones para configurar el PostgreSQL.
Acá configuramos un usuario, más una contraseña para usar el sistema gestor de bases de
datos
Continuamos con la instalación y damos click el botón siguiente
Luego nos aparece la siguiente pantalla de instalación que nos permitirá poseer una
configuración más óptima
Luego de haber dado click, en el botón siguiente, continuamos con la instalación
Luego, nos aparece, la Instalación se realizó correctamente
Luego, se nos presenta la siguiente pantalla y procedemos a dar en el botón, next
Seleccionamos las siguientes características de los paquetes y damos Next
Esperamos que asistente descargue los paquetes y los configure.
Luego nos sale la siguiente pantalla en la cual damos next.
Nos sale esta otra pantalla que tiene que ver con el paquete que seleccionamos de JDBC por lo
que damos al botón next.
Dejamos la ruta por defecto si lo deseamos y damos next
Damos next y finalizar.
Nos aparcera esta ventana que tiene que ver con el paquete de ODBC que seleccionamos
anteriormente y damos next
Igual que la anterior si deseamos lo dejamos en la ubicación por defecto y damos next
Luego damos next , netx y nos saldra esta pantalla de finalizar, a la cual le damos click en el
botton finish.
Por último damos click en el botón finish de la instalación principal y con esto tenemos ya listo
nuestro postgres para ser usado.
Manual de instalación de MYSQL
Una vez ejecutado el instalador del MySQL server 5.5, le damos al check acepto términos de
licencia, y damos click en next.
Luego de dar next, podemos precionar el boton, instal para finalizar la instalación.
Se nos despliega la siguiente pantalla del
instalador, procedemos a dar click en el
botón next.
Luego nos aparece la siguiente pantalla, y le damos finalizar, finish
Luego se nos despliega la siguiente pantalla.
Luego nos pide el tipo de trabajo que
realizaremos
Luego de dar en el botón, next, se nos despliega la siguiente pantalla
En esta pantalla configuramos la cantidad de usuarios que pueden acceder al servidor
Acá se nos brinda el puerto por el cual MySQL se comunica atreves de la red, y poder así
conectarse desde cualquier lugar, además agregamos la acepción del firewall del Windows de
la computadora.
En este paso digitamos la contraseña para el usuario root que utilizara el MySQL
Esperamos a que realice la instalación
del software
Y listo.. ya tenemos instalada la herramienta
Instalación de PostgreSQL en Ubuntu 10.04
Pasos:
1. Abrimos el terminal de nuestro sistema
2. Nos volvemos usuario administrador o root con sudo su
3. Instalando postgres desde consola: sudo apt-get install postgresql postgresql-cliente
pgadmin3
El pgadmin es nuestro administrador grafico de postgres
4. Lo siguiente es cambiar la contraseña del usuario administrador de PostgreSQL
del Sistema: sudo passwd postgres.
Nos solicitara la contraseña la cual seremos libres al escogerla.
5. Ahora debemos cambiar la contraseña del “usuario postgres” en el motor:
1. sudo su postgres -c "psql template1"
2. Ingresamos el siguiente comando:
ALTER USER postgres WITH PASSWORD 'contraseña';
3. Una vez ejecutado, salimos con \q
6. Luego configuramos el acceso remoto a nuestro sistema:
1. modificar el archivo postgresql.conf
sudo gedit /etc/postgresql/8.4/main/postgresql.conf
2. Buscamos la línea:
#listen_addresses = 'localhost'
y la cambiamos por:
listen_addresses = '*'
También buscamos la siguiente línea:
#password_encryption = on
Y la cambiamos por:
password_encryption = on
7. Reiniciamos el servicio
Instalación de MySQL en Ubuntu 10.04
Pasos:
1. Abrimos el terminal de nuestro sistema
2. Nos volvemos usuario administrador o root con sudo su
3. Instalamos MySQL desde consola:
sudo apt-get install mysql-server mysql-client mysql-query-browser
4. Librerías de Java son necesarias en algún momento para la conexión
sudo apt-get install libmysql-java
5. Editamos el archive my.cnf de MySQL con el objetivo de permitir conexiones remotas
1. gedit /etc/mysql/my.cnf
2. Comentamos: bind-address =127.0.0.1
6. Ingresamos a MYSQL
1. Ingresamos a MySQL remotamente si lo deseamos por medio del terminal o el
administrador gráfico, en este caso lo aremos por medio del terminal con la
siguiente instrucción.
Mysql --user=nombreusuario --host=127.0.0.1 --password=xxxxx
2. Le damos permisos de acceso remoto a nuestro usuario y le especificamos en los
primeros 3 campos de la dirección ip de donde se le va a permitir el acceso y el
campo 4 le damos % con el objetivo de que sea cualquier máquina que venga de
esa dirección ip.
7. Reiniciamos el servicio de MySQL
Implementación de replicación de Bases de Datos en Windows
Replicación Homogénea con PostgreSQL
Para efectos de replicación en PostgreSQL existen muchas herramientas para lograr replicar
bases de datos, el cuadro comparativo a continuación describe las herramientas disponibles.
A nivel práctico como requerimiento para este proyecto de replicación se estableció que la
replicación debe lograrse de forma Maestro – Maestro. Por lo tanto con este cuadro podemos
identificar que son funcionales las siguientes herramientas:
1. PGCluster
2. Bucardo
3. Rubyrep
Analizando estas herramientas, se determinó que se utilizará rubyrep.
Se pueden definir entonces algunas de las características más importantes de rubyrep:
1. Configuración Simple.
2. Instalación completa se realiza a través de un archivo de configuración simple sola.
3. Instalación sencilla
4. La instalación puede hacerse ya sea a través de
* Ruby tradicional
* JRuby
4.1 En caso de JRuby esto significa:
1. La instalación de una JVM
2. Descargar y extraer de un archivo zip
3. Hecho.
5. Independiente de la plataforma
Se ejecuta en las plataformas Linux y Windows.
Algunas características de la replicación
rubyrep continuamente puede replicar los cambios entre las bases de datos de izquierda y
derecha.
a. Automáticamente crea disparadores, tablas de registro, etc necesarios.
b. Descubre automáticamente las tablas agregadas recientemente y sincroniza el
contenido de la tabla.
c. Reconfigura automáticamente secuencias de evitar la duplicación de los conflictos
clave.
d. Seguimiento de los cambios de columnas de clave principal
e. Se puede aplicar tanto maestro-esclavo y la replicación maestro-maestro
f. Precompilados métodos de resolución de conflictos disponibles: izquierda / derecha
gana, el cambio antes / después gana.
g. Las decisiones de replicación, opcionalmente, se pueden registrar en la tabla rubyrep
registro de eventos.
Replicando con rubyrep!
Como propuesta se puede presentar entonces:
Replicación Maestro – Maestro
Replicación Maestro – Esclavo
Ambas son realizables tanto en Windows como en ambiente Linux (Ubuntu en este caso.)
Iniciaremos con la replicación Maestro – Maestro en Windows
Replicación PostgreSQL [Maestro - Maestro]
Nota preliminar: Las base de datos a replicar ya debe existir en el nodo 2 y debe tener la
misma estructura, así como las mismas tablas y campos con iguales nombres.
1. Descargar el siguiente paquete:
http://rubyforge.org/frs/download.php/70640/rubyrep-1.1.2.zip
2. Descomprimimos el paquete, preferiblemente en C:\
3. Entramos a la carpeta donde descomprimimos, sería algo así “C:\rubyrep-1.1.2\config”
4. Copiamos el archivo postgres_config y lo pegamos en C:\ruby-rep1.1.2
5. Ahora abrimos el archivo postgres_config y lo configuramos con los parámetros
necesarios, como sigue a continuación.
# Used as component of a rubyrep config file.
# Defines connection parameters to the postgresql databases.
RR::Initializer::run do |config|
#Configuración del primer nodo.
config.left = {
:adapter => 'postgresql',
:database => 'tres', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'admin', #Contraseña de usuario postgres
:host => '10.0.2.15' #Dirección ip del nodo 1.
}
#Configuración del segundo nodo.
config.right = {
:adapter => 'postgresql',
:database => 'tres', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'admin', #Contraseña de usuario postgres
:host => '10.0.2.16' #Dirección ip del nodo 2.
}
config.include_tables /./ #incluimos las tablas de la bd
config.exclude_tables 'schema_migrations' #excluimos esta tabla
config.exclude_tables 'plugin_schema_info' #excluimos esta tabla
config.options[:auto_key_limit]=2
end
6. Cerramos y guardamos cambios, se debería ver así!
7. Abrimos una consola de Windows
a. Inicio -> Ejecutar
b. Escribimos cmd y presionamos enter
8. Una vez en la consola nos movemos de directorios hasta llegar a “C:\”, para esto
hacemos:
cd C:\
y presionamos enter.
9. Una vez en “C:\”, digitamos:
cd rubyrep-1.1.2
y presionamos enter.
10. Cuando estemos en “C:\rubyrep-1.1.2”, digitamos:
rubyrep replicate –c postgres_config.rb
y presionamos enter.
Esperamos el mensaje de Starting replication…
Listo! Tenemos replicación Maestro – Maestro
Nota:
Para hacer la replicación Maestro – Esclavo simplemente agregamos las siguientes
líneas al archivo postgres_config.br
config.options[:right_change_handling]=:ignore
config.options[:sync_conflict_handling]=:left_wins
Al final se debería ver así:
Listo! Tenemos replicación Maestro – Esclavo
Nota:
Antes de hacer cualquier modificación al archivo de configuración de la
replicación para hacer alguna otra prueba, se debe detener el proceso de replicación (se puede
hacer con Ctrl + C) y luego desinstalar la repliación con el siguiente comando: rubyrep uninstall
–c postgres_config.br, esperamos que desinstale la replicación y listo, ya se pueden hacer
cambios en la configuración.
Replicación Heterogénea con PostgreSQL
Con rubyrep se puede hacer una replicación heterogénea muy fácilmente, esto debido a que
rubyrep está desarrollado para trabajar con PostgreSQL y MySQL.
Configurando replicación Maestro - Maestro
Para configurar esta replicación entre PostgreSQL y MySQL hacemos lo siguiente:
Primero en el archivo de configuración postgre_config.br hacemos la siguiente modificación:
# Used as component of a rubyrep config file.
# Defines connection parameters to the postgresql databases.
RR::Initializer::run do |config|
#Configuración del primer nodo.
config.left = {
:adapter => 'postgresql',
:database => 'cuatro2', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'admin', #Contraseña de usuario postgres
:host => '10.0.2.15' #Dirección ip del nodo 1.
}
#Configuración del segundo nodo.
config.right = {
:adapter => 'mysql', #Cambiamos a mysql
:database => 'cuatro2', #Nombre de la base de datos a replicar
:username => 'root', #Nombre de usuario (por defecto root en mysql)
:password => 'admin', #Contraseña de usuario root
:host => '10.0.2.16' #Dirección ip del nodo 2.
}
config.include_tables /./ #incluimos las tablas de la bd
config.options[:auto_key_limit]=2
end
Una vez editado el archivo se vería así:
Ahora nos pasamos a mysql de la máquina 2:
Lo siguiente será darle permisos al usuario root para que acceda desde otra máquina
externa, lo hacemos con el siguiente comando desde la consola de mysql.
GRANT ALL PRIVILEGES ON *.* TO root@’10.0.2.15’ identified by
‘admin’;
Con esto ya puedo ejecutar la instrucción para replicar desde la máquina con postgreSQL.
rubyrep replicate –c postgres_config.rb
y Listo!.. Replicación Heterogénea PostgreSQL y MySQL [Maestro-Maestro]
Nota:
Para hacer la replicación Maestro – Esclavo simplemente agregamos las siguientes
líneas al archivo postgres_config.br como en el caso anterior.
config.options[:right_change_handling]=:ignore
config.options[:sync_conflict_handling]=:left_wins
Listo! Tenemos replicación Maestro – Esclavo
Implementación de replicación de Bases de Datos en Ubuntu
Configuraciones previas para la replicación en Ubuntu
11. Descargar el siguiente paquete:
http://rubyforge.org/frs/download.php/70640/rubyrep-1.1.2.zip
12. Descomprimimos el paquete donde lo deseemos, en este caso lo hemos hecho en una
carpeta llamada Replicación en descargas.
13. Luego nos movemos a la carpeta donde hemos descomprimido el paquete de rubyrep:
Cd /home/administrador/Descargas/Replicacion
14. Generamos nuestros archivos de configuración con la siguiente línea:
./rubyrep-1.1.2/rubyrep generate nodo.conf
Nota Punto 4: En este caso generamos un único archivo llamado nodo.conf, la extensión de
este archivo es libre, al igual que su nombre.
15. Antes de comenzar en el archivo pg_hba.conf agregas las direcciones de las demás
maquinas con las que se comunicara nuestro postgred.
gedit /etc/postgresql/8.4/main/pg_hba.conf
Lo editamos y agregamos la dirección del tal modo que quede así:
Replicación Maestro – Maestro Homogénea
1. Editamos el archivo nodo.conf, que habíamos generado en uno de los puntos
anteriores.
1. gedit nodo.conf
Nota: recuerda que en mi caso todo lo que hemos de hacer es en la dirección de
Descargas en la carpeta Replicacion.
16. Configuramos los parámetros necesarios, como sigue a continuación.
RR::Initializer::run do |config|
#Configuración del primer nodo.
config.left = {
:adapter => 'postgresql',
:database => 'preplicacion', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'lilian1904', #Contraseña de usuario postgres
:host => '172.16.61.134' #Dirección ip del nodo 1.
}
#Configuración del segundo nodo.
config.right = {
:adapter => 'postgresql',
:database => 'preplicacion', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'lilian1904', #Contraseña de usuario postgres
:host => '172.16.61.132' #Dirección ip del nodo 2.
}
config.include_tables /./ #incluimos todas las tablas de la bd
config.exclude_tables 'schema_migrations' #excluimos esta tabla
config.exclude_tables 'plugin_schema_info' #excluimos esta tabla
config.options[:auto_key_limit]=2
end
17. Cerramos y guardamos cambios, se debería ver así!
18. Por último desde la mima dirección en la que nos ubicamos anteriormente,
inicializamos la replicación.
./rubyrep-1.1.2/rubyrep replicate -c nodo.conf
Esperamos un momento y recordad que no demos de cerrar la terminal, al menos que
hagamos que este proceso se ejecute en segundo plano, para no ver la terminal
abierta.
Listo tenemos replicación y podemos comenzar a hacer pruebas.
Nota:
Para hacer la replicación Maestro – Esclavo simplemente agregamos las siguientes
líneas al archivo generado en este caso al archivo nodo.conf
config.options[:right_change_handling]=:ignore
config.options[:sync_conflict_handling]=:left_wins
Replicación Heterogénea, PostgreSQL y MySQL con Rubyrep
2. Editamos el archivo nodo.conf, que habíamos generado en uno de los puntos
anteriores o como se explicó anterior mente generamos otro con distinto nombre.
2. gedit nodo.conf
Nota: recuerda que en mi caso todo lo que hemos de hacer es en la dirección de
Descargas en la carpeta Replicación.
19. Configuramos los parámetros necesarios, como sigue a continuación.
RR::Initializer::run do |config|
#Configuración del primer nodo.
config.left = {
:adapter => 'postgresql',
:database => 'preplicacion', #Nombre de la base de datos a replicar
:username => 'postgres', #Nombre de usuario (por defecto postgres)
:password => 'lilian1904', #Contraseña de usuario postgres
:host => '172.16.61.134' #Dirección ip del nodo 1.
}
#Configuración del segundo nodo.
config.right = {
:adapter => 'mysql',
:database => 'preplicacion', #Nombre de la base de datos a replicar
:username => 'root', #Nombre de usuario (por defecto MySQL)
:password => 'lilian1904', #Contraseña de usuario postgres
:host => '172.16.61.133' #Dirección ip del nodo 2.
}
config.include_tables /./ #incluimos todas las tablas de la bd
config.exclude_tables 'schema_migrations' #excluimos esta tabla
config.exclude_tables 'plugin_schema_info' #excluimos esta tabla
config.options[:auto_key_limit]=2
end
20. Cerramos y guardamos cambios, se debería ver así!
21. Por último desde la mima dirección en la que nos ubicamos anteriormente,
inicializamos la replicación.
./rubyrep-1.1.2/rubyrep replicate -c nodo.conf
Esperamos un momento y recuerda que no demos de cerrar la terminal, al menos de
que, hagamos que este proceso se ejecute en segundo plano, para no ver la terminal
abierta.
Listo tenemos replicación y podemos comenzar a hacer pruebas.
Nota:
Para hacer la replicación Maestro – Esclavo entre postgres y MySQL simplemente
agregamos las siguientes líneas al archivo generado en este caso al archivo nodo.conf
config.options[:right_change_handling]=:ignore
config.options[:sync_conflict_handling]=:left_wins
Referencias
Herramientas de replicación:
http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
Instalar MySQL en Ubuntu:
http://www.kickbill.com/?p=1410
http://armandodiaz.wordpress.com/2008/04/06/instalar-mysql-en-ubuntu/
Permitir conexiones remotas en MySQL:
http://www.k4ch0.org/blog/2009/07/21/permitir-conexiones-remotas-a-mysql-de-manera-
grafica/
http://www.neuroticweb.com/blog/203/conexion-remota-a-mysql-en-ubuntu-debian/
Instalar PostgreSQL en Ubuntu: http://joeljil.wordpress.com/2010/07/09/postgres-ubuntu/
Rubyrep: http://www.rubyrep.org/