martes, 4 de enero de 2011

PostgreSQL & PGPool-II

En este artículo se muestra los pasos principales sobre la instalación y configuración un clúster de servidores de bases de datos PostgreSQL gestionados mediante un middleware llamado PgPool-II sobre el sistema operativo Debian GNU/Linux...
“REPLICACIÓN DE BASES DE DATOS EN POSTGRESQL UTILIZANDO PGPOOL-II”


En este artículo se muestra los pasos principales sobre la instalación y configuración un clúster de servidores de bases de datos PostgreSQL gestionados mediante un middleware llamado PgPool-II sobre el sistema operativo Debian GNU/Linux.


En esta oportunidad veremos como instalar y configurar un servidor de base de datos con PostgreSQL 8.4 en Debian 5.0.4. Pues bien, lo primero es descargar la versión de PostgreSQL 8.4 del sitio oficial (http://www.postgresql.org/download) y ejecutar en consola la siguiente orden dependiendo donde tengamos guardado nuestro archivo de PostgresSQL:

./postgresql-8.4.bin
Y, a continuación, nos aparecerá un asistente para completar el proceso de instalación, seguimos los pasos que se nos presentan y no debería de presentarse ningún problema para instalar PostgreSQL. La instalación por defecto de PostgreSQL en Debian ya nos deja un sistema gestor de base de datos completamente funcional.
A veces resulta necesario otorgarle ciertos permisos de ejecución a los archivos, por ejemplo, en caso de ser necesario aplicamos el siguiente comando como súper-usuario:
chmod +x postgresql-8.4.bin
Cabe destacar que el paquete instalador de PostgreSQL está incluído en los repositorios de Debian, pero lamentablemente sólo estaba disponible una versión anterior, la cual no contenía la funcionalidad necesaria para el correcto funcionamiento de nuestra implementación.


Un detalle a tomar muy en cuenta es que al momento de implementar este proyecto, se utilizó la versión 2.2.6 de Pgpool-II, así que en varios comandos debe de cambiarse el “2.2.6” por la versión utilizada por el usuario.
Primeramente instalamos los prerrequisitos (dependencias) para una correcta instalación de Pgpool-II:
apt-get install make gcc-4.1 libpq5 libpq-dev
Ahora bien, primero descargamos pgpool-II, lo descomprimimos e instalamos en “/opt/pgpool2”:
cd /usr/local/src
wget http://pgfoundry.org/frs/download.php/2478/pgpool-II-2.2.6.tar.gz
tar --extract --gzip --file pgpool-II-2.2.6.tar.gz
cd pgpool-II-2.2.6
./configure --prefix=/opt/pgpool2
make
make install
Recuerde que la forma de instalarlo puede variar pero, ya que normalmente es un paquete que no se encuentra en repositorios, en la mayoría de casos se descarga y se compila, que es el procedimiento presentado anteriormente.


Con una instalación exitosa procederemos a modificar los archivos pcp.conf.sample y pgpool.conf.sample; para obtener estos archivos copie los archivos de ejemplo y renómbrelos:
cp /opt/pgpool2/etc/pcp.conf.sample /opt/pgpool2/etc/pcp.conf
cp /opt/pgpool2/etc/pgpool.conf.sample /opt/pgpool2/etc/pgpool.conf
cp /opt/pgpool2/etc/pool_hba.conf.sample /opt/pgpool2/etc/pool_hba.conf
Para obtener la contraseña en MD5 ejecutamos el archivo ejecutable que se encuentra en la siguiente ruta:
/opt/pgpool2/bin/pg_md5
Y editamos el pcp.conf, para agregar la contraseña que obtuvimos anteriormente:
# Be aware that there will be no spaces or tabs at the
# beginning of the line! although the above example looks
# like so.
#
# Lines beginning with '#' (pound) are comments and will
# be ignored. Again, no spaces or tabs allowed before '#'.
###############################################################
# USERID:MD5PASSWD
# usuario pgpool
# contraseña pgpool
pgpool:ba777e4c2f15c11ea8ac3be7e0440aa0
###############################################################
Editamos el pgpool.conf, de manera que nos quede lo más parecido posible a la configuración siguiente:
###############################################################
listen_addresses = '*'
port = 9999
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 = 100
child_life_time = 300
logdir = '/var/run/postgresql'
pid_file_name = '/var/run/pgpool/pgpool.pid'
replication_mode = true
load_balance_mode = true
reset_query_list = 'ABORT; DISCARD ALL'
health_check_timeout = 20
health_check_period = 60
health_check_user = 'pgpool'
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_hostname0 = '172.1.1.2'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/opt/PostgreSQL/8.4/data'
backend_hostname1 = '172.1.1.3'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/opt/PostgreSQL/8.4/data'
backend_hostname2 = '172.1.2.3'
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = '/opt/PostgreSQL/8.4/data'
###############################################################
Cabe mencionar un par de puntos: Existen más opciones de configuración pero para este proyecto utilizaremos las puestas en este documento y el número de configuración “backend” aumentaría o disminuiría dependiendo del numero de servidores existentes a la hora de crear una nueva implementación. Normalmente las carpetas /var/run/pgpool y /var/run/postgresql no existen entonces se deben crear y poner permisos de escritura y lectura para que el demonio de pgpool pueda crear y/o modificar el archivo pgpool.pid.
mkdir /var/run/pgpool
mkdir /var/run/postgresql
chmod –R 777 /var/run/pgpool
chmod –R 777 /var/run/postgresql
Procedemos ahora con la configuración del archivo pool_hba.conf:
###############################################################
# "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
###############################################################
La única configuración que cabe explicar es que por efectos didácticos se pone que acepte conexiones de cualquier dirección, no obstante este valor se puede cambiar a determinada red o porción de red, por motivos de seguridad.
Procedemos ahora con el archivo pg_hba.conf que se encuentra en “/opt/PostgreSQL/8.4/data”:
###############################################################
# If you want to allow non-local connections, you need to add more
# "host" records. In that case you will also need to make PostgreSQL listen
# on a non-local interface via the listen_addresses configuration parameter,
# or via the -i or -h command line switches.
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
#host all all 172.1.1.0/24 trust
#host all all 172.1.2.0/24 trust
#host all all 192.168.1.0/24 trust
host all all 0.0.0.0/0 trust
###############################################################
Ahora que tenemos todo configurado, crearemos un ejecutable que se inicie al encender el servidor y usaremos el estándar de carga de archivos en Debian, colocando nuestro archivo en la carpeta /etc/init.d/:
Procedemos con el archivo pg_hba.conf que se encuentra en la ruta “/opt/PostgreSQL/8.4/data”:
###############################################################
#! /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-8.4 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-8.4 restart
/opt/pgpool2/bin/pgpool stop
/opt/pgpool2/bin/pgpool -n &
sleep 3
;;
*)
echo error de comando pruebe: start, stop o restart
;;
esac
###############################################################
Ahora para que nuestro ejecutable se inicie al encender el servidor lo copiamos a la carpeta /etc/init.d/ con permisos de súper-usuario del sistema y ejecutamos la siguiente instrucción:
update-rc.d defaults
Y con este último archivo finalizamos nuestra configuración, luego solamente nos queda reiniciar el proceso de pgpool-II y comprobar nuestra implementación.
Iniciando como súper-usuario:
su – postgres
/opt/postgresql/8.4/bin/createdb –h [host] –p 9999
Después de aplicar el comando anterior, debería de existir una base de datos idéntica (respaldada) en cada uno de los servidores configurados mediante los pasos vistos a lo largo de todo este artículo.



A continuación se adjunta el manual completo, que incluye además un extenso y detallado paso a paso sobre la instalación y configuración del sistemas operativo utilizado para esta implementación.

Pueden descargar el manual en formato PDF ó DOC desde los siguientes sitios:

MegaUploadPDF [---+---] DOC

RapidSharePDF [---+---] DOC

ScribdPDF [---+---] DOC

Windows Live SkyDrivePDF [---+---] DOC

Google DocsPDF [---+---] DOC

UES - FMOcc
BASE DE DATOS
JUNIO 2010

PRESENTADO POR:
Chacón Linares, Franco Eder.
Cruz Salazar, José Manuel.
Figueroa Jiménez, Carlos Enrique.
Reinoza Arocha, Giovanni Ernesto...

1 comentario:

Alexander Calderón dijo...

Hey, pongan mas detalles sobre su proyecto, colocar solo la descarga no tiene mucha gracia...