Você está na página 1de 13

UNIVERSIDAD POLITECNICA SALESIANA

CAMPUS - SUR INGENIERA DE SISTEMAS

PROYECTO DE SERVIDORES CLUSTER

Autor: Germn Morocho

Quito, Julio de 2011

Tema: Replicacin y alta disponibilidad de PostgreSQL por medio de clustering adjunto a una distribucin de procesos en ClusterRocks, mediante RMI, implementando un WebService para clientes remotos.

Problema propuesto:
Los problemas propuestos son los siguientes: Primero, implementar un clster de servidores con PostgreSQL, los mismos que dispongan de replicacin y alta disponibilidad con la finalidad de siempre ofrecer el servicio a los clientes que requieran de informacin guardada en dichos servidores. Segundo, implementar en ClusterRocks, un mecanismo de distribucin de procesos y balanceo de carga, en este caso para poder efectuar procesamiento de imgenes en 3D, las mismas que sern requeridas por un cliente remoto por medio de un WebService. Esta distribucin de procesos se lo efectuar mediante RMI. Marco Terico Failover cluster Un failover cluster (o clster activo-pasivo) es un grupo de ordenadores independientes que trabajan conjuntamente para incrementar la disponibilidad de diversas aplicaciones y servicios. Los servidores en el clster (llamados nodos) estn interconectados mediante cables fsicos y por software. Si uno de los nodos cae, otro empieza a dar servicio (proceso conocido como failover) sin necesidad de intervencin humana. Esta gua describe los pasos para instalar y configurar un failover clster con dos o ms nodos. PostgreSQL PostgreSQL es la base de datos relacional de cdigo abierto ms avanzada del mundo. Distribuida bajo licencia BSD (del ingls, Berkeley Software Distribution), lleva ms de 15 aos desarrollndose y su arquitectura goza de una excelente reputacin por su fiabilidad, integridad de datos y correctitud. PostgreSQL dispone de versiones para prcticamente todos los sistemas operativos y cumple totalmente con ACID (del ingls, Atomicity, Consistency, Isolation, Durability). Tiene soporte para claves extranjeras, joins, vistas, disparadores y procedimientos almacenados (en mltiples lenguajes de programacin). Incluye la mayora de los tipos de datos de SQL92 y SQL99 y, asimismo, soporta el almacenamiento de grandes objetos binarios, como imgenes, sonidos y vdeos. Tiene interfaces de programacin nativas para C/C++, Java, .Net, Perl, PHP, Python, Ruby, Tcl y ODBC, entre otros, y una excepcional documentacin.

PostgreSQL ofrece sofisticadas caractersticas tales como control concurrente multiversin (MVCC), point in time recovery (PITR), tablespaces, replicacin asncrona, transacciones anidadas (savepoints), copias de seguridad en caliente/en lnea, un sofisticado planificador/optimizador de consultas y write ahead logging para ser tolerante a fallos de hardware. Soporta juegos de caracteres internacionales, codificaciones de caracteres multibyte, Unicode y realiza ordenaciones dependiendo de la configuracin de idioma local, de la diferenciacin de maysculas y minsculas y del formato. Es altamente escalable tanto en la cantidad bruta de datos que puede manejar como en el nmero de usuarios concurrentes que puede atender. Hay sistemas activos en produccin con PostgreSQL que manejan ms de 4 terabytes de datos. Pgpool Pgpool habla los protocolos de frontend y backend de PostgreSQL, y pasa las conexiones entre ellos. De ese modo, una aplicacin de base de datos (frontend) cree que pgpool es el verdadero servidor de PostgreSQL, y el servidor (backend) ve a pgpool como uno de sus clientes. Debido a que pgpool es transparente tanto para el servidor como para el cliente, una aplicacin de base de datos existente puede empezar a usarse con pgpool casi sin ningn cambio en su cdigo fuente.

Pgpool funciona sobre Linux, Solaris, FreeBSD y la mayora de las arquitecturas UNIX. Windows no est soportado. Las versiones de PostgreSQL soportadas son de la 6.4 para arriba. Para usar la paralelizacin de consultas es necesaria la versin 7.4 o superior. Pgpool proporciona las siguientes caractersticas: Limita el excedente de conexiones. PostgreSQL soporta un cierto nmero de conexiones concurrentes y rechaza las que superen dicha cifra. Aumentar el lmite mximo de conexiones incrementa el consumo de recursos y afecta al rendimiento del sistema. pgpool tiene tambin un lmite mximo de conexiones, pero las conexiones extras se mantienen en una cola en lugar de devolver un error inmediatamente. Pool de conexiones. pgpool mantiene abiertas las conexiones a los servidores PostgreSQL y las reutiliza siempre que se solicita una nueva conexin con las mismas propiedades (nombre de usuario, base de datos y versin del protocolo). Ello reduce la sobrecarga en las conexiones y mejora la productividad global del sistema. Replicacin. pgpool puede gestionar mltiples servidores PostgreSQL. El uso de la funcin de replicacin permite crear una copia en dos o ms discos fsicos, de modo que el servicio puede continuar sin parar los servidores en caso de fallo en algn disco. Balanceo de carga. Si se replica una base de datos, la ejecucin de una consulta SELECT en cualquiera de los servidores devolver el mismo resultado. pgpool-II se aprovecha de la caracterstica de replicacin para reducir la carga en cada uno de los servidores PostgreSQL distribuyendo las consultas SELECT entre los mltiples servidores, mejorando as la productividad global del sistema. En el mejor caso, el rendimiento mejora proporcionalmente al nmero de servidores PostgreSQL. El balanceo de carga funciona

mejor en la situacin en la cul hay muchos usuarios ejecutando muchas consultas al mismo tiempo. Paralelizacin de consultas. Al usar la funcin de paralelizacin 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 ejecucin. La paralelizacin de consultas es una solucin adecuada para bsquedas de datos a gran escala.

Heartbeat Heartbeat es una utilidad que simplemente enva un latido de corazn , un simple pulso, o paquete pequeo de datos a uno o ms equipos. De esta manera, esta aplicacin nos permite que en un clster se realice un monitoreo automtico, para saber si el nodo est vivo y los servicios corriendo en el, en caso de que un nodo muera, automticamente uno de los nodos vivos tomen ese servicio, lo inicien y continen trabajando. Implementacin Para la implementacin del clster se ha hecho uso de VMWorkstation 7.1 ejecutndose sobre Windows XP SP3, para cada nodo se trabaja con Ubuntu Server 11, cada nodo con 246 MB de RAM, un procesador, una tarjeta de red en modo Bridge y un disco duro de 20 GB. Como se trabaja con Ubuntu server, este no dispone de un modo grfico, lo primero que se hace es instalar un entorno grfico liviano para poder efectuar la configuracin de forma ms amigable.
sudo apt-get install x-window-system-core gnome-core

Esto instalar un entorno grfico mnimo esto con la finalidad de consumir recursos en vano, finalmente luego de la instalacin es necesario iniciar el entorno grfico se lo efecta mediante:
startx

Instalacin de Postgres Para instalar postgres se efecta mediante el siguiente comando:


sudo apt-get install postgresql postgresql-client

Luego de ello es necesaria su configuracin, por lo tanto empezamos cambiando los passwords. El primer password a cambiar es el de la cuenta de usuario postgres, pues en la instalacin de postgres dentro de Ubuntu se ha creado un usuario llamado postgres, el password de este usario es el primero a cambiar.
sudo passwd postgres

Con ello nos solicitar dos veces el nuevo password para la cuenta postgres, para el presente documento se estableci como password postgres para mayor facilidad.

Ahora es necesario cambiar el password del usuario postgres dentro de PostgreSQL, este es el super usuario de la base de datos para ello mediante:
sudo su postgres -c psql template1 template1=# ALTER USER postgres WITH PASSWORD nueva_contrasea;

En este caso el nuevo password tambin es postgres Finalmente para salir de psql
template1=# \q

Bien ahora se debe editar 2 archivos porque la instalacin por defecto bloquea las conexiones y no podremos conectarnos desde un lugar remoto.
sudo gedit /etc/postgresql/8.4/main/postgresql.conf

Dentro del archivo se debe buscar : #listen_addresses = localhost y se cambia por: listen_addresses = * Esto configura a postgres para que acepte conexiones remotas. Ahora es necesario cambiar un segundo archivo de configuracin donde se especifica que usuario y desde que ip puede conectarse:
sudo gedit /etc/postgresql/8.4/main/pg_hba.conf

y al final se agrega: local all all 0.0.0.0/0 trust

Con esto se autoriza conexiones externas a todos los usuarios de postgres Instalacin de PGPool-II La instalacin de PGPool, se la efecta mediante la compilacin de sus fuentes, por lo tanto primeramente debemos instalar algunos paquetes para la compilacin.
sudo apt-get install make gcc libpq5 libpq-dev ntp openssl file psmisc sysstat bzip2 unzip nmap dstat rsync wget ccze tcpdump pciutils dnsutils host

Se instala PGPool en /opt/pgpool2


cd /usr/local/src sudo wget http://pgfoundry.org/frs/download.php/3076/pgpool-II-3.0.4.tar.gz sudo tar --extract --gzip --file pgpool-II-3.0.4.tar.gz

cd pgpool-II-3.0.4 sudo ./configure --prefix=/opt/pgpool2 sudo make sudo make install

Se crea una copia de los archivos de configuracin de PGPool


sudo cp /opt/pgpool2/etc/pcp.conf.sample /opt/pgpool2/etc/pcp.conf sudo cp /opt/pgpool2/etc/pgpool.conf.sample /opt/pgpool2/etc/pgpool.conf sudo cp /opt/pgpool2/etc/pool_hba.conf.sample /opt/pgpool2/etc/pool_hba.conf

A continuacin se configura pcp.conf, este es un archivo que contiene nombres de usuario y contraseas que sirve para autenticarse con la interfaz
sudo gedit /opt/pgpool2/etc/pcp.conf

El archivo debe contener lo siguiente, para nuestro caso donde se usar un usuario pgpool en postgres:
# USERID:MD5PASSWD # usuario pgpool # contrasea pgpool pgpool:ba777e4c2f15c11ea8ac3be7e0440aa0

Continuando con la configuracin, se debe modificar el archivo /opt/pgpool2/pgpool.conf


sudo gedit /opt/pgpool2/etc/pgpool.conf

Se dispone de un nodo maestro y un esclavo de rplica donde sus direcciones son: Nodo maestro: 192.168.1.110 Nodo esclavo: 192.168.1.111 El archivo de configuracin debe quedar as:
listen_addresses = '*' # Port number for pgpool port = 9999 # Port number for pgpool communication manager 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 # If idle for this many seconds, child exits. child_life_time = 300 0 means no timeout.

# If idle for this many seconds, connection to PostgreSQL closes. # 0 means no timeout. connection_life_time = 0 # If child_max_connections connections were received, child exits. # 0 means no exit. child_max_connections = 0 # If client_idle_limit is n (n > 0), the client is forced to be # disconnected whenever after n seconds idle (even inside an explicit # transactions!) # 0 means no disconnect. client_idle_limit = 0 # Maximum time in seconds to complete client authentication. # 0 means no timeout. authentication_timeout = 60 # Logging directory logdir = '/var/run/pgpool' # pid file name pid_file_name = '/var/run/pgpool/pgpool.pid' # Replication mode replication_mode = true # Load balancing mode, i.e., all SELECTs are load balanced. load_balance_mode = true replication_stop_on_mismatch = false failover_if_affected_tuples_mismatch = false replicate_select = false

reset_query_list = 'ABORT; DISCARD ALL' white_function_list = '' black_function_list = 'nextval,setval'

# If true print timestamp on each log line. print_timestamp = true

# If true, operate in master/slave mode. master_slave_mode = false

# Master/slave sub mode. either 'slony' or 'stream'. Default is 'slony'. master_slave_sub_mode = 'slony' delay_threshold = 0

log_standby_delay = 'none' connection_cache = true

# Health check timeout.

0 means no timeout.

health_check_timeout = 20

# Health check period. health_check_period = 0

0 means no health check.

# Health check user health_check_user = 'nobody' failover_command = '' failback_command = '' fail_over_on_backend_error = true insert_lock = true ignore_leading_white_space = true log_statement = false log_per_node_statement = false log_connections = false log_hostname = false parallel_mode = false enable_query_cache = false pgpool2_hostname = '' system_db_hostname = 'localhost' 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 # corresponde al primer nodo de replica que en este caso es esta maquina backend_hostname0 = '192.168.1.110' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/var/lib/postgresql/8.4/main' #Corresponde al segundo nodo de replica backend_hostname1 = '192.168.1.111' backend_port1 = 5432

backend_weight1 = 1 backend_data_directory1 = '/var/lib/postgresql/8.4/main' # If true, use pool_hba.conf for client authentication. enable_pool_hba = true # online recovery user recovery_user = 'nobody' recovery_password = '' recovery_1st_stage_command = '' recovery_2nd_stage_command = '' recovery_timeout = 90 client_idle_limit_in_recovery = 0 lobj_lock_table = '' ssl = false debug_level = 0

Se crea los directorios de trabajo para PGPool y se establecen los permisos adecuados
sudo mkdir /var/run/pgpool sudo mkdir /var/run/postgresql sudo chmod -R 777 /var/run/pgpool sudo chmod -R 777 /var/run/postgresql

El tercer archivo de configuracin de pgpool es /opt/pgpool2/pool_hba.conf


sudo gedit /opt/pgpool2/pool_hba.conf

En el cual se configura las autorizaciones para conexiones hacia pgpool, el archivo debe contener lo siguiente:
############################################################### # "host" records. In that case you will also need to make pgpool listen # on a non-local interface via the listen_addresses configuration parameter. # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 0.0.0.0/0 trust ################################################################

Ahora en este punto se debe crear un super usuario llamado pgpool dentro de postgres, se ejecuta lo siguiente:
sudo su - postgres

createuser --superuser pgpool

Para finalizar la configuracin de PGPool, se debe crear un script para su ejecucin, para ello ejecutamos lo siguiente:
sudo gedit /etc/init.d/pgpool

Se abrir el editor de textos con un archivo vaco, el mismo que deber contener lo siguiente:
############################################################### #! /bin/sh PATH=/opt/pgpool2/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/opt/pgpool2/bin/pgpool PIDFILE=/var/run/pgpool/pgpool.pid case "$1" in start) echo iniciando demonio pgpool espere /etc/init.d/postgresql start /opt/pgpool2/bin/pgpool -n & sleep 3 ;; stop) echo deteniendo el demonio pgpool espere /opt/pgpool2/bin/pgpool stop sleep 3 ;; restart) echo reiniciando los servicios de pgpool /etc/init.d/postgresql restart /opt/pgpool2/bin/pgpool stop /opt/pgpool2/bin/pgpool -n & sleep 3 ;; *) echo error de comando pruebe: start, stop o restart ;; esac ###############################################################

Al archivo acabado de crear es necesario asignarle permisos de ejecucin para ello:


sudo chmod 777 /etc/init.d/pgpool

Ahora se debe iniciar el servicio de pgpool de la siguiente forma:

sudo /etc/init.d/pgpool start

Antes de iniciar pgpool en el nodo maestro, en cada nodo donde se vaya a efectuar la rplica debe haberse comprobado lo siguiente: y y y y Tener instalado postgres Haber cambiado el password de la cuenta postgres (Usuario del sistema) Haber cambiado el password del usuario postgres dentro de PostgreSQL (Usuario de la base de datos) Tener modificado el archivo /etc/postgresql/8.4/main/postgresql.conf para que hacepte conexiones remotas listen_addresses = * Tener modificado el archivo /etc/postgresql/8.4/main/pg_hba.conf con local all all 0.0.0.0/0 trust Agregado al final Haber creado el el usuario pgpool dentro de PostgreSQL sudo su - postgres createuser --superuser pgpool Haber reiniciado el servicio de postgres tras la reconfiguracin sudo /etc/init.d/postgres restart

En este punto y para nuestro ejemplo las conexiones para nuestro clster con postgres se efectuarn sobre el Nodo principal 192.168.1.110 el puerto de conexin es 9999 el usuario es pgpool y no dispone de password puesto que en pg_hba.conf lo hemos puesto como trust. Con esta informacin podemos abrir el PgAdmin y conectarnos, donde cada sentencia que la ejecutemos ser replicada automticamente hacia todos los nodos.

Web Service y Distribucin de Procesos mediante RMI en ClusterRocks Lo que se pretende en este apartado en tener un Web Service para clientes remotos, los mismos que solicitarn informacin que se halla almacenada en el clster de base de datos. Esta informacin corresponde a archivos de contenido 3D sobre el cuerpo humano, dicha informacin debe ser procesada por los nodos del CluserRocks, con la finalidad de entregar al cliente remoto, una imagen en un formato convencional como puede ser un archivo GIF, JPEG PNG, mismos que no requieren ningn proceso extra para su despliegue. La distribucin de procesos se la efecta mediante RMI, teniendo al nodo FrontEnd como receptor de las peticione al Web Service y a su vez la tarea de balanceo de carga para los diferentes nodos de procesamiento (Compute Nodes). El esquema de los clusters sera de la siguiente forma:

En el mismo que se puede denotar lo siguiente como aspectos generales. y El cliente enva una solicitud de una de determinada parte del cuerpo hacia cluster Rocks, misma que es receptada por el FrontEnd.

y y y y

El Nodo FrontEnd, resuelve cual de los nodos es el ms apto para la tarea en base a la disponibilidad y a la eficiencia. Se asigna la tarea al nodo esclavo de conseguir la informacin requerida por el cliente remoto. Obtiene el archivo correspondiente a la parte especificada, en un formato 3ds, de 3dMax. Desde el clster de PostGres. En el nodo de cmputo de ClusterRocks, luego de haber receptado el archivo 3ds, se procede a su procesamiento para la transformacin a una imagen renderizada de formato adecuado como PNG. En este punto para esta transformacin se especifican los siguientes parmetros que se deben aplicar al archivo 3ds: zoom, rotacin en X, rotacin en Y, rotacin en Z. La imagen procesada se retorna al FrontEnd, para ser trasladada al cliente remoto como respuesta a la peticin efectuada mediante el WebService.

Herramientas Usadas: y y y y y NetBeans 6.7.1 JDK 1.6 VMWare Workstation Ubuntu Server 11 x86 Tomcat 6.0

Tecnologas Usadas: y y y y y Java RMI (Remote Method Invocation) Web Server Web Service Server Clustering (ClusterRocks) Database Replication (PGPool-II)

Conclusiones El uso de Clsteres, genera incomparables ventajas en rendimiento, escalabilidad y estabilidad de servicios, puesto que dentro de un clster mientras ms nodos posee, ms poderoso es, y de igual forma basta que un nodo se halle en ejecucin para mantener sus servicios disponibles. Recomendaciones y Se recomienda efectuar el desarrollo de cualquier tecnologa que haga uso de clsteres, sobre plataformas virtuales debido a su bajo costo, la facilidad de manejo, simplificacin de tareas y equipos de red. Para este caso se us VMWare Workstation. Una herramienta comercial con grandes capacidades y simplificacin de uso.

Você também pode gostar