Usando Linux para muchas cosas y disfrutando de videojuegos, en dispositivos moviles, consolas y pc. Using Linux for many things and enjoying video games, mobile devices, consoles and pc

Cluster PostgreSQL 9 con Centos

Los sistemas de hoy en día requieren alta disponibilidad para poder sobrevivir a la competencia, en esto nos pueden ayudar los clusteres. Esta vez les mostrare como instalar y configurar un cluster PostgreSQL de 4 nodos con Centos. Todo el trabajo se realizara desde la cuenta root.

Requerimientos:
Centos 5.6
PostgreSQL 9.0.4

Servidores:
vepg1 - 192.168.1.37 - nodo
vepg2 - 192.168.1.38 - nodo
vepg3 - 192.168.1.39 - nodo
vepg4 - 192.168.1.40 - nodo
vepgp - 192.168.1.41 - manejador de cluster

-Instalamos, actualizamos y configuramos los 5 servers Centos 5.6
-Activar localtime en todos los servers ya que deben tener la misma hora

-Cambios en vepgp

-Descargamos e instalamos pgpool
wget -c ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/pgpool-II-3.0.4-1.el5.pp.i386.rpm
wget -c ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/pgpool-II-libs-3.0.4-1.el5.pp.i386.rpm

rpm -vi pgpool-II-libs-3.0.4-1.el5.pp.i386.rpm
rpm -vi pgpool-II-3.0.4-1.el5.pp.i386.rpm

rpm -qa|grep pgpool
pgpool-II-3.0.4-1.el5.pp
pgpool-II-libs-3.0.4-1.el5.pp

-Modificamos el file hosts del server vepgp
vi /etc/hosts
::1 localhost.localdomain localhost
127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
192.168.1.41    vepgp.hyettemail.com    vepgp
192.168.1.37    vepg1.hyettemail.com    vepg1
192.168.1.38    vepg2.hyettemail.com    vepg2
192.168.1.39    vepg3.hyettemail.com    vepg3
192.168.1.40    vepg4.hyettemail.com    vepg4

-Copiamos el conf de replicacion
cd /etc/pgpool-II
cp pgpool.conf.sample-replication pgpool.conf

-Lo modificamos
vi pgpool.conf
listen_addresses = '*'
backend_hostname0 = 'vepg1'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data'
backend_hostname1 = 'vepg2'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data'
backend_hostname0 = 'vepg3'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data'
backend_hostname1 = 'vepg4'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data'

Salimos guardando y lo ejecutamos

service pgpool start

-Hacemos algunos cambios
touch /tmp/pgpool_status
chown postgres.postgres /tmp/pgpool_status
touch pool_passwd
chown postgres.postgres pool_passwd

-Descargamos pgpoolAdmin y lo descomprimimos en /var/www/html. En mi caso lo descomprimo en /var/www/html/pgpadm/

wget -c http://pgfoundry.org/frs/download.php/2964/pgpoolAdmin-3.0.3.tar.gz
chown -R apache.apache /var/www/html/pgpadm/

-Creamos un password en MD5

pg_md5 passworddeprueba
vi /etc/pgpool-II/pcp.conf
user:72b5d515911cc4e30d4696e333573727

-Instalamos php
yum install php-cli php-mbstring php-pdo php php-pgsql php-gd php-soap php-mysql php-pear php-common php-devel

-Damos restart al httpd
service httpd restart

-Apuntamos con un browser a http://192.168.1.41/pgpadm/install/phpinfo.php y verificamos que Multibyte Support y PostgreSQL Support estan Enabled

-Cambiamos permisos
chmod 777 /var/www/html/pgpadm/templates_c/
chown apache /etc/pgpool-II/pgpool.conf
chmod 644 /etc/pgpool-II/pgpool.conf
chown apache /etc/pgpool-II/pcp.conf
chmod 644 /etc/pgpool-II/pcp.conf
chown apache /etc/pgpool-II

-Ejecutamos el instalador en http://192.168.1.41/pgpadm/install/index.php

-Eliminamos el instalador despues de terminar de instalar
rm -Rf /var/www/html/pgpadm/install

-Cambios en nodos
-Excluimos los rpm de postgresql para que solo se instalen de PGDG

 cd /etc/yum.repos.d/
 vi CentOS-Base.repo

agregamos a  [base] y [updates]
exclude=postgresql*

Salimos guardando

-Instalamos el rpm del repositorio yum
wget -c http://yum.pgrpms.org/reporpms/9.0/pgdg-centos-9.0-2.noarch.rpm
rpm -vi pgdg-centos-9.0-2.noarch.rpm

yum install postgresql90-server postgresql90-plperl postgresql90-contrib compat-postgresql-libs postgresql90-odbc-debuginfo postgresql90-debuginfo postgresql90-libs postgresql90-test postgresql90-plpython postgresql90-devel postgresql90-odbc postgresql90-docs postgresql90 postgresql90-pltcl

Si nos da error:
Transaction Check Error:
  file /usr/lib/libpq.so.4.1 from install of compat-postgresql-libs-4-1PGDG.rhel5.i686 conflicts with file from package postgresql-libs-8.1.23-1.el5_6.1.i386

rpm -e --nodeps postgresql-libs

-Iniciamos posgresql en los 4 nodos
service postgresql-9.0 initdb

-Modificamos los conf para permitir conexiones desde el manejador
vi pg_hba.conf
local all all trust
host all all 127.0.0.1/32 trust
host all all 192.168.1.0/24 trust

vi postgresql.conf
listen_addresses = '*'
port = 5432

-Iniciamos el servicio de postgresql
service postgresql-9.0 start

-Creamos una db de pruebas para verificar este funcionando el cluster. Desde cualquiera de los nodos ejecutamos.

createdb -h 192.168.1.41 -p 9999 -U postgres --no-password dbtest

Si cae en el prompt sin dar ningun mensaje es que ya creo la db perfecto y el pgpool ejecuto la orden en todos los nodos creando la db replicada.





Con esto finalizamos, espero les sirva




Share/Bookmark

15 comentarios:

  1. Hola estoy siguiendo tu guia pero tengo algunos problemas a la hora de instalar pgpool admin.

    Estoy en la parte donde en pgpooladmin se definen los administration tool directorios.

    No encuentro el directorio de pgpool command

    Tampoco detecta el directorio de "PCP Directory"


    En los demás directorios puse la que se creo en tu tutorial "etc/pgpool-II" y si se detectaron los demás archivos pero los dos anteriores no.

    Saludos.

    ResponderEliminar
  2. pgpool debe estar en sbin, puedes verificar con el comando which

    which pgpool
    /usr/sbin/pgpool

    Verifica hayas instalado los rpm como digo en la guia.

    ResponderEliminar
  3. Hola Cabrera, gracias por responder, tengo unas dudas en el comando final.

    createdb -h 192.168.1.41 -p 9999 -U postgres --no-password dbtest

    No debería ser -p 5432? Ya que es el que configuraste en los nodos no?

    Duda1: el nombre de usuario y el pass de pgpooladmin estan en pcp.conf verdad?

    Gracias de antemano y disculpa la preguntadera es que soy muy novato en esto de cluster y servidores linux.

    ResponderEliminar
  4. Hola de nuevo, la pregunta anterior se debe a que cuando voy a hacer el createdb para crear base de datos me salta el error

    ¿Está el servidor en ejecucion en el servidor 192.168.2.111 (ip de mi server) y aceptando conexiones TCP/IP en el puerto 5432?

    ResponderEliminar
  5. Ya resolví lo anterior, era culpa de SELINUX y demás seguridad...

    Pero ahora con el comando creatdb me sale el siguiente mensaje:

    "createdb: no se pudo conectar a la base de datos postgres: [root@nodo1]"

    Gracias.

    ResponderEliminar
  6. Hola de nuevo, ya resolví el problema de que los nodos no podían ejecutar el comando createdb, solo tuve que hacer que el servicio tanto httpd como el servicio postgres levantaran al arrancar con ubuntu, por defecto lo debia hacer pero en mi caso no sucedíó.

    Me topé con otro problema XD, el pgpooladmin no es capas de arrancar, al entrar a la pestaña de "pgpool status" me aparece pgpool stop y al darle a "start" me dice "pgpool start failed. pgpool.pid not found" el pgpool.pid si que se encuentra pero el admin no puede acceder a el. Supongo que si no accesa al pid tampoco puedo ver nada en las pestañas "Query Cache" y "partition Rules" ni en "node status" donde aparecen mis nodos como "down" a pesar de que si esten levantados y funcionando.

    Este es el ultimo problema que me falta resolver para completar la guía.

    Por cierto, para qué sirve el comando "touch tool_passwd"?

    ResponderEliminar
    Respuestas
    1. hola disculpa como resolviste tu problema de pgpool start failed. pgpool.pid not found

      Eliminar
  7. Te felicito por poco a poco ir tu mismo resolviendo los problemas y de paso me disculpo por la demora en responder :-(
    En mi caso para "levantar" el cluster, no lo hago por linea de comandos sino desde la interfaz web pgpooladmin, alli veras un boton de start. Si no lo hace, puede ser que el apache no pueda leer los files de postgresql, para esto, agregate apache al group de postgresql, debe quedarte asi:
    postgres:x:26:apache,nobody
    sobre el comando touch te sirve para actualizar fecha y hora de un file o en este caso, crearte un file vacio.

    ResponderEliminar
  8. Hola Cabrera ya he podido completar tu guía y tener el postgres funcional, tengo que agradecerte, pues tu guía ha sido la unica que me ha funcionado (he tratado de seguir otras guías sin éxito, incluso la guía official que se encuentra en el sitio de postgresql).

    Quiero aprovechar para pedirte permiso para agregar tu guía a un blog que pretendo hacer, agregando algunas observaciones y comentando los problemas que tuve, además de hacer un video tutorial en youtube. Por supuesto ahré referencia a tu blog y a tu persona.

    Saludos.

    ResponderEliminar
  9. Seria un honor que menciones mi blog en tus notas en blog, estaré retomando mis apuntes pronto, espero seguir contando con tus visitas.

    ResponderEliminar
  10. Hola Cabrera, estoy siguiendo los pasos del manual pero tengo una duda, no encuentro este archivo /pgpadm/phpinfo.php ni tampoco esta carpeta
    /var/www/html/pgpadm/templates_c/ lo tengo que crear manualmente?? gracias por la respuesta.

    ResponderEliminar
  11. Hola, ya resolvi el preblema de las carpetas, me faltaba descomrimir el archivo, como saber cual es el usuario y clave de pgpooladmin??
    gracias.

    ResponderEliminar
  12. Hola Leoncio, como comento en este articulo, debes generar un MD5 para cada usuario que quieras

    -Creamos un password en MD5

    pg_md5 passworddeprueba

    vi /etc/pgpool-II/pcp.conf
    user:72b5d515911cc4e30d4696e333573727

    ResponderEliminar
  13. Una pregunta.

    ¿Que ocurre si se cae el manejador?. El cluster deja de funcionar??.

    ResponderEliminar
  14. Si se cae el manejador, se cae el cluster, entonces para una solución mas "a prueba de fallos" lo ideal es complementarlo con una solución de High Availability, como Linux HA, DRBD, etc. En próximos artículos pienso tocar el tema. Gracias por tu comentario

    ResponderEliminar

Dejame un comentario, aprecio la retroalimentacion. Leave me a comment, I appreciate the feedback.