jueves, 26 de junio de 2014

Replicación Mysql

Universidad de El Salvador à Facultad Multidisciplinaria de Occidente à Departamento de Ingeniería y Arquitectura



  

     Replicación en MYSQL

 
 




Presentado por:    
                                   Rosales Martínez, Juan Carlos               
                                   Cárcamo González, Carlos Alexander
                                   Zeceña Andaluz, Alba Angelica
                                   Rodríguez Cerna, Laura Isabel
                                   Umaña Umaña, Onil                                                                  
      

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?
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.

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 maestros 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

IP Maestro: 192.168.1.1
IP Esclavo: 192.168.1.2
Usuario: replicador
Password: 123456

Configuración Previa (Maestro y Esclavo)

1. Instalar mysql-server en ambos servidores
$ apt-get install mysql-server

2. Deshabilitar Network Manager  en ambos servidores
$ service network-manager stop

3. Asignar direcciones IP del mismo segmento
$ ifconfig eth0 192.168.1.1/24 up   en el maestro.
$ ifconfig eth0 192.168.1.2/24 up   en el escavo.

4. Probar conectividad en ambos servidores
$ ping 192.168.1.1    en el esclavo.
$ ping 192.168.1.2    en el maestro.

Configuración Maestro

1. Modificar archivo my.cnf:
$ nano /etc/mysql/my.cnf

2. Agregar las siguientes líneas:
server-id=1
log-bin=mysql-bin
binlog_format=mixed
sync_binlog=1
max-binlog-size=500M
expire_logs_days=4
innodb_flush_log_at_trx_commit=1




3. Modificar la línea bind-address con la IP del master
bind-address = 192.168.1.1
                  


4. Reiniciar el servicio de MySql:
$ service mysql restart

5. Abrir MySql con el usuario root:
$ mysql –u root –p

6. Insertar las siguientes instrucciones:
mysql > GRANT REPLICATION SLAVE ON *.* to 'replicador'@'%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
mysql> GRANT RELOAD ON *.* TO 'replicador'@'%';
mysql> GRANT SUPER ON *.* TO 'replicador'@'%';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;

Donde
replicador: Es el nombre de usuario creado.
123456: Es la contraseña para el usuario creado.
FLUSH PRIVILEGES: Se establecen los privilegios.
GRANT REPLICATION SLAVE…: se asignan privilegios de replicación, cabe aclarar que el comando grant sirve para asignar permisos a un usuario pero si este no existe lo crea.
SHOW MASTER STATUS: Se obtiene la información del servidor maestro.


Almacenar la información arrojada por este último comando.


7- verificamos que se haya creado el usuario
SELECT User,Host FROM mysql.user;

Esto nos mostrará los usuarios que tenemos en mysql.

8- verificar que el usuario creado tenga los permisos de replicación
show grants for replicador;                                   

Configuración Esclavo

1. Abrir MySql con su usuario maestro:
$ mysql –u root –p

2. Insertar las siguientes instrucciones:
Mysql >STOP SLAVE;
mysql > CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_PORT=3306, MASTER_USER='replicador', MASTER_PASSWORD='123456';

Dónde:
STOP SLAVE: Detener los procesos del esclavo.
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.

3. Modificar archivo my.cnf:
$ nano /etc/mysql/my.cnf

4. Agregar la siguiente línea:
server-id=2

5. Modificar la línea bind-address con la IP del slave:
bind-address = 192.168.1.2
                  
6. Reiniciar el servicio de MySql:
$ service mysql restart



7. Abrir MySql de nuevo y ejecutar las siguientes líneas:
mysql> STOP SLAVE;
mysql > CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.0000XX', MASTER_LOG_POS=XXX;
mysql> START SLAVE;

Nota.
Estos datos son tomados del servidor maestro, cuando ejecutamos
SHOW MASTER STATUS;.

Donde.
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.


8. Verificar si todo salió bien con:
Mysql > SHOW SLAVE STATUS\G;

Si visualizamos las líneas
Slave_IO_State: Waiting for master to send event  y Slave_IO_Running: True  
todo salió bien.


Prueba
En el servidor Maestro entrar a mysql
Mysql –u root -p

Crear una base de datos
mysql > create database db_prueba;

agregar una tabla a dicha base de datos, e ingresar valores.
mysql >use db_prueba;
mysql >create table alumnos(carnet varchar(5), nombres varchar(20));
mysql >Insert into alumnos values(‘Rm08106’,’Juan carlos’);

Desde el servidor esclavo, comprobar la sincronización:
mysql > show databases;
mysql >use db_prueba;
mysql >show tables;
mysql >select * from  alumnos;

Podremos ver la nueva base creada y la tabla y los datos agregados desde el servidor esclavo.





Leer nota completa...

miércoles, 25 de junio de 2014

Replicacion PostgreSQLCluster con Pgpool-II


UNIVERSIDAD DE EL SALVADOR
FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE
DEPARTAMENTO DE INGENIERIA
BASES DE DATOS
ING. ALEXANDER CALDERON PERAZA











Clúster con Pgpool-II


Desarrollado por:

Argueta Campos, Silvia Yessenia
Garcia Cardona, David Alberto
Gomez, Benjamin
Ramirez Reyes, Heysel Yanira



Objetivos:

  • Aprender los conceptos basicos del manejo de un Clúster con PostgreSQL y Pgpool-II en Linux .

  • Comprender como funciona un Clúster .

  • Configurar los equipos necesarios para crear un escenario demostrativo y verificar el uso de un cluster haciendo replicacion de bases de datos con sentencias SQL.
Conceptos:


CLUSTER

Es una coleccion de componentes que se unen y trabajan como un solo componente para proveer alta disponibilidad. Cuando se habla de Cluster de bases de datos hace referencia a una arquitectura en la que se cuenta con varios equipos con parte de los datos del usuario trabajando como uno solo en un sistema. Su arquitectura viene definida por la manera en que se almacenan los datos en cada nodo.


POSTGRESQL

Es un Sistema de gestion de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su codigo fuente libre. Es el sistema de gestion de bases de datos de codigo abierto mas potente, 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 afecta el resto y el sistema continua funcionando.


PGPOOL-II

Es un middleware que se encuentra entre los servidores de PostgreSQL y un cliente de bases de datos PosgreSQL. Ofrece las siguientes caracteristicas:

  • Agrupacion de Conexiones
Pgpool-II mantiene las conexiones establecidas a los servidores PostgreSQL y los reutiliza cada vez que una nueva conexion con las mismas propiedades entra en juego reduce la sobrecarga de la conexion, y mejora el rendimiento global del sistema.


  • Replicacion

Puede gestionar multiples servidores PostgreSQL, la activacion de la funcion de la replicacion hace que sea posible la cracion de una copia de seguridad en tiempo real en dos o mas grupos PostgreSQL de manera que el servicio pueda continuar sin interrupcion si uno de esos grupos falla.


  • Balanceo de Carga

Si se replica una base de datos la realizacion de una consulta SELECT en cualquier servidor devolvera el mismo resultado. Pgpool-II se aprovecha de la funcion de replicacion con el fin de reducir la carga en cada servidor. Lo hace mediante la distribucion de las consultas SELECT entre los servidores disponibles mejorando el rendimiento golbal del sistema. El equilibrio de carga funciona mejor en un escenario donde hay una gran cantidad de usuarios que ejecutan muchas consultas de solo lectura al mismo tiempo.


  • Limitar el acceso de conexiones

Hay un limite en el numero maximo de conexiones simultaneas con PostgreSQL y nuevas conexiones son rechazadas cuando se alcanza este numero. Al aumentar este numero maximo de conexiones aumenta el consumo de recursos y tiene un impacto negativo en el rendimiento general del sistema. Pgpool-II tambien tiene un limite en el numero maximo de conexiones pero las conexiones adicionales se pondran en otra cola en lugar de devolver un error de inmediato.


  • Consulta en paralelo

Los datos se puede dividir entra vvarios servidores, por lo que una consulta se puede ejecurat en todos los servidores al mismo tiempo reduciendo el tiempo e ejecucion total. La consulta paralela es la que funciona mejor en la busqueda de datos a gran escala.



Requerimientos:

  • 2 PC'S con sistema operativo linux (debian)
  • Un Cable de red


Desarollo:

  • INSTALACION DE PAQUETES Y UTILIDADES


1.- Utilidad para la gestion del cluster

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


2.- Se configuraran 2 archivos de debian para hacer refrencia a host y no a direcciones IP.

# nano /etc/hostname

Cambiar el nombre de host a pgsql1 en el host uno y pgsql2 en el host dos.

# nano /etc/hosts

En este archivo se agregan los nombres de ambos host y sus respectivas direcciones IP.







  • INSTALANDO Y CONFIGURANDO POSTGRESQL

1.- Esta configuracion se hara en ambos nodos, primero hay que loguearse como root.


2.- Instalar las cabeceras de la librerias de PostgreSQL, el paquete de desarrollo de PostgreSQL y las utilidades de compilacion de GNU.

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


3.- Ahora se debe instalar PostgreSQL en ambos nodos del cluster.

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


4.- Instalar pgpool-II en el nodo pgsql1.

# apt-get install pgpool2 libpgpool0



5.- Comenzamos la configuracion de PostgreSQL, nos logueamos como usuario postgres y añadimos el usuario de la base de datos(rol) pgpool2 sin contraseña.

# su – postgres

# createuser -s pgpool2

Creara un usuario con rol de super usuario.


6.- Editamos ahora el siguiente fichero:

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

En este fichero se deben agregar los accesos para todos los usuarios desde cualquier direccion IP. (Se hace de esta forma por conocimiento general pero para la practica solo se deberia agregar para el usuario pgpool2 desde la direccion en donde esta instalado.) El fichero quedara de la siguiente manera:





7.- Ahora debemos indicar a PostgreSQL que escuche en todas las interfaces ya que por defecto solo lo hace en el localhost editando el siguiente fichero:

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

Se debe cambiar la siguiente directiva:

listen_addresses = '*'
También lo podemos restringir a que solo escuche peticiones de la direccion IP proveniente de donde esta instalado pgpool-II.





8.- Reinciamos PostgreSQL para activar los cambios

# service postgresql restar



  • CONFIGURANDO PGPOOL-II

Esta configuracion solo la haremos en el host pgsql1.

1.- Editaremos el archivo siguiente:

# nano /etc/pgpool2/pgpool.conf

Se configuraran los siguientes parametros: Pool de Conexion, Replicacion y Balanceo de Carga. A continuacion se muestran las directivas que se modificaran las demas las dejamos como estan.

listen_addresses = '*'
port = 9999
backend_hostname0 = 'pgsql1'
backend_port0 = '5432'
backend_weight0 = 1
replication_mode = true
load_balance_mode = true
replicate_select = true
pgpool2_hostname = 'pgsql1'


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

# service pgpool2 start


3.- Si queremos arrancar pgpoo-II en modo de depuracion primero lo detendremos con el comando “service pgpool2 stop” y lo arrancaremos en modo debug de la siguiente manera:

# pgpool -n -d -f /etc/pgpool2/pgpool.conf


4.- En otra pestaña de la terminal probaremos conectarnos a traves de pgpool-II utilizando el siguiente comando:

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

El significado del comando anterior es el siguiente:
-h es el nombre de host al que nos vamos a conectar y en donde esta instalado pgpool-II
-p es el puntero que definimos en el archivo /etc/pgpool2/pgpool.conf
-U es el usuario que creamos en los dos nodos del cluster
-d es la base de datos a la que nos vamos a conectar

Si todo va bien podemos ver que en la terminal nos muestra lo siguiente:

postgres=#

Indica que hemos logrado la conexión a traves de pgpool-II



  • PRUEBAS DE REPLICACION


1.- Primero creamos una base de datos de la siguiente manera:

# createdb -h pgsql1 -p 9999 -U pgpool2 uesdatabase


2.- Si nos logueamos como usuario postgres en los dos nodos del cluster (su -postgres) y ejecutamos el siguiente comando para visualizar las bases de datos nos debe mostrar en cada nodo la base de datos que creamos en el paso anterior:

$ psql -1


El resutado sera:

















Leer nota completa...


UNIVERSIDAD DE EL SALVADOR
FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE
DEPARTAMENTO DE INGENIERIA
BASES DE DATOS
ING. ALEXANDER CALDERON PERAZA




Clúster con Pgpool-II


Desarrollado por:

Argueta Campos, Silvia Yessenia
Garcia Cardona, David Alberto
Gomez, Benjamin
Ramirez Reyes, Heysel Yanira



Objetivos:

  • Aprender los conceptos basicos del manejo de un Clúster con PostgreSQL y Pgpool-II en Linux .

  • Comprender como funciona un Clúster .

  • Configurar los equipos necesarios para crear un escenario demostrativo y verificar el uso de un cluster haciendo replicacion de bases de datos con sentencias SQL.
Conceptos:


CLUSTER

Es una coleccion de componentes que se unen y trabajan como un solo componente para proveer alta disponibilidad. Cuando se habla de Cluster de bases de datos hace referencia a una arquitectura en la que se cuenta con varios equipos con parte de los datos del usuario trabajando como uno solo en un sistema. Su arquitectura viene definida por la manera en que se almacenan los datos en cada nodo.


POSTGRESQL

Es un Sistema de gestion de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su codigo fuente libre. Es el sistema de gestion de bases de datos de codigo abierto mas potente, 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 afecta el resto y el sistema continua funcionando.


PGPOOL-II

Es un middleware que se encuentra entre los servidores de PostgreSQL y un cliente de bases de datos PosgreSQL. Ofrece las siguientes caracteristicas:

  • Agrupacion de Conexiones
Pgpool-II mantiene las conexiones establecidas a los servidores PostgreSQL y los reutiliza cada vez que una nueva conexion con las mismas propiedades entra en juego reduce la sobrecarga de la conexion, y mejora el rendimiento global del sistema.


  • Replicacion

Puede gestionar multiples servidores PostgreSQL, la activacion de la funcion de la replicacion hace que sea posible la cracion de una copia de seguridad en tiempo real en dos o mas grupos PostgreSQL de manera que el servicio pueda continuar sin interrupcion si uno de esos grupos falla.


  • Balanceo de Carga

Si se replica una base de datos la realizacion de una consulta SELECT en cualquier servidor devolvera el mismo resultado. Pgpool-II se aprovecha de la funcion de replicacion con el fin de reducir la carga en cada servidor. Lo hace mediante la distribucion de las consultas SELECT entre los servidores disponibles mejorando el rendimiento golbal del sistema. El equilibrio de carga funciona mejor en un escenario donde hay una gran cantidad de usuarios que ejecutan muchas consultas de solo lectura al mismo tiempo.


  • Limitar el acceso de conexiones

Hay un limite en el numero maximo de conexiones simultaneas con PostgreSQL y nuevas conexiones son rechazadas cuando se alcanza este numero. Al aumentar este numero maximo de conexiones aumenta el consumo de recursos y tiene un impacto negativo en el rendimiento general del sistema. Pgpool-II tambien tiene un limite en el numero maximo de conexiones pero las conexiones adicionales se pondran en otra cola en lugar de devolver un error de inmediato.


  • Consulta en paralelo

Los datos se puede dividir entra vvarios servidores, por lo que una consulta se puede ejecurat en todos los servidores al mismo tiempo reduciendo el tiempo e ejecucion total. La consulta paralela es la que funciona mejor en la busqueda de datos a gran escala.



Requerimientos:

  • 2 PC'S con sistema operativo linux (debian)
  • Un Cable de red


Desarollo:

  • INSTALACION DE PAQUETES Y UTILIDADES


1.- Utilidad para la gestion del cluster

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


2.- Se configuraran 2 archivos de debian para hacer refrencia a host y no a direcciones IP.

# nano /etc/hostname

Cambiar el nombre de host a pgsql1 en el host uno y pgsql2 en el host dos.

# nano /etc/hosts

En este archivo se agregan los nombres de ambos host y sus respectivas direcciones IP.







  • INSTALANDO Y CONFIGURANDO POSTGRESQL

1.- Esta configuracion se hara en ambos nodos, primero hay que loguearse como root.


2.- Instalar las cabeceras de la librerias de PostgreSQL, el paquete de desarrollo de PostgreSQL y las utilidades de compilacion de GNU.

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


3.- Ahora se debe instalar PostgreSQL en ambos nodos del cluster.

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


4.- Instalar pgpool-II en el nodo pgsql1.

# apt-get install pgpool2 libpgpool0



5.- Comenzamos la configuracion de PostgreSQL, nos logueamos como usuario postgres y añadimos el usuario de la base de datos(rol) pgpool2 sin contraseña.

# su – postgres

# createuser -s pgpool2

Creara un usuario con rol de super usuario.


6.- Editamos ahora el siguiente fichero:

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

En este fichero se deben agregar los accesos para todos los usuarios desde cualquier direccion IP. (Se hace de esta forma por conocimiento general pero para la practica solo se deberia agregar para el usuario pgpool2 desde la direccion en donde esta instalado.) El fichero quedara de la siguiente manera:







7.- Ahora debemos indicar a PostgreSQL que escuche en todas las interfaces ya que por defecto solo lo hace en el localhost editando el siguiente fichero:

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

Se debe cambiar la siguiente directiva:

listen_addresses = '*'
También lo podemos restringir a que solo escuche peticiones de la direccion IP proveniente de donde esta instalado pgpool-II.





8.- Reinciamos PostgreSQL para activar los cambios

# service postgresql restar



  • CONFIGURANDO PGPOOL-II

Esta configuracion solo la haremos en el host pgsql1.

1.- Editaremos el archivo siguiente:

# nano /etc/pgpool2/pgpool.conf

Se configuraran los siguientes parametros: Pool de Conexion, Replicacion y Balanceo de Carga. A continuacion se muestran las directivas que se modificaran las demas las dejamos como estan.

listen_addresses = '*'
port = 9999
backend_hostname0 = 'pgsql1'
backend_port0 = '5432'
backend_weight0 = 1
replication_mode = true
load_balance_mode = true
replicate_select = true
pgpool2_hostname = 'pgsql1'


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

# service pgpool2 start


3.- Si queremos arrancar pgpoo-II en modo de depuracion primero lo detendremos con el comando “service pgpool2 stop” y lo arrancaremos en modo debug de la siguiente manera:

# pgpool -n -d -f /etc/pgpool2/pgpool.conf


4.- En otra pestaña de la terminal probaremos conectarnos a traves de pgpool-II utilizando el siguiente comando:

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

El significado del comando anterior es el siguiente:
-h es el nombre de host al que nos vamos a conectar y en donde esta instalado pgpool-II
-p es el puntero que definimos en el archivo /etc/pgpool2/pgpool.conf
-U es el usuario que creamos en los dos nodos del cluster
-d es la base de datos a la que nos vamos a conectar

Si todo va bien podemos ver que en la terminal nos muestra lo siguiente:

postgres=#

Indica que hemos logrado la conexión a traves de pgpool-II



  • PRUEBAS DE REPLICACION


1.- Primero creamos una base de datos de la siguiente manera:

# createdb -h pgsql1 -p 9999 -U pgpool2 uesdatabase


2.- Si nos logueamos como usuario postgres en los dos nodos del cluster (su -postgres) y ejecutamos el siguiente comando para visualizar las bases de datos nos debe mostrar en cada nodo la base de datos que creamos en el paso anterior:

$ psql -1


El resutado sera:

















Leer nota completa...