Se deben usar dos servidores como mínimo, la replicación por default es asíncrona
Una vez instalado el motor en ambas máquinas se procede a ingresar como usuario postgres y ejecutar la siguiente sentencia
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"
Esto permite que el motor pueda ser accedido desde cualquier dirección IP. También debemos configurar o descomentar los siguientes parámetros en el archivo postgresql.conf
wal_level = logical wal_log_hints = on max_wal_senders = 8 max_wal_size = 1GB hot_standby = on
Creamos el usuario de replicación desde psql
postgres=# CREATE USER repodb REPLICATION LOGIN ENCRYPTED PASSWORD '*8$#_.203#P05'; CREATE ROLE postgres=#
Editamos el archivo pg_hba.conf para autorizar el acceso desde la IP del servidor sclavo al usuario de replicación
host replication repodb 192.168.1.51/32 md5
Una vez realizamos estos pasos, procedemos a reniciar el servicio de postgresql
[root@pruebas data]# systemctl restart postgresql-10 [root@pruebas data]#
Verificamos que el servicio haya iniciado sin errores
[root@pruebas data]# systemctl status postgresql-10 ● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; enabled; vendor preset: disabled) Active: active (running) since mié 2023-11-22 18:16:04 -05; 1s ago Docs: https://www.postgresql.org/docs/10/static/ Process: 29719 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 29724 (postmaster) CGroup: /system.slice/postgresql-10.service ├─29724 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data/ ├─29726 postgres: logger process ├─29728 postgres: checkpointer process ├─29729 postgres: writer process ├─29730 postgres: wal writer process ├─29731 postgres: autovacuum launcher process ├─29732 postgres: stats collector process ├─29733 postgres: bgworker: logical replication launcher └─29734 postgres: odoo odoodb 192.168.1.3(49372) idle nov 22 18:16:04 pruebas systemd[1]: Stopped PostgreSQL 10 database server. nov 22 18:16:04 pruebas systemd[1]: Starting PostgreSQL 10 database server... nov 22 18:16:04 pruebas systemd[1]: Started PostgreSQL 10 database server. [root@crm-odoo-ppalprod-pg data]#
Todo lo que hemos realizado es desde el lado servidor.
Desde el lado del servidor esclavo lo que hacemos es detener el servicio de postgres y remover o cambiar el nombre del directorio de datos de postgresql.
[root@odoo-rep 10]# mv data/ dataOrig [root@odoo-rep 10]#
Luego de ello, ejecutamos el comando pg_basebackup para copiar todo el directorio del servidor maestro al esclavo
[root@odoo-rep 10]# pg_basebackup -h 192.168.1.19 -U repodoodb -X stream -v -R -W -D /var/lib/pgsql/10/data Password: pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed pg_basebackup: write-ahead log start point: A/71000028 on timeline 1 pg_basebackup: starting background WAL receiver pg_basebackup: write-ahead log end point: A/710022B0 pg_basebackup: waiting for background process to finish streaming ... pg_basebackup: base backup completed [root@odoo-rep 10]#
Una vez terminado, procedemos a cambiar el propietario del directorio data
[root@odoo-rep 10]# ls -ltr total 8 drwx------. 20 postgres postgres 4096 Nov 22 18:18 dataOrig drwx------. 20 root root 4096 Nov 22 18:23 data [root@odoo-rep 10]#
Como se ve en la ilustración anterior por defecto el propietario es root, cambiamos entonces la propiedad
[root@odoo-rep 10]# chown -R postgres:postgres data [root@odoo-rep 10]#
Iniciamos el servicio de postgres
[root@odoo-rep 10]# systemctl start postgresql.service [root@odoo-rep 10]#
Verificamos el estado del servicio
[root@odoo-rep 10]# systemctl status postgresql.service ● postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system/postgresql.service.d └─override.conf Active: active (running) since Wed 2023-11-22 18:24:30 -05; 4s ago Process: 29310 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS) Main PID: 29312 (postmaster) Tasks: 7 (limit: 24825) Memory: 31.3M CGroup: /system.slice/postgresql.service ├─29312 /usr/bin/postmaster -D /var/lib/pgsql/10/data ├─29314 postgres: logger process ├─29315 postgres: startup process recovering 000000010000000A00000072 ├─29316 postgres: checkpointer process ├─29317 postgres: writer process ├─29318 postgres: stats collector process └─29319 postgres: wal receiver process streaming A/720002B8 Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.246 -05 [29312] LOG: listening on IPv6 address "::1", port 5432 Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.246 -05 [29312] LOG: listening on IPv4 address "127.0.0.1", port 5432 Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.247 -05 [29312] LOG: could not bind IPv4 address "192.168.13.29": Cannot assign requested address Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.247 -05 [29312] HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.247 -05 [29312] WARNING: could not create listen socket for "192.168.13.29" Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.247 -05 [29312] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.249 -05 [29312] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.259 -05 [29312] LOG: redirecting log output to logging collector process Nov 22 18:24:30 odoo-rep postmaster[29312]: 2023-11-22 18:24:30.259 -05 [29312] HINT: Future log output will appear in directory "log". Nov 22 18:24:30 odoo-rep systemd[1]: Started PostgreSQL database server. [root@odoo-rep 10]#
Y listo, esto es todo.