lunes, 27 de junio de 2011

CLUSTER DE SERVIDORES CON POSTGRESQL

Hoy en dia los cluster en servidores desempeñan un papel muy importante, en la solución de problemas, los clusters son usualmente empleados para mejorar el rendimiento y/o la disponibilidad por 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.
En el presente trabajo se muestra cómo instalar, configurar y mantener un clúster de servidores de bases de datos PostgreSQL gestionados mediante un middleware llamado pgpool-II sobre el sistema operativo DebianGNU/Linux. Dicho clúster ofrece capacidades de replicación, balanceo de carga y un pool de conexiones, y es capaz de realizar failover o degeneración de un nodo que deje de funcionar y de recuperar nodos caídos en línea (sin dejar de dar servicio), Se trata de un clúster activo-pasivo, si bien se hace uso del nodo pasivo para lectura con el propósito de mejorar la productividad del sistema.

Definicion de un Cluster

Un cluster de alta disponibilidad es un conjunto de dos o más máquinas que se caracterizan por mantener una serie de servicios compartidos y por estar constantemente monitorizándose entre sí. Podemos dividirlo en dos clases:
Alta disponibilidad de infraestructura
 Si se produce un fallo de hardware en alguna de las máquinas del cluster, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios en cualquiera de las otras máquinas del cluster (failover). Y cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la máquina original (failback). Esta capacidad de recuperación automática de servicios nos garantiza la alta disponibilidad de los servicios ofrecidos por el cluster, minimizando así la percepción del fallo por parte de los usuarios.
Alta disponibilidad de aplicación
 Si se produce un fallo del hardware o de las aplicaciones de alguna de las máquinas del cluster, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios que han fallado en cualquiera de las otras máquinas del cluster. Y cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la máquina original. Esta capacidad de recuperación automática de servicios nos garantiza la integridad de la información, ya que no hay pérdida de datos, y además evita molestias a los usuarios, que no tienen por qué notar que se ha producido un problema.
Failovercluster
Un failovercluster (o clúster activo-pasivo) es un grupo de ordenadores independientes que trabajan conjuntamente para incrementar la disponibilidad de diversas aplicaciones y servicios. Los servidores en el clúster (llamados nodos) están interconectados mediante cables físicos y por software. Si uno de los nodos cae, otro empieza a dar servicio (proceso conocido como failover) sin necesidad de intervención humana.
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.
PostgreSQL dispone de versiones para prácticamente todos los sistemas operativos y cumple totalmente con ACID (del inglés, Atomicity, Consistency, Isolation, Durability). Tiene soporte para claves extranjeras, joins, vistas, disparadores y procedimientos almacenados (en múltiples lenguajes de programación). Incluye la mayoría de los tipos de datos de SQL92 y SQL99 y, asimismo, soporta el almacenamiento de grandes objetos binarios, como imágenes, sonidos y vídeos. Tiene interfaces de programación nativas para C/C++, Java, .Net, Perl, PHP, Python, Ruby, Tcl y ODBC, entre otros, y una excepcional documentación.
PostgreSQL ofrece sofisticadas características tales como control concurrente multiversión (MVCC), point in time recovery (PITR), tablespaces, replicación asíncrona, transacciones anidadas (savepoints), copias de seguridad en caliente/en línea, un sofisticado planificador/optimizador de consultas y writeaheadlogging para ser tolerante a fallos de hardware. Soporta juegos de caracteres internacionales, codificaciones de caracteres multibyte, Unicode y realiza ordenaciones dependiendo de la configuración de idioma local, de la diferenciación de mayúsculas y minúsculas y del formato. Es altamente escalable tanto en la cantidad bruta de datos que puede manejar como en el número de usuarios concurrentes que puede atender. Hay sistemas activos en producción con PostgreSQL que manejan más de 4 terabytes de datos.
A continuación se presenta  un gráfico que ilustra de manera general los componentes más importantes en un sistema PostgreSQL.

ü  Aplicación cliente: Esta es la aplicación cliente que utiliza PostgreSQL como administrador de bases de datos. La conexión puede ocurrir via TCP/IP ó sockets locales.
ü  Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. Tambien es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes
ü  Ficheros de configuracion: Los 3 ficheros principales de configuración utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf
ü  Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes
ü  PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en caché.
ü  Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperación de tipo REDO)
ü  Kernel disk buffer cache: Caché de disco del sistema operativo
ü  Disco: Disco físico donde se almacenan los datos y toda la información necesaria para que PostgreSQL funcione
ü Instalacion de postgresql
ü  Las dependencias de compilación (las cabeceras de la librería de PostgreSQL, el paquete de desarrollo de PostgreSQL para pogramación de servidores y las utilidades de compilación de GNU) las resolveremos mediante la instalación de los siguientes paquetes:
ü  # apt-get install libpq-dev postgresql-server-dev-8.4 bison build-essential
ü  Una vez instaladas las dependencias necesarias , empezaremos instalando PostgreSQL en los nodos utilizados por el cluster de servidores:
ü  # apt-get install postgresql-8.4 postgresql-contrib-8.4 postgresql-doc-8.4 uuidlibdbd-pg-perl
ü  La instalación por defecto de PostgreSQL en Debian ya nos deja un sistema gestor de base de datos funcionando.
ü Configuración de PostgreSQL
ü  La configuracion se aplican a las instancias de PostgreSQL en los nodos utilizados en el cluster de servidores( server1 y server2).
ü  Empezaremos editando la configuración de PostgreSQL para permitir el acceso incondicional del usuario pgpool2, que será nuestro usuario de base de datos del clúster. Por incondicional se refiere al uso del modo trust, que permite la validación del usuario sin necesidad de contraseña. Esto es un requerimiento de pgpool-II para el tipo de configuración del clúster que tendremos al final , por lo cuál deberemos prestar especial atención a los filtros de acceso por IP que configuremos tanto en los servidores PostgreSQL como en el cortafuegos de los nodos.
ü  Comenzaremos, como usuario postgres, añadiendo el usuario de base de datos (role) pgpool2, sin contraseña:
su - postgres
createuser --superuser pgpool2

Editamos ahora el fichero /etc/postgresql/8.4/main/pg_hba.conf y añadimos el acceso para el usuario pgpool2 desde la dirección IP donde se ejecutará pgpool-II (en estos momentos 192.168.1.3):
# TYPE            DATABASE      USER               CIDR-ADDRESS          METHOD
local                all                                all                              ident   sameuser
host                 all                                all                                127.0.0.1/32          md5
host                 all                               pgpool2             192.168.1.3/32      trust
host                 all                    all                                  ::1/128                   md5



1 comentario:

Alexander Calderón dijo...

fuese adecuado incrustar los documentos enlazados para que se visualicen desde el mismo blog