guía para la instalación de un clúster de bases de datos
TRANSCRIPT
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 1/25
Guía para la instalación de un clúster de bases de datos
Clúster de altas prestaciones para medianas y pequeñas bases de datos que utilizan a
PostgreSQL como sistema de gestión de bases de datos.
Universidad de las Ciencias Informáticas, Carretera a San Antonio de los Baños, km 2 ½,
Boyeros, Ciudad de la Habana, Cuba.
Autor para la correspondencia:
Yoemir Orduñez Santana, Ing. Adrian Misael Peña Montero, Ing. Marcos Luis Ortiz
Valmaseda, Ing. Daymel Bonne Solís.
Centro de Tecnologías de Gestión de Datos (DATEC)
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 2/25
2
Tabla de contenido
Prefacio ......................................................................................................................................................... 3
Audiencia ................................................................................................................................................... 3
Secciones de Guía. ..................................................................................................................................... 3
Sobre PostgreSQL. ..................................................................................................................................... 3
Sobre PgPool-II. ......................................................................................................................................... 4
Sobre Debian GNU/Linux ........................................................................................................................... 5
Arquitectura del Sistema ............................................................................................................................ 5
Instalación de paquetes y configuración de dependencias. ........................................................................ 6
Configuración de PostgreSQL. .................................................................................................................... 8
Configuración de PgPool-II ......................................................................................................................... 9
Pruebas de Replicación ............................................................................................................................ 15
Instalación y Configuración de Heartbeat ................................................................................................. 18
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 3/25
3
Prefacio.
Esta guía muestra cómo instalar y configurar un clúster de servidores de bases de datos
PostgreSQL, gestionado mediante un middleware llamado PgPool-II, montado sobre el sistema
operativo Debian GNU/Linux.
El clúster antes mencionado ofrece capacidades de replicación y balanceo de carga.
Este prefacio contiene:
- Audiencia.
- Secciones de la Guía.
Audiencia.
Esta guía está orientada a:
- Administradores de bases de datos PostgreSQL que deseen adquirir habilidades en cuanto
al trabajo con la tecnología clúster, para aumentar la capacidad de respuesta y la
disponibilidad de los servidores que utilicen el SGBD anterior.
Secciones de Guía.
La Guía tiene las siguientes secciones:
Sobre PostgreSQL.
Sobre PgPool-II.
Sobre Debian GNU/Linux.
Arquitectura del sistema.
Instalación de paquetes y configuración.
Configuración de PostgreSQL.
Configuración de PgPool-II.
Pruebas de Replicación.
Instalación y Configuración de Heartbeat.
Sobre PostgreSQL.
PostgreSQL es la base de datos relacional de código abierto más avanzada del mundo. Distribuida
bajo licencia BSD (del inglés, Berkeley Software Distribution ), lleva más de 15 años
desarrollándose y su arquitectura goza de una excelente reputación por su fiabilidad, integridad de
datos y correctitud.
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 4/25
4
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, así
mismo, 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 además de una excepcional documentación.
PostgreSQL ofrece sofisticadas características tales como control concurrente multi-versió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 write ahead logging para ser tolerante a fallos de hardware. Soporta juegos de
caracteres internacionales, codificaciones de caracteres multi-byte, 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.
Sobre PgPool-II.
PgPool-II habla los protocolos de frontend y backend de PostgreSQL, y pasa las conexiones entreellos. De ese modo, una aplicación de base de datos (frontend ) cree que PgPool-II es el verdadero
servidor de PostgreSQL, y el servidor (backend ) ve a PgPool-II como uno de sus clientes. Debido a
que PgPool-II es transparente tanto para el servidor como para el cliente, una aplicación de base
de datos existente puede empezar a usarse con PgPool-II casi sin ningún cambio en su código
fuente.
PgPool-II funciona sobre Linux, Solaris, FreeBSD y la mayoría de las arquitecturas UNIX (Para
Windows no está soportado). Las versiones de PostgreSQL soportadas son de la 6.4 para arriba.
Para usar la paralelización de consultas es necesaria la versión 7.4 o superior.
PgPool-II proporciona las siguientes características:
Limita el excedente de conexiones.
PostgreSQL soporta un cierto número de conexiones concurrentes y rechaza las que superen
dicha cifra. Aumentar el límite máximo de conexiones incrementa el consumo de recursos y afecta
al rendimiento del sistema. PgPool-II tiene también un límite máximo de conexiones, pero lasconexiones extras se mantienen en una cola en lugar de devolver un error inmediatamente.
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 5/25
5
Pool de conexiones.
PgPool-II mantiene abiertas las conexiones a los servidores PostgreSQL y las reutiliza siempre que
se solicita una nueva conexión con las mismas propiedades (nombre de usuario, base de datos y
versión del protocolo). Ello reduce la sobrecarga en las conexiones y mejora la productividad globaldel sistema.
Replicación.
PgPool-II puede gestionar múltiples servidores PostgreSQL. El uso de la función de replicación
permite crear una copia en dos o más discos físicos, de modo que el servicio puede continuar sin
parar los servidores en caso de fallo en algún disco.
Balanceo de carga.
Si se replica una base de datos, la ejecución de una consulta SELECT en cualquiera de los
servidores devolverá el mismo resultado. PgPool-II se aprovecha de la característica de replicación
para reducir la carga en cada uno de los servidores PostgreSQL distribuyendo las consultas
SELECT entre los múltiples servidores, mejorando así la productividad global del sistema. En el
mejor caso, el rendimiento mejora proporcionalmente al número de servidores PostgreSQL. El
balanceo de carga funciona mejor en la situación en la cual hay muchos usuarios ejecutando
muchas consultas al mismo tiempo.
Paralelización de consultas.
Al usar la función de paralelización 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 ejecución. La paralelización de consultas es una solución adecuada para
búsquedas de datos a gran escala.
Sobre Debian GNU/Linux.
Debian GNU/Linux es un sistema operativo libre (el conjunto de programas básicos y utilidades que
hacen que un ordenador funcione). Debian utiliza el núcleo Linux y las herramientas básicas de
GNU. Para esta instalación se utilizará el sistema operativo Debian Lenny para la arquitectura
x86_64 (AMD64/EM64T), partiendo de una instalación básica, sin ninguna tarea seleccionada en el
selector de tareas del instalador. El sistema de ficheros elegido será XFS.
Arquitectura del Sistema.
Primeramente manejar el término clúster, que no es más que un conjunto de computadoras, amenudo con semejantes componentes de hardware , que se interconectan entre sí a través de un
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 6/25
6
sistema de red de alta velocidad y son capaces de elevar la eficiencia para realizar determinadas
tareas que individualmente no podrían realizar debido a la creciente necesidad de potencia
computacional que demandan algunas aplicaciones.
En esta guía se persiguen dos objetivos:
Alta Disponibilidad.
Alto Rendimiento.
La funcionalidad que se persigue en dicho clúster es que el mismo actúe como servidor de bases
de datos, realizando esta actividad a través de las siguientes aplicaciones:
PostgreSQL, el sistema gestor de bases de datos (SGBD).
PgPool-II, el middleware que gestiona la alta disponibilidad de los servidores de
PostgreSQL.
Heartbeat, software para dar alta disponibilidad a PgPool-II y a la dirección IP de servicio .
Esta configuración permite obtener alta disponibilidad de todos los servicios y recursos en las dos
máquinas destinadas a este clúster. El diagrama de la arquitectura resultante sería el siguiente:
Instalación de paquetes y configuración de dependencias.
Se utilizarán las siguientes versiones de software:
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 7/25
7
PostgreSQL-8.4.
PgPool-II-2.2.5.
Heartbeat-2.
A continuación se muestra un resumen de los datos que se usarán:
Nodo 1:
Hostname: pgsql1.
Dirección IP administrativa: 10.34.17.55.
Nodo 2:
Hostname: pgsql2.
Dirección IP administrativa: 10.34.17.56.
PgPool-II:
Dirección IP de servicio: 192.168.1.1.
Puerto de gestión: 9898.
Puerto de servicio: 9999.
Es preciso que las entradas correspondientes a los datos anteriores existan en el fichero
/etc/hosts:
Se comenzará configurando PostgreSQL en ambos nodos, todos los comandos tienen que
ejecutarse como root o mediante sudo, a menos que se indique el uso del usuario postgres.
Las dependencias para la compilación de PgPool-II, se resuelven instalando:
Resueltas las dependencias, empezaremos instalando PostgreSQL en ambos nodos:
10.34.17.55 pgsql1
10.34.17.56 pgsql2
apt-get install libpq-dev postgresql-server-dev-8.4 bison build-essential
apt-get install postgresql-8.4 postgresql-contrib-8.4 postgresql-doc-8.4 uuidlibdbd-pg-perl
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 8/25
8
Configuración de PostgreSQL.
Los siguientes pasos se aplican a ambas instancias de PostgreSQL en los nodos pgsql1 y pgsql2.
Se empezará editando la configuración de PostgreSQL para permitir el acceso incondicional del
usuario pgpool2, que será el usuario de base de datos del clúster.
Por incondicional se refiere al modo trust, el cual permite la validación del usuario sin necesidad de
contraseña, este modo se va a configurar en el fichero /etc/postgresql/8.4/main/pg_hba.conf
Debe autenticarse como usuario postgres , para de esta forma crear al superusuario pgpool2:
Se incluirá el acceso para el usuario pgpool2 desde la dirección IP donde se ejecutará el mismo,
(en estos momentos en la dirección 10.34.17.55):
A continuación se edita el siguiente fichero /etc/postgresql/8.3/main/pg_hba.conf
Como vemos anteriormente, al usuario pgpool2, en esta guía se le dio acceso a todas las bases de
datos, pero en un marco de trabajo fuera de las pruebas que se quieren hacer se le restringe el
permiso solo a aquellas bases de datos que vaya a usar.
Aclarar que existen varias restricciones en la autenticación y control de acceso en los modos que
utiliza PgPool-II, los cuales se explican a continuación:
En el modo Replicación y en el modo Maestro-Esclavo, solo son soportados los métodos:
trust y clear text password.
En todos los demás modos que utiliza PgPool-II, se soportan los siguientes métodos: trust,
clear text password, crypt, md5.
A continuación se activa el archivado del Write-Ahead Log (WAL) de PostgreSQL, pues hará falta
para poder usar PITR (Point-In-Time Recovery ) desde PgPool-II. Editamos el fichero de
configuración /etc/postgresql/8.3/main/postgresql.conf y cambiamos los dos parámetros
siguientes:
hosts all pgpool2 10.34.17.55/32 trust
su - postgres
createuser --superuser pgpool2
host all pgpool2 10.34.17.55/32 trust
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 9/25
9
Ya que sólo se hará uso de la característica de PITR cuando se vaya a recuperar un nodo caído o
añadir uno nuevo, por defecto se ha configurado el parámetro archive_command para que no haga
nada (exit 0). Esto se hace debido a que la activación o desactivación del archivado de ficheros
WAL requiere de un reinicio del servidor, pero la alteración del comando o script que realiza la
tarea de archivar el fichero WAL rotado por PostgreSQL tan sólo requiere de una recarga de la
configuración.
Así, PostgreSQL se comportará como si no estuviera archivando ficheros de log, generando dichos
ficheros (de 16 MB cada uno) con normalidad en /var/lib/postgresql/8.4/main/pg_xlog y
rotándolos a partir del octavo que almacene.
Acto seguido crearemos el directorio /var/lib/postgresql/pg_xlog_archive , directorio donde
archivaremos (copiaremos) los ficheros WAL cuando lo necesitemos y le daremos permisos para el
usuario postgres:
Por último, se indicará a PostgreSQL que escuche en todas las interfaces pues, por defecto, sólo lo
hace en el localhost. Editamos el fichero /etc/postgresql/8.4/main/postgresql.conf cambiando la
siguiente directiva:
También se puede restringir a 127.0.0.1 y la dirección IP administrativa del nodo (10.34.17.55 en el
primer nodo, 10.34.17.56 en el segundo) para asegurarnos de que no esté escuchando en la
dirección IP de servicio del clúster (la 192.168.1.1, que queremos utilizar únicamente para pgpool-
II).
Se reinicia a PostgreSQL para activar los cambios:
Configuración de PgPool-II.
La configuración de pgpool-II se realizará únicamente en el nodo pgsql1, pues sólo en ese host
está instalado.
archive_mode = on
archive_command = 'exit 0'
mkdir --mode=700 /var/lib/postgresql/pg_xlog_archivechown postgres:postgres /var/lib/postgresql/pg_xlog_archive
listen_addresses = '*'
/etc/init.d/postgresql-8.4 restart
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 10/25
10
El fichero pcp.conf es un fichero de nombres de usuarios y contraseñas, usado para autenticarse
en la interfaz. Todos los comandos requieren que pcp.conf se haya configurado. Tras la instalación
de pgpool-II se crea un fichero /etc/pgpool-II/pcp.conf.sample de ejemplo. Configurar ese fichero
es tan sencillo como cambiarle el nombre al fichero y añadir el usuario y contraseña deseado.
Posteriormente se edita para añadir el usuario y contraseña en el formato:
En este artículo se usa root como nombre de usuario. Para generar la suma MD5 de nuestra
contraseña podemos usar la utilidad pg_md5:
Luego se crea un f ichero de configuración para pgpool-II a partir del que viene como ejemplo:
Se debe editar el fichero para configurarlo a gusto. Para este artículo se configurarán las
siguientes funcionalidades:
Pool de conexiones.
Replicación.
Balanceo de carga.
Se comenzará con una configuración básica para arrancar pgpool-II y se irán añadiendo
funcionalidades. Editamos el fichero /etc/pgpool-II/pgpool.conf para dejarlo tal y como sigue:
cp --archive /etc/pgpool-II/pcp.conf.sample /etc/pgpool/pcp.conf
Usuario:
/ usr/sbin/pg_md5 -ppassword: <password>34b339799d540a72bf1c408c0e68afdd
cp --archive /etc/pgpool-II/pgpool.conf.sample /etc/pgpool-II/etc/pgpool.conf
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 11/25
11
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 = 10num_init_children = 32
max_pool = 4
child_life_time = 300
connection_life_time = 0
child_max_connections = 0
client_idle_limit = 0
authentication_timeout = 60
logdir = '/var/run/PostgreSQL'
replication_mode = true
load_balance_mode = true
replication_stop_on_mismatch = true
replicate_select = false
reset_query_list = 'ABORT; RESET ALL; SET
SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = false
connection_cache = true
health_check_timeout = 20
health_check_period = 60
health_check_user = 'pgpool2'
failover_command = ''
failback_command = ''
insert_lock = falseignore_leading_white_space = true
log_statement = false
log_connections = false
log_hostname = false
parallel_mode = false
enable_query_cache = false
pgpool2_hostname = 'pgsql1'
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 = '10.34.17.55'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = '10.34.17.56'
backend_port1 = 5432
backend_weight1 = 1
enable_pool_hba = false
recovery_user = 'pgpool2'
recovery_password = ''
recovery_1st_stage_command = ''
recovery_2nd_stage_command = ''
recovery_timeout = 90
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 12/25
12
Todas las directivas de configuración están explicadas en la página web de pgpool-II (se adjunta a
este documento dicho manual de PgPool-II). Como aspectos a destacar de la anterior configuración
se tiene lo siguiente:
Mediante la directiva listen_addresses indica inicialmente que pgpool-II escuche en todas
las interfaces.
Mediante las directivas logdir, socket_dir, pcp_socket_dir y backend_socket_dir , se
configura, respectivamente, que el pid y todos los sockets de los diferentes procesos que
forman pgpool-II se guarden en el directorio por defecto de Debian para PostgreSQL,
/var/run/postgresql.
Se activa el pool de conexiones (directiva connection_cache) pero dejamos todas las demás
funcionalidades desactivadas (replication_mode, load_balance_mode, replicate_select y
master_slave_mode ).
Mediante las directivas health_check_timeout, health_check_period y health_check_user , se
configura la comprobación de estado de los servidores PostgreSQL para que se haga con el
usuario de base de datos pgpool2, cada 60 segundos y con un tiempo máximo de espera
de 20 segundos.
Se dejan todos los límites de conexiones, número de procesos, tiempos de espera y
similares a sus valores por defecto.
El siguiente paso es crear el script de arranque de pgpool-II, que se sitúa en /etc/init.d/pgpool , a
continuación se muestra un típico script, basado en el original del paquete pgpool de Debian:
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 13/25
13
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/binDAEMON=/usr/sbin/pgpoolPIDFILE=/var/run/pgpool/pgpool.pid
test -x $DAEMON || exit 5
# Include pgpool defaults if availableif [ -f /etc/default/pgpool ] ; then
. /etc/default/pgpoolfiinstall -o postgres -d /var/run/pgpoolOPTS=""if [ x"$PGPOOL_LOG_DEBUG" = x"yes" ]; then
OPTS="$OPTS -d"fi
. /lib/lsb/init-functions
is_running() {pidofproc -p $PIDFILE $DAEMON >/dev/null
}d_start() {
if is_running; then:
elsesu -c "$DAEMON -n $OPTS 2>&1 </dev/null | logger -t pgpool -p
${PGPOOL_SYSLOG_FACILITY:-local0}.$fi
}
d_stop() {killproc -p $PIDFILE $DAEMON -INTstatus=$?[ $status -eq 0 ] || [ $status -eq 3 ]return $?
}case "$1" in
start)log_daemon_msg "Starting pgpool-II" pgpoold_startlog_end_msg $?;;stop)
log_daemon_msg "Stopping pgpool-II" pgpoold_stoplog_end_msg $?;;
status)is_runningstatus=$?if [ $status -eq 0 ]; then
log_success_msg "pgpool-II is running."else
log_failure_msg "pgpool-II is not running."fiexit $status
;;
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 14/25
14
Siguiendo el estándar Debian, se creará el fichero /etc/default/pgpool con los valores de
configuración de arranque del daemon. Opcionalmente, se aprovecha para ponerlo en modo debug
al arrancar:
Se arranca PgPool-II:
Se puede observar el correcto arranque del daemon (o los errores en caso contrario) monitorizando
el syslog , por ejemplo mediante el uso del comando tail :
# Defaults for pgpool initscript# sourced by /etc/init.d/pgpool
# syslog facility for pgpool; see logger(1)PGPOOL_SYSLOG_FACILITY=local0
# set to "yes" if you want to enable debugging messages to the logPGPOOL_LOG_DEBUG=no
/etc/init.d/pgpool start
/usr/bin/tail -f /var/log/syslog | ccze
restart|force-reload)
log_daemon_msg "Restarting pgpool-II" pgpool
d_stop && sleep 1 && d_start
log_end_msg $?
;;
try-restart)
if $0 status >/dev/null; then
$0 restart
else
exit 0
fi
;;
reload)
exit 3
;;
*)
log_failure_msg "Usage: $0 {start|stop|status|restart|try-
restart|reload|force-reload}"exit 2
;;
esac
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 15/25
15
A partir de este momento se debe ser capaz de conectarse al puerto 9999 de la dirección IP de
administración del nodo pgsql1 (la dirección IP de servicio no estará disponible hasta que
configuremos la alta disponibilidad con Heartbeat):
Ahora se puede monitorizar las conexiones a los nodos de PostgreSQL, por lo cual activamos las
directivas log_connections y log_disconnections en los ficheros de configuración
/etc/postgresql/8.4/main/postgresql.conf de cada nodo, reiniciando PostgreSQL para que los
cambios surjan efecto.
Tras haber comprobado que ya podemos conectarnos, se procede a activar la replicación y el
balanceo de carga editando el fichero /etc/pgpool/pgpool.conf y cambiando las directivas
siguientes:
Para activar los cambios reiniciaremos pgpool-II:
Pruebas de Replicación.
En el paquete PostgreSQL-contrib-8.4 se puede encontrar una utilidad llamada pgbench . Esta
utilidad permite, en primer lugar, inicializar una base de datos con una serie de tablas sencillas y,
en segundo lugar, realizar pruebas de rendimiento sobre servidores PostgreSQL mediante la
ejecución de una cierta cantidad de consultas de varios tipos y con una concurrencia
parametrizable.
A partir de este momento se trabaja desde un tercer equipo, actuando ya como cliente del clúster.
Por comodidad, se dará de alta a las entradas del fichero /etc/hosts mencionadas anteriormente
en el artículo, igual que se hizo en ambos nodos del clúster. El primer paso consistirá en crear la
base de datos bench_replication :
Con log_statement y log_connections activados en /etc/pgpool/pgpool.conf , mostrará entradas en
/var/log/syslog similares a las siguientes:
/usr/bin/psql -h 10.34.17.55 -p 9999 -U pgpool2 -d postgres
replication_mode = trueload_balance_mode = truere lication sto on mismatch = true
/etc/init.d/pgpool restart
createdb -h 10.34.17.55 -p 9999 -U pgpool2 bench_replicationcreatelang -h 10.34.17.55 -p 9999 -U pgpool2 -d bench_replication plpgsql
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 16/25
16
Con log_statement = 'all' en /etc/postgresql/8.4/main/postgresql.conf , en el log de cualquiera de
los PostgreSQL aparecerán las siguientes líneas:
Autenticándose como usuario postgres se puede usar psql para ver las bases de datos y verificar
que se han creado:
Se procede ahora al llenado de la base de datos que se creó con tablas e información mediante el
uso de pgbench:
Mediante el siguiente script se procede a contar el número de registros insertados en cada
instancia de PostgreSQL sin pasar por pgpool-II, de modo que se pueda verificar que la replicación
se ha realizado correctamente:
LOG: connection received: host=10.34.17.55 port=33690LOG: connection authorized: user=pgpool2 database=postgres
LOG: statement: CREATE DATABASE bench_replication;LOG: statement: RESET ALLLOG: statement: SET SESSION AUTHORIZATION DEFAULT
$ su - postgres$ psql -l
List of databases
Name | Owner | Encoding-------------------+----------+-----------bench_replication | pgpool2 | SQL_ASCIIpostgres | postgres | SQL_ASCIItemplate0 | postgres | SQL_ASCIItemplate1 | postgres | SQL_ASCII
(4 rows)
/usr/lib/postgresql/8.4/bin/pgbench -i -h 10.34.17.55 -p 9999 -U pgpool2 -dbench_replication
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 17/25
17
Para poder ver cómo se balancean las consultas, teniendo activada la directiva log_statement = 'all'
en /etc/postgresql/8.4/main/postgresql.conf de ambos PostgreSQL, se puede utilizar el siguiente
script para ver qué consultas aparecen en el log de cada nodo:
A continuación se ejecutará el benchmark básico de pgbench , de modo que se pueda apreciar el
comportamiento del clúster bajo continuas inserciones, actualizaciones y consultas. Desde laconsola ejecutaremos:
#!/bin/sh
PGSQL=/usr/bin/psqlHEAD=/usr/bin/headTAIL=/usr/bin/tailCUT=/usr/bin/cutIP_LIST="10.34.17.55 10.34.17.56"PORT=5432
for ip in $IP_LISTdo
echo "ip address: $ip"for t in pgbench_branches pgbench_tellers pgbench_accounts
pgbench_historydo
echo -n "table $t: "COUNT=`$PGSQL -h $ip -p $PORT -U pgpool2 -d bench_replication -c
"SELECT count(*) FROM $t" | $HEAD -n 3 | $TAIL -n 1`echo $COUNT
done
#!/bin/sh
PGSQL=/usr/bin/psqlHEAD=/usr/bin/headTAIL=/usr/bin/tailCUT=/usr/bin/cutIP_LIST="10.34.17.55"PORT=9999
for ip in $IP_LISTdo
echo "ip address: $ip"for t in pgbench_branches pgbench_tellers pgbench_accounts
pgbench_historydo
echo -n "table $t: "COUNT=`$PGSQL -h $ip -p $PORT -U pgpool2 -d bench_replication -c"SELECT count(*) FROM $t" | $HEAD -n 3 | $TAIL -n 1`
echo $COUNTdone
done
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 18/25
18
El resultado obtenido será similar al siguiente:
Si se monitoriza el log de pgpool-II en /var/log/syslog y los logs de ambas instancias de
PostgreSQL, se verá cómo en el primer nodo se ejecutan todas las consultas (update, select,
update, update, insert ) mientras que en el segundo sólo las insert y las update . Esto se debe a que
cada transacción está explícitamente declarada (BEGIN ...END ) y, en ese caso, pgpool-II no hace
uso más que del nodo principal.
Instalación y Configuración de Heartbeat.
El programa Heartbeat es uno de los componentes principales del proyecto. Fácilmente portable,
corre en todos los Linux conocidos, así como en FreeBSD y Solaris. Heartbeat es una de las
implementaciones principales del estándar Open Clúster Framework (OCF).
Heartbeat fue la primera pieza de software que se escribió para el proyecto Linux-HA. Puede llevar
a cabo la detección de la caída de nodos, las comunicaciones y la gestión del clúster en un solo
proceso. Actualmente soporta un modelo de dependencias muy sofisticado para clústeres de N
nodos, y es muy útil y estable. La unidad de gestión de Heartbeat es el recurso. Los recursos
pueden ser, por ejemplo, direcciones IP o servicios (aplicaciones). Los siguientes tipos de
aplicaciones son típicos ejemplos:
Servidores de bases de datos.
Servidores web.
Aplicaciones ERP.
Servidores de correo electrónico.
Cortafuegos.
Servidores de ficheros.
/usr/lib/postgresql/8.4/bin/pgbench -h 10.34.17.55 -p 9999 -U pgpool2 -dbench_replication -c 10 -t 1000
[..]transaction type: TPC-B (sort of)scaling factor: 1number of clients: 1number of transactions per client: 10number of transactions actually processed: 10/10tps = 119.105754 (including connections establishing)t s = 126.179781 (excludin connections establishin )
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 19/25
19
Servidores de DNS.
Servidores de DHCP.
Servidores de proxy-caché.
El primer paso para la instalación y configuración de la herramienta será su instalación en ambos
nodos:
Luego de haber instalado correctamente la herramienta, se necesita saber que los ficheros de
configuración de Heartbeat se encuentran en /etc/ha.d/:
ha.cf: fichero de configuración principal.
haresources: fichero de configuración de recursos.
authkeys: información de autenticación.
Es preciso antes de empezar con el proceso de configuración de cada unos de los ficheros,
introducir dos conceptos de uso frecuente con Heartbeat:
Dirección IP de servicio.
Dirección IP administrativa.
Una dirección de servicio es una dirección que es gestionada por el sistema de Alta Disponibilidad
y que es movida por el clúster allí donde los servicios correspondientes se estén ejecutando. Estas
direcciones de servicio son direcciones a través de las cuales los clientes y usuarios de los
servicios en HA (Alta Disponibilidad) acceden a dichos servicios. Típicamente se almacenan en
DNS con nombres conocidos.
Es importante que la dirección de servicio no sea gestionada por el sistema operativo, sino que sea
el software de HA (Alta Disponibilidad) el único que la maneje. Si se le da una direcciónadministrativa al sistema de HA (Alta Disponibilidad) para que la gestione, esto causará problemas
pues se confundirá al sistema de HA (Alta Disponibilidad) y el sistema operativo de la máquina,
peleándose ambos por la dirección IP administrativa de la máquina.
En cambio, una dirección administrativa es una dirección que está permanentemente asociada a un
nodo específico del clúster.
Tales direcciones son muy útiles, y se recomienda encarecidamente que una dirección de este tipo
sea reservada para cada nodo del clúster, de manera que el administrador de sistemas pueda
apt-get install Heartbeat-2
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 20/25
20
acceder al nodo del clúster incluso si no hay servicios ejecutándose. Para la mayoría de sistemas,
una dirección de este tipo es obligatoria.
Asimismo, se recomienda que se reserve una de estas direcciones para cada interfaz, de modo
que se puedan testear las interfaces incluso cuando no estén activas.
Tal y como se ha especificado al inicio de este artículo, la configuración de direcciones
administrativas y de servicio es la siguiente:
Dirección administrativa pgsql1: 10.34.17.55
Dirección administrativa pgsql2: 10.34.17.56
Dirección de servicio: 192.168.1.1
Si usted está trabajando con máquinas virtuales debe agregar una nueva tarjeta de red por cada
nodo que tenga, esto lo haría directamente en la herramienta en este caso Vmware-7.0.1
Pasos a seguir:
1. Hacer clic encima de la opción “Edit virtual machine setting s”.
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 21/25
21
2. Hacer clic encima de la opción “Network Adapter ” y presionar el botón adicionar.
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 22/25
22
3. Seleccionamos la opción Custom : “Specific virtual network ” y dentro de ella
seleccionamos el tipo de conexión que deseamos, en este caso VMnet2.
Con estos pasos se garantiza la existencia de una nueva tarjeta de red en cada nodo donde se
realizaron los anteriores pasos.
En el caso que no se esté utilizando máquinas virtuales, es decir que se trabaje directamente en el
servidor debe configurar la dirección de servicio en el fichero /etc/network/interfaces siempre y
cuando no incluyamos su autoconfiguración (en forma de directiva auto o allow-hotplug). El fichero
/etc/network/interfaces del nodo pgsql1 podría quedar tal y como sigue:
auto loiface lo inet loopback
# Dirección administrativaallow-hotplug eth0iface eth0 inet static
address 10.34.17.55netmask 255.255.255.0network 10.34.17.0broadcast 10.34.17.255gateway 192.168.0.1
# Dirección de servicioiface eth1:0 inet staticaddress 192.168.1.2netmask 255.255.255.0network 192.168.1.0broadcast 192.168.1.255
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 23/25
23
La declaración de la dirección de servicio en el fichero /etc/network/interfaces es completamente
prescindible al usar el agente de recursos IPaddr2. El único propósito es dejar constancia de ella
en el sistema fuera de la configuración de Heartbeat.
A continuación se edita cada uno de los ficheros de configuración de Heartbeat:
Empezaremos con el fichero ha.cf :
Se edita el fichero /etc/ha.d/ha.cf y se configura a su gusto, por ejemplo tal y como sigue:
Se edita el fichero /etc/ha.d/haresources y se añade la siguiente línea:
Esto indica a Heartbeat que el nodo maestro es pgsql1 y que debe gestionar dos recursos:
La dirección IP de servicio 192.168.1.2.
El servicio pgpool2.
El orden es muy importante. Primero se especifica el hostname del nodo que consideramos
maestro. Segundo, los recursos. El orden de los recursos también es crítico, pues Heartbeat los
iniciará en orden de izquierda a derecha, y los detendrá en orden de derecha a izquierda (y no
cd /etc/ha.d/cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/gunzip ha.cf.gz
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 30
initdead 30
udpport 694
bcast eth0 # Linux
auto_failback on
node pgsql1
node pgsql2
pgsql1 IPaddr2::192.168.1.2/24/eth1:0 pgpool
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 24/25
24
queremos que intente arrancar el servicio pgpool2 antes de disponer de la dirección IP en la cual
pgpool-II debe escuchar).
Heartbeat buscará el script de arranque del servicio que debe gestionar en /etc/init.d. Por lo que se
crea un enlace débil al script de arranque pgpool2 para que Heartbeat pueda encontrarlo:
De este modo pgpool2 no se arrancará al iniciarse el nodo, sino que será Heartbeat quien lo
arranque si detecta que así tiene que hacerlo, es decir, si decide que éste nodo debe asumir el
papel de maestro.
A continuación se edita el f ichero /etc/ha.d/authkeys :
Authkeys es obligatorio que sea accesible sólo por el usuario root y que tenga permisos 600. Los
demás, 664. Les damos los permisos adecuados a los ficheros:
Finalmente, se configura el logger daemon, específico de Heartbeat. Se toma el fichero de ejemplo
en /usr/share/doc/heartbeat :
Se edita el fichero /etc/logd.cf :
cd /etc/ha.d/resource.dln --symbolic /etc/init.d/pgpool
auth 1
1 sha1 8ec030984ba7dc6ba2dadb4ef2204b26
chown root:root /etc/ha.d/authkeys /etc/ha.d/haresources /etc/ha.d/ha.cfchmod 600 /etc/ha.d/authkeyschmod 664 /etc/ha.d/haresources /etc/ha.d/ha.cf
cp --archive /usr/share/doc/heartbeat/logd.cf /etc/
5/13/2018 Guía para la Instalación de un clúster de bases de datos - slidepdf.com
http://slidepdf.com/reader/full/guia-para-la-instalacion-de-un-cluster-de-bases-de-datos 25/25
25
Se repiten los anteriores pasos para el nodo pgsql2. Los ficheros de configuración serán idénticos
en ambos nodos, sin diferencia alguna, por lo que podemos copiar los ficheros de configuración
desde pgsql1 a pgsql2 sin problemas.
Ahora ya se está en disposición para iniciar la alta disponibilidad. Debido a que el logd puede estar
iniciado con una configuración por defecto, se debe de estar seguro, primero de que Heartbeat está
completamente parado en ambos nodos:
Es posible que debamos esperar a algún timeout . Ahora, con una diferencia máxima de 120
segundos (directiva initdead en /etc/ha.d/ha.cf ), se ejecutará el script de inicio, primero en pgsql1 y
después en pgsql2:
En el syslog se puede observar que se ha establecido la conexión con ambos servidores de
PostgreSQL y está esperando peticiones:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility daemon
entity logd
useapphbd no
sendqlen 256
recvqlen 256
/etc/init.d/heartbeat stop
/etc/init.d/heartbeat start
tail -n 500 /var/log/syslog | grep pgpool | ccze -Apgsql1 pgpool: LOG: pid 4594: pgpool successfully started