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:















No hay comentarios: