POSTGRESQL ADMINISTRATION AND DEVELOPMENT
TEMA IV – ADMINISTRACION DE SERVIDOR
Instalación en Linux
En esta parte se ocupará Linux CentOS para realizar la instalación
Los repositorios por defecto de CentOS contienen paquetes de Postgres, por lo que podemos
instalarlos sin ningún problema usando el sistema de paquetes yum.
Ahora que nuestro software está instalado, tenemos que realizar algunos pasos antes de poder
utilizarlo.
Crear un nuevo clúster de base de datos PostgreSQL:
Instalación en Linux
Versión corta desde el código fuente
Instalación en Linux
Plataformas soportadas
Una plataforma se considera compatible con la comunidad de desarrollo de PostgreSQL si el
código contiene disposiciones para trabajar en esa plataforma y recientemente se ha verificado
que construye y pasa sus pruebas de regresión en esa plataforma. Actualmente, la mayoría de
las pruebas de compatibilidad de plataformas se realizan automáticamente por máquinas de
prueba en PostgreSQL Build Farm.
En general, se puede esperar que PostgreSQL funcione en estas arquitecturas de CPU: x86,
x86_64, IA64, PowerPC, PowerPC 64, S / 390, S / 390x, Sparc, Sparc 64, ARM, MIPS, MIPSEL,
M68K y PA-RISC . Existe compatibilidad de código para M32R y VAX, pero no se sabe que
estas arquitecturas se hayan probado recientemente. A menudo es posible construir sobre un
tipo de CPU no compatible configurando con --disable-spinlocks, pero el rendimiento será pobre.
Instalación en Linux
Se puede esperar que PostgreSQL funcione en estos sistemas operativos: Linux (todas las
distribuciones recientes), Windows (Win2000 SP4 y posterior), FreeBSD, OpenBSD, NetBSD,
OS X, AIX, HP / UX, Solaris y UnixWare. Otros sistemas similares a Unix también pueden
funcionar, pero actualmente no se están probando. En la mayoría de los casos, todas las
arquitecturas de CPU compatibles con un sistema operativo dado funcionarán. Utilice la Sección
16.7 de la documentación de PostgreSQL para revisar si su plataforma es compatible. En
general, una plataforma moderna compatible con Unix debería poder ejecutar PostgreSQL.
Las fuentes de PostgreSQL 9.6.15 se pueden obtener de la sección de descargas del sitio web:
[Link]
Instalación en Linux
Se puede esperar que PostgreSQL funcione en estos sistemas operativos: Linux (todas las
distribuciones recientes), Windows (Win2000 SP4 y posterior), FreeBSD, OpenBSD, NetBSD,
OS X, AIX, HP / UX, Solaris y UnixWare. Otros sistemas similares a Unix también pueden
funcionar, pero actualmente no se están probando. En la mayoría de los casos, todas las
arquitecturas de CPU compatibles con un sistema operativo dado funcionarán. Utilice la Sección
16.7 de la documentación de PostgreSQL para revisar si su plataforma es compatible. En
general, una plataforma moderna compatible con Unix debería poder ejecutar PostgreSQL.
Las fuentes de PostgreSQL 9.6.15 se pueden obtener de la sección de descargas del sitio web:
[Link]
Inicio del servidor y operaciones
Cuenta de usuario de PostgreSQL
Al igual que con cualquier demonio de servidor que sea accesible para el mundo exterior, es
aconsejable ejecutar PostgreSQL bajo una cuenta de usuario separada. Esta cuenta de usuario
solo debe ser propietaria de los datos administrados por el servidor y no debe compartirse con
otros demonios. (Por ejemplo, usar el usuario nobody es una mala idea). No es aconsejable
instalar ejecutables propiedad de este usuario porque los sistemas comprometidos podrían
modificar sus propios archivos binarios.
Para agregar una cuenta de usuario de Unix a su sistema, busque un comando useradd o
adduser. El nombre de usuario PostgreSQL se usa con frecuencia, pero puede usar otro nombre
si lo desea.
Configuración de servidor
Todos los nombres de parámetros distinguen entre mayúsculas y minúsculas. Cada parámetro
toma un valor de uno de cinco tipos: booleano, cadena, entero, coma flotante o enumerado
(enumeración). El tipo determina la sintaxis para configurar el parámetro:
Booleano: los valores se pueden escribir como activado, desactivado, verdadero, falso, sí, no, 1,
0 (sin distinción entre mayúsculas y minúsculas) o cualquier prefijo inequívoco de uno de estos.
Cadena: en general, encierre el valor entre comillas simples, duplicando las comillas simples
dentro del valor. Sin embargo, las citas generalmente se pueden omitir si el valor es un número
o identificador simple.
Configuración de servidor
Numérico (entero y coma flotante): solo se permite un punto decimal para los parámetros de
coma flotante. No use separadores de miles. No se requieren cotizaciones.
Numérico con unidad: algunos parámetros numéricos tienen una unidad implícita, porque
describen cantidades de memoria o tiempo. La unidad puede ser kilobytes, bloques (típicamente
ocho kilobytes), milisegundos, segundos o minutos. Un valor numérico sin adornos para una de
estas configuraciones utilizará la unidad predeterminada de la configuración, que se puede
aprender de pg_settings.unit. Por conveniencia, los ajustes se pueden dar con una unidad
especificada explícitamente, por ejemplo '120 ms' para un valor de tiempo, y se convertirán a la
unidad real del parámetro. Tenga en cuenta que el valor debe escribirse como una cadena (con
comillas) para usar esta función. El nombre de la unidad distingue entre mayúsculas y
minúsculas, y puede haber un espacio en blanco entre el valor numérico y la unidad.
Configuración de servidor
Las unidades de memoria válidas son kB (kilobytes), MB (megabytes), GB (gigabytes) y TB
(terabytes). El multiplicador para las unidades de memoria es 1024, no 1000.
Las unidades de tiempo válidas son ms (milisegundos), s (segundos), min (minutos), h (horas)
yd (días).
Enumerado: los parámetros de tipo enumerado se escriben de la misma manera que los
parámetros de cadena, pero están restringidos para tener uno de un conjunto limitado de
valores. Los valores permitidos para dicho parámetro se pueden encontrar en
pg_settings.enumvals. Los valores de los parámetros de enumeración no distinguen entre
mayúsculas y minúsculas.
Configuración de servidor
La forma más fundamental de establecer estos parámetros es editar el archivo [Link],
que normalmente se mantiene en el directorio de datos. Se instala una copia predeterminada
cuando se inicializa el directorio del clúster de la base de datos. Un ejemplo de cómo se vería
este archivo es:
Además del archivo [Link] ya mencionado, PostgreSQL usa otros dos archivos de
configuración editados manualmente, que controlan la autenticación del cliente. De manera
predeterminada, los tres archivos de configuración se almacenan en el directorio de datos del
clúster de la base de datos.
Configuración de servidor
data_directory (string)
Especifica el directorio a utilizar para el almacenamiento de datos. Este parámetro solo se
puede establecer al inicio del servidor.
config_file (string)
Especifica el archivo de configuración del servidor principal (habitualmente llamado
[Link]). Este parámetro solo se puede establecer en la línea de comando postgres.
hba_file (string)
Especifica el archivo de configuración para la autenticación basada en host (habitualmente
llamada pg_hba.conf). Este parámetro solo se puede establecer al inicio del servidor.
Configuración de servidor
ident_file (string)
Especifica el archivo de configuración para la asignación de nombre de usuario (normalmente
llamado pg_ident.conf). Este parámetro solo se puede establecer al inicio del servidor.
external_pid_file (string)
Especifica el nombre de un archivo de ID de proceso (PID) adicional que el servidor debe crear
para que lo utilicen los programas de administración del servidor. Este parámetro solo se puede
establecer al inicio del servidor.
Autenticación de cliente
Cuando una aplicación cliente se conecta al servidor de la base de datos, especifica qué
nombre de usuario de la base de datos PostgreSQL desea conectar, de la misma manera que
uno se conecta a una computadora Unix como un usuario en particular.
Dentro del entorno SQL, el nombre de usuario de la base de datos activa determina los
privilegios de acceso a los objetos de la base de datos; por lo tanto, es esencial restringir qué
usuarios de la base de datos pueden conectarse.
Autenticación de cliente
La autenticación es el proceso por el cual el servidor de la base de datos establece la identidad
del cliente y, por extensión, determina si la aplicación cliente (o el usuario que ejecuta la
aplicación cliente) puede conectarse con el nombre de usuario de la base de datos que se
solicitó.
PostgreSQL ofrece varios métodos diferentes de autenticación de clientes. El método utilizado
para autenticar una conexión de cliente particular se puede seleccionar en función de la
dirección de host (cliente), la base de datos y el usuario.
Autenticación de cliente
Los nombres de usuario de la base de datos PostgreSQL están separados lógicamente de los
nombres de usuario del sistema operativo en el que se ejecuta el servidor. Si todos los usuarios
de un servidor en particular también tienen cuentas en la máquina del servidor, tiene sentido
asignar nombres de usuario de base de datos que coincidan con los nombres de usuario de su
sistema operativo. Sin embargo, un servidor que acepta conexiones remotas puede tener
muchos usuarios de bases de datos que no tienen una cuenta del sistema operativo local, y en
tales casos no es necesario que haya una conexión entre los nombres de usuario de la base de
datos y los nombres de usuario del sistema operativo.
Autenticación de cliente
Pg_hba.conf
La autenticación del cliente se controla mediante un archivo de configuración, que
tradicionalmente se denomina pg_hba.conf y se almacena en el directorio de datos del clúster
de la base de datos. (HBA significa autenticación basada en host). Un archivo pg_hba.conf
predeterminado se instala cuando initdb inicializa el directorio de datos.
El formato general del archivo pg_hba.conf es un conjunto de registros, uno por línea. Las líneas
en blanco se ignoran, al igual que cualquier texto después del carácter # comentario. Los
registros no pueden continuar a través de las líneas. Un registro está compuesto por varios
campos que están separados por espacios y / o pestañas.
Autenticación de cliente
Pg_hba.conf
Cada registro especifica un tipo de conexión, un rango de dirección IP del cliente (si es relevante
para el tipo de conexión), un nombre de base de datos, un nombre de usuario y el método de
autenticación que se utilizará para las conexiones que coincidan con estos parámetros. El
primer registro con un tipo de conexión, dirección de cliente, base de datos solicitada y nombre
de usuario coincidentes se utiliza para realizar la autenticación. No hay "caída" o "copia de
seguridad": si se elige un registro y la autenticación falla, no se consideran los registros
posteriores. Si ningún registro coincide, se deniega el acceso.
Autenticación de cliente
Autenticación de cliente
Aunque las condiciones de error posibles en el lado del cliente son bastante variadas y
dependen de la aplicación, algunas de ellas pueden estar directamente relacionadas con la
forma en que se inició el servidor. Las condiciones distintas a las que se muestran a
continuación deben documentarse con la aplicación cliente respectiva.
Este es el error genérico "No se puede encontrar un servidor para comunicar". Parece lo anterior
cuando se intenta la comunicación TCP / IP. Un error común es olvidar configurar el servidor
para permitir conexiones TCP / IP.
Autenticación de cliente
Alternativamente, obtendrá esto cuando intente la comunicación de socket de dominio Unix a un
servidor local:
La última línea es útil para verificar que el cliente está intentando conectarse al lugar correcto. Si
de hecho no hay ningún servidor ejecutándose allí, el mensaje de error del núcleo normalmente
será Conexión rechazada o Ningún archivo o directorio, como se ilustra. (Es importante darse
cuenta de que Connection rechazó en este contexto no significa que el servidor recibió su
solicitud de conexión y la rechazó. Ese caso generará un mensaje diferente) Otros mensajes de
error como Connection timed out indican problemas más fundamentales, como la falta de
conectividad de red.
TEMA V – INTERFACES DE CLIENTE
Autenticación de cliente
Efectuar el cambio: (master)
[Link] localhost
[Link] postgreSQL01
[Link] postgreSQL02
Autenticación de cliente
Efectuar el cambio: (esclavo)
[Link] localhost
[Link] postgreSQL02
[Link] postgreSQL01
Servidor maestro: Editar archivo [Link]
Autenticación de cliente
listen_addresses = '*'
port = 5432
wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i "%p" /opt/archive/"%f" </dev/null'
max_wal_senders = 5
wal_keep_segments = 30
Autenticación de cliente
Crear carpeta archive: (Esto en caso de configurar el archive_command para copia de
WAL)
mkdir -p /opt/archive
Cambiar el dueño de la carpeta: (Esto en caso de configurar el archive_command para
copia de WAL)
chown postgres:postgres /opt/archive
Crear carpeta para WAL:
mkdir -p /opt/WAL
Mover el contenido de la carpeta pg_xlog a la nueva carpeta creada:
mv /var/lib/pgsql/data/pg_xlog /opt/WAL
Autenticación de cliente
Cambiar el dueño de la carpeta:
chown postgres:postgres -R /opt/WAL
Efectuar enlace simbólico:
ln -s /opt/WAL/pg_xlog/ /var/lib/pgsql/data/pg_xlog
Ajustar los permisos de acceso para usuario replicar, editar archivo de configuración de
conexión:
/var/lib/pgsql/data/pg_hba.conf
Autenticación de cliente
Efectuar los siguientes cambios:
# TYPE DATABASE USER ADDRESS METHOD
host replication replicar [Link]/32 md5
host replication replicar [Link]/32 md5
Reniciar servicio PostgreSQL
psql -Upostgres -h127.0.0.1 -p5432 -c "CREATE USER replicar LOGIN CONNECTION
LIMIT 1 ENCRYPTED PASSWORD 'CONTRASEÑA’;”
ALTER DATABASE Pedidos OWNER TO replicar;
Autenticación de cliente
select pg_start_backup('initial_backup’);
Efectuar copia de la información desde el servidor “maestro” al servidor “esclavo”:
rsync -cva --inplace --exclude=*pg_xlog* [Link] /var/lib/pgsql/data/
[Link]:/var/lib/pgsql/data/
Detener modo backup postgresql servidor maestro:
select pg_stop_backup();
Autenticación de cliente
Editar archivo de configuración de conexión (esclavo):
/var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
host replication replicar [Link]/32 md5
host replication replicar [Link]/32 md5
Autenticación de cliente
Editar archivo de configuración (esclavo):
/var/lib/pgsql/data/[Link]
listen_addresses = '*'
port = 5432
hot_standby = on
#wal_level = hot_standby
#archive_mode = on
#archive_command = 'cp -i "%p" /opt/archive/"%f" </dev/null’
#max_wal_senders = 5
#wal_keep_segments = 30
Autenticación de cliente
Crear archivo recovery:
gedit /var/lib/pgsql/data/[Link]
standby_mode = 'on'
primary_conninfo = 'host=[Link] port=5432 user=replicar password=contraseña'
trigger_file = '/tmp/trigger_failover'
restore_command = 'cp /opt/archive/%f "%p"'
archive_cleanup_command = 'pg_archivecleanup -d /opt/archive %r 2>>/var/log/postgresql/[Link]'
Autenticación de cliente
Cambiar el dueño de la carpeta [Link]:
chown postgres:postgres /var/lib/pgsql/data/[Link]
Crear carpeta archive:
mkdir -p /opt/archive
Cambiar el dueño de la carpeta creada:
chown postgres:postgres /opt/archive
Reiniciar el Servicio
Autenticación de cliente
Comprobar la transmisión de la replicación: (servidor Maestro)
SELECT * FROM pg_stat_replication;
SELECT sync_state FROM pg_stat_replication;
Comprobar la ubicación del último registro de transacciones que fue transmitido por el esclavo y también
se escribe en el servidor esclavo: (servidor Esclavo)
SELECT pg_last_xlog_receive_location ();
Autenticación de cliente
Activar automáticamente el servidor esclavo como nuevo servidor maestro en caso de fallo del servidor
maestro en uso:
/# touch /tmp/trigger_failover
pg_basebackup -h [Link] -D /var/lib/postgresql/data -U replicar -v -P --xlog-method=stream
Monitoreo
ps auxww | grep ^postgres
ps u –C postgres –C postmaster
pg_stat_activity;
pg_stat_database;
pg_stat_all_tables;
pg_stat_user_tables
pg_stat_get_backend_idset()
pg_backend_pid()
pg_stat_reset()
SELECT relname, relpages FROM pg_class