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