GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar la replicación maestro-esclavo para PostgreSQL 9.6 en Ubuntu 16.04

PostgreSQL o Postgres es un sistema de gestión de base de datos relacional de objetos (ORDBMS) de código abierto con más de 15 años de desarrollo activo. Es un servidor de base de datos poderoso y puede manejar grandes cargas de trabajo. PostgreSQL se puede utilizar en servidores Linux, Unix, BSD y Windows.

La replicación de la base de datos maestro/esclavo es un proceso de copia (sincronización) de datos de una base de datos en un servidor (el maestro) a una base de datos en otro servidor (los esclavos). El principal beneficio de este proceso es distribuir bases de datos a varias máquinas, de modo que cuando el servidor maestro tiene un problema, hay una máquina de respaldo con los mismos datos disponibles para manejar las solicitudes sin interrupción.

PostgreSQL proporciona varias formas de replicar una base de datos. Se puede utilizar con fines de copia de seguridad y para proporcionar un servidor de base de datos de alta disponibilidad. En este tutorial, le mostraremos cómo instalar y configurar PostgreSQL 9.6 Master-Slave Replication en el servidor Ubuntu 16.04. Usaremos el modo de espera activo, y es un muy buen punto de partida para aprender PostgreSQL en profundidad.

Qué haremos:

  1. Instalar PostgreSQL 9.6.
  2. Configurar el cortafuegos UFW.
  3. Configurar servidor MAESTRO.
  4. Configurar servidor ESCLAVO.
  5. Copiar datos de PostgreSQL de MAESTRO a ESCLAVO.
  6. Pruebas.

Requisito previo:

  • 1 servidor Ubuntu 16.04
    • MAESTRO - Permitir lectura y escritura - IP:10.0.15.10
  • 1 servidor Ubuntu 16.04
    • ESCLAVO - Solo lectura - IP:10.0.15.11
  • Privilegios de raíz

Paso 1:instalar PostgreSQL 9.6

En este tutorial, instalaremos la última versión de PostgreSQL 9.6. En el repositorio oficial de Ubuntu, solo proporcionan PostgreSQL 9.5, por lo que debemos instalar la última versión directamente desde el repositorio de PostgreSQL.

Agregue el repositorio postgreSQL 9.6 al directorio sources.list.d.

echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list

E importe la clave de firma de PostgreSQL al sistema.

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Ahora actualice el repositorio del sistema con el comando apt.

apt-get update

A continuación, instale el paquete PosgreSQL 9.6 con el siguiente comando apt.

apt-get install -y postgresql-9.6 postgresql-contrib-9.6

Si la instalación se ha completado, agréguela para que se inicie automáticamente en el momento del arranque.

systemctl enable postgresql

De forma predeterminada, PostgreSQL se ejecuta en la dirección IP localhost (127.0.0.1) con el puerto 5432 en Ubuntu, verifíquelo con el comando netstat.

netstat -plntu

PostgreSQL 9.6 se está ejecutando en el sistema. En el siguiente paso, tenemos que configurar una contraseña para el usuario postgres.

Desde la cuenta raíz, inicie sesión en el usuario de postgres con el comando su y, a continuación, acceda a la terminal frontal de postgres psql.

su - postgres
psql

Cambie la contraseña para el usuario de postgres y verifique la información de conexión con las consultas de postgres a continuación.

\password postgres
\conninfo

Se instaló PostgreSQL 9.6 en el sistema, se ejecuta sin errores y se actualizó la contraseña para el usuario de Postgres.

Paso 2:configurar el cortafuegos UFW

UFW o Uncomplicated Firewall es una aplicación para administrar el firewall basado en iptables en Ubuntu. UFW es la herramienta de configuración de firewall predeterminada para Ubuntu Linux y proporciona una manera fácil de configurar el firewall.

Podemos instalar ufw desde el repositorio principal de Ubuntu con el comando apt.

apt-get install -y ufw

Agregue nuevos servicios al firewall UFW:agregue servicios SSH y PostgreSQL con los comandos a continuación.

ufw allow ssh
ufw allow postgresql

Habilite el firewall UFW y verifique el estado.

ufw enable
ufw status

Se instaló el firewall UFW y se agregó el servicio PostgreSQL.

NOTA:

Ejecute los pasos 1 y 2 en el servidor MAESTRO y ESCLAVO.

Paso 3:configurar el servidor MAESTRO de PostgreSQL

El servidor maestro tiene la dirección IP 10.0.15.10 y el servicio de postgres se ejecutará bajo esa IP con el puerto predeterminado. El servidor maestro tendrá permiso para LEER y ESCRIBIR en la base de datos y realizar la replicación de transmisión en el servidor esclavo.

Vaya al directorio de configuración de postgres '/etc/postgresql/9.6/main ' y edite el postgresql.conf archivo con vim.

cd /etc/postgresql/9.6/main/
vim postgresql.conf

Descomente la línea 'listen_addresses' y cambie el valor a la dirección IP del servidor maestro '10.0.15.10 '.

listen_addresses = '10.0.15.10'

Descomente la línea 'wal_level' y cambie el valor a 'hot_standby '.

wal_level = hot_standby

Para el nivel de sincronización, usaremos la sincronización local. Descomente y cambie la línea de valor como se muestra a continuación.

synchronous_commit = local

Habilite el modo de archivo y cambie la opción archive_command al comando 'cp %p /var/lib/postgresql/9.6/main/archive/%f'.

archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'

Para la configuración de 'Replicación', en este tutorial usamos solo 2 servidores, maestro y esclavo, descomente el 'wal_sender ' línea y cambie el valor a 2 , y para los 'wal_keep_segments ' el valor es 10 .

max_wal_senders = 2
wal_keep_segments = 10

Para el nombre de la aplicación, elimine el comentario de la línea 'synchronous_standby_names' y cambie el valor al nombre 'pgslave001 '.

synchronous_standby_names = 'pgslave001'

Guarde el archivo y salga del editor.

En el archivo postgresql.conf, el modo de archivo está habilitado, por lo que debemos crear un nuevo directorio para el archivo. Cree un nuevo directorio de archivo, cambie el permiso y cambie el propietario al usuario de postgres.

mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/

A continuación, edite el archivo pg_hba.conf para la configuración de autenticación.

vim pg_hba.conf

Pegue la configuración a continuación al final de la línea.

# Localhost
host    replication     replica          127.0.0.1/32            md5

# PostgreSQL Master IP address
host    replication     replica          10.0.15.10/32            md5

# PostgreSQL SLave IP address
host    replication     replica          10.0.15.11/32            md5

Guarde y salga, luego reinicie PostgreSQL.

systemctl restart postgresql

PostgreSQL se ejecuta con la dirección IP 10.0.15.10, verifíquelo con el comando netstat.

netstat -plntu

A continuación, cree un nuevo usuario para la replicación. Crearemos un nuevo usuario llamado 'réplica ' con contraseña '[email protected] '. ¡Elija una contraseña segura aquí para su configuración! Inicie sesión en el usuario de postgres y acceda a la terminal frontal de postgres psql.

su - postgres
psql

Crear nueva 'réplica ' usuario con contraseña '[email protected] ' con la consulta postgres a continuación.

CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '[email protected]';

Ahora marque el nuevo usuario con 'du ' consulta a continuación, y verás el usuario réplica con privilegios de replicación.

\du

La configuración del servidor MASTER se ha completado.

Paso 4:configurar el servidor ESCLAVO

El servidor ESCLAVO tiene la dirección IP 10.0.15.11. Y este servidor solo tendrá un permiso de LECTURA para la base de datos. El servidor de la base de datos de Postgres se ejecutará con la dirección IP del servidor, no con una IP de host local.

Detenga el servicio postgres en el servidor esclavo con el siguiente comando systemctl.

systemctl stop postgresql

Vaya al directorio de configuración de Postgres '/etc/postgresql/9.6/main ', luego edite el archivo de configuración 'postgresql.conf '.

cd /etc/postgresql/9.6/main/
vim postgresql.conf

Descomente la línea listen_addresses y reemplace el valor con la dirección IP del servidor esclavo 10.0.15.11 .

listen_addresses = '10.0.15.11'

Descomente la línea 'wal_level' y cambie el valor a 'hot_standby '.

wal_level = hot_standby

Para el nivel de sincronización, elimine el comentario de la línea synchronous_commit y cambie el valor como se muestra a continuación.

synchronous_commit = local

Para la configuración de replicación, elimine el comentario de la línea max_wal_senders y reemplace el valor con '2 ' porque solo usa 2 servidores. Y para wal_keep_segments, cambie el valor a '10 '.

max_wal_senders = 2
wal_keep_segments = 10

Quite el comentario de la línea 'synchronous_standby_names' para el nombre de la aplicación y cambie el valor al nombre 'pgslave001 '.

synchronous_standby_names = 'pgslave001'

Habilitar hot_standby para el servidor esclavo descomentando la siguiente línea y cambiando el valor a 'on '.

hot_standby = on

Guarde el archivo y salga del editor.

Paso 5 - Copie los datos de PostgreSQL del MAESTRO al ESCLAVO

A continuación, queremos reemplazar el directorio principal de postgres en el 'ESCLAVO ' servidor con el directorio de datos principal de 'MASTER ' servidor.

Inicie sesión en el servidor ESCLAVO y acceda al usuario de postgres.

su - postgres

Vaya al directorio de datos de postgres 'main ' y haga una copia de seguridad cambiando el nombre del directorio.

cd 9.6/
mv main main-bekup

Crear nuevo 'principal ' directorio como 'postgres ' usuario y asegúrese de tener un permiso como el directorio main-bekup.

mkdir main/
chmod 700 main/

A continuación, copie el directorio principal del servidor MAESTRO al servidor ESCLAVO con pg_basebackup comando, usaremos el usuario réplica para realizar esta copia de datos.

pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:

Cuando se complete la transferencia de datos, vaya al directorio de datos principal y cree un nuevo recovery.conf archivo.

cd /var/lib/postgresql/9.6/main/
vim recovery.conf

Pegue la configuración a continuación:

standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

Guarde y salga, luego cambie los permisos del archivo a 600 con chmod.

chmod 600 recovery.conf

Ahora inicie PostgreSQL 9.6 en el servidor ESCLAVO y asegúrese de que el servicio de postgres se esté ejecutando en la dirección IP 10.0.15.11 con netstat.

systemctl start postgresql
netstat -plntu

La transferencia de datos y la configuración para el servidor ESCLAVO se han completado.

Paso 6 - Prueba

Para la prueba, verificaremos el estado de replicación de PostgreSQL 9.6 e intentaremos crear una nueva tabla en el servidor MAESTRO, luego verificaremos la replicación verificando todos los datos del servidor ESCLAVO.

Inicie sesión en el servidor MASTER e inicie sesión en el usuario de postgres.

su - postgres

Ejecute los comandos psql a continuación para ver el estado de la replicación.

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

Obtendrá los resultados a continuación.

A continuación, intente crear una nueva tabla desde el servidor MAESTRO. Inicie sesión con el usuario de postgres en el servidor maestro.

su - postgres
psql

Y cree una nueva tabla llamada 'replica_test ' e inserte datos en la tabla ejecutando las consultas de postgres a continuación.

CREATE TABLE replica_test (hakase varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');

A continuación, inicie sesión con el usuario de postgres en el servidor ESCLAVO y acceda a la terminal psql.

su - postgres
psql

Verifique los datos en la 'replica_test ' tabla con la consulta de postgres a continuación.

select * from replica_test;

Y obtendrá los mismos datos que en el MAESTRO, se replican desde el servidor MAESTRO al servidor ESCLAVO.

Prueba adicional:

Pruebe a escribir en el servidor ESCLAVO con la consulta a continuación.

INSERT INTO replica_test VALUES ('this is SLAVE');

Y recibirá un mensaje de error sobre 'No se puede ejecutar INSERT ' consulta en el servidor ESCLAVO.

La instalación y configuración de PostgreSQL 9.6 con Master-Slave Replication en Ubuntu 16.04 Xenial Xerus ha sido exitosa.


Ubuntu
  1. Cómo instalar PostgreSQL en Ubuntu 18.04

  2. Instalación de Ubuntu 20.04 PostgreSQL

  3. Instalación de Ubuntu 22.04 PostgreSQL

  4. Cómo instalar un servidor PostgreSQL en Ubuntu 18.04

  5. Servidor Ubuntu para tontos

Cómo instalar Plex Media Server en Ubuntu 20.04 LTS Server/Desktop

Cómo instalar PostgreSQL en Ubuntu 16.04

Cómo configurar la replicación de transmisión de PostgreSQL 12 en CentOS 8

Cómo instalar OwnCloud en Ubuntu Linux:un tutorial para novatos

¿Cómo configurar la replicación maestro-esclavo de MySQL en RHEL 7?

Instale PostgreSQL en un servidor Ubuntu para configuraciones de seguridad