Replicación multi de PostgreSQL Slavic

De ES Ikoula wiki
Revisión del 11:02 6 oct 2021 de Cbrochot1072d (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Jump to navigation Jump to search

es:Replicación multi de PostgreSQL Slavic en:Replication PostgreSQL Slavic multi he:שכפול מרובה PostgreSQL סלאבית ro:Replicare PostgreSQL slave multi ru:Multi PostgreSQL славянских репликации pl:Replikacja wielu słowiańskich PostgreSQL ja:レプリケーション PostgreSQL スラブ マルチ ar:النسخ المتماثل السلافية كيو متعدد zh:复制 PostgreSQL 斯拉夫语多 de:Replikation PostgreSQL slawischen multi nl:Replicatie PostgreSQL Slavische multi it:Replica PostgreSQL slavo multi pt:Replicação PostgreSQL eslavo multi fr:Replication PostgreSQL multi slaves

Este artículo ha sido traducido por un software de traducción automática. Usted puede ver el origen artículo aquí.

Introducción

Esta página trata de la aplicación de un PostgreSQL asincrónica streaming réplica con un maestro y dos esclavos. Los eslavos se configurarán como recurso seguro caliente, es decir que será posible ejecutar consultas (sólo lectura ) en éstos.


Contexto de esta colocación :


Tenemos 3 Servidores Debian 8 (última actualización: ) :

Postgres 01 (10.1.1.75) : será nuestro maestro

Postgres02 (10.1.1.90) : será un esclavo

Postgres03 (10.1.1.199) : será un segundo esclavo


Especifica los comandos será actuar como root cuando son precedidos por "#" y como usuario del sistema Postgres cuando son precedidos por "$".

Instalación de PostgreSQL y la configuración de tres servidores

Todos los comandos en esta parte deben realizarse en cada uno de los servidores.

Como primer paso, se recomienda tener un archivo /etc/hosts con los partidos de cada servidor, así (adaptando con las direcciones ip y nombres de sus propios servidores ) :

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       Postgres 01
10.1.1.90       Postgres 02
10.1.1.199      Postgres 03


Añadir el depósito APT PostgreSQL :

# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list


Importamos la clave pública de este depósito :

# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key ACCC4CF8 from hkp server pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ACCC4CF8: public key "PostgreSQL Debian Repository" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK


Actualiza la caché de APT para tomar en cuenta el depósito :

# apt-get update


Instalar paquete postgresql (instalar la última versión estable es la 9.5 en el momento donde estas líneas se escriben ) :

# apt-get install postgresql


Definimos una contraseña (de su elección pero seguro ) y genera un par de ssh claves (sin contraseña ) para el usuario postgres del sistema :

# passwd postgres
# su - postgres
$ ssh-keygen


Copiamos el usuario postgres de y entre cada servidor público ssh key :


Desde el primer servidor (postgres01 en nuestro caso ) hacia la segunda (postgres02 nos ) y troisiseme (postgres03) :

root@postgres01:~# su - postgres
postgres@postgres01:~$ ssh-copy-id postgres02
postgres@postgres01:~$ ssh-copy-id postgres03


Desde el segundo al primero y tercer servidor :

root@postgres02:~# su - postgres
postgres@postgres02:~$ ssh-copy-id postgres01
postgres@postgres02:~$ ssh-copy-id postgres03


Del tercer al primer y segundo servidor :

root@postgres03:~# su - postgres
postgres@postgres03:~$ ssh-copy-id postgres01
postgres@postgres03:~$ ssh-copy-id postgres02

La configuración de maestro

Sólo en el maestro (postgres01 en nuestro caso ) :


Crea el papel /usuario de replicación :

# su - postgres
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"

Nota : Define un límite de conexión de 2 porque tenemos 2 Eslava


Editar el archivo de configuración principal de postgresql /etc/postgresql/9.5/main/postgresql.conf para configurar las siguientes directivas :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on

Nota : Nos permiten archivar en nuestro segundo servidor (Personaliza tu dirección de ip del servidor ) para aún más precauciones. También definimos los parámetros hot_standby, bien que no hizo caso a un maestro, donde debe ser degradado a esclavos en el futuro.


Ahora editar el archivo de autenticación de postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar el permiso de nuestro usuario de replicación para conectar de la Eslava o la siguiente línea al final del archivo :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Por favor adapte esta línea según el nombre de su usuario de red y replicación (o direcciones ip respectivas ) de su Slavic


Reinicia el servicio de postgresql para tener en cuenta nuestra configuración (en raíz ) :

# systemctl restart postgresql


Esto asegura que el servicio se inicia correctamente :

root@postgres01:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:06:28 CEST; 22s ago
  Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 77056 (code=exited, status=0/SUCCESS)


root@postgres01:~# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres  77038  0.0  4.4 227300 21836 ?        S    12:06   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres  77040  0.0  0.8 227300  4160 ?        Ss   12:06   0:00 postgres: checkpointer process
postgres  77041  0.0  1.0 227300  4968 ?        Ss   12:06   0:00 postgres: writer process
postgres  77042  0.0  1.7 227300  8776 ?        Ss   12:06   0:00 postgres: wal writer process
postgres  77043  0.0  1.3 227728  6708 ?        Ss   12:06   0:00 postgres: autovacuum launcher process
postgres  77044  0.0  0.6  82244  3392 ?        Ss   12:06   0:00 postgres: archiver process
postgres  77045  0.0  0.8  82244  4244 ?        Ss   12:06   0:00 postgres: stats collector process

Configuración de eslavos

En el primer esclavo

Empezamos por detener el servicio postgresql :

# systemctl stop postgresql


Editar el archivo de configuración principal de postgresql /etc/postgresql/9.5/main/postgresql.conf para configurar las mismas directrices como el maestro, por adaptación a la ip del primer esclavo por el esclavo segundo en el comando rsync para archivar o :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on


Ahora editar el archivo de autenticación de postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar el permiso de nuestro usuario de replicación para conectar desde otros servidores de nuestras (Esto se utilizará cuando este esclavo esperado ascendido maestro ) :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Nota : Con esta configuración similar a nuestro maestro, esto permitirá promover fácilmente este esclavo como maestro en caso de necesidad.


Para las operaciones a continuación, inicie sesión como usuario postgres del sistema :

# su – postgres


Creamos el directorio de destino para el wal del archivo maestro :

$ mkdir /var/lib/postgresql/wal_archive


Elimina el directorio de datos de postgresql :

$ rm -rf /var/lib/postgresql/9.5/main


Hace la copia de seguridad base (personalizar la dirección ip de su maestro y el nombre de tu usuario de replicación ), la contraseña de tu usuario de replicación se le pedirá :

$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog


Configura la replicación mediante la creación del archivo /var/lib/postgresql/9.5/main/recovery.conf con los siguientes parámetros :

standby_mode = on
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'

Nota : El gatillo es el archivo que creamos cuando queremos que su esclavo se detiene la replicación y comenzará a aceptar las entradas, si desea como maestro. Antes de promover a un esclavo en caso de caída de su amo, asegúrese de que el maestro inicial no subirá para evitar la corrupción.


Volvemos a raíz e inicia el servicio :

# systemctl start postgresql


Esto asegura que el servicio iniciado correctamente :

# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:53:42 CEST; 1min 6s ago
  Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 8894 (code=exited, status=0/SUCCESS)


# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres   8878  0.0  4.4 227308 21892 ?        S    12:53   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres   8879  0.0  1.1 227376  5700 ?        Ss   12:53   0:00 postgres: startup process   recovering 00000001000000000000000
postgres   8880  0.0  0.8 227308  4140 ?        Ss   12:53   0:00 postgres: checkpointer process
postgres   8881  0.0  1.0 227308  5236 ?        Ss   12:53   0:00 postgres: writer process
postgres   8882  0.0  0.6  82252  3316 ?        Ss   12:53   0:00 postgres: stats collector process
postgres   8883  0.0  1.7 238064  8520 ?        Ss   12:53   0:00 postgres: wal receiver process   streaming 0/30003E0


Si se conecta a nuestro amo, ya podemos comprobar la replicación entre el amo y el esclavo primer es funcional :

Se conecta a nuestro maestro y se conecta en el usuario postgres del sistema :

# su - postgres


Luego conectar a postgresql :

$ psql


Permite la visualización extendida y comprobamos nuestra replicación :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_CRElocation    | 0/30004C0
write_location   | 0/30004C0
flush_location   | 0/30004C0
replay_location  | 0/30004C0
sync_priority    | 0
sync_state       | async

La replicación asincrónica, streaming con nuestro primer esclavo está bien hecha. Esta etapa tiene un maestro de replicación /Clásico esclavo (un solo esclavo transmisión asincrónica )

En el segundo esclavo

Que lo mismo lo que se hizo en el primer esclavo obviamente adaptando su nombre de host en el archivo recovery.conf y ip dirección en el comando de archivo en el archivo principal de configuración si desea activar archivado en este segundo esclavo de Redid.

Verificación y pruebas de nuestro multi master replicación Slavic

Se conecta al maestro y se registra en el usuario postgres :

# su – postgres

Luego conectar a postgresql :

$ psql


Permite la visualización extendida y comprobamos nuestra replicación :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async
-[ RECORD 2 ]----+------------------------------
pid              | 82725
usesysid         | 16384
usename          | repuser
application_name | postgres03
client_addr      | 10.1.1.199
client_hostname  |
client_port      | 51754
backend_start    | 2016-06-02 14:31:43.759683+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async

Así pues nuestra 2 replicación con nuestros dos servidores eslavos (postgres02 y postgres 03).


Sigue conectado a postgresql en el maestro, genera datos de unas base (ex : checkrep ) :

postgres=# CREATE DATABASE checkrep;


Comprueba que la base de datos se replica bien en nuestro 2 Eslava :

root@postgres02:~# su - postgres
postgres@postgres02:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)


root@postgres03:~# su - postgres
postgres@postgres03:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

La base de datos que creamos en nuestro maestro es tan bien automáticamente replicados en nuestros dos eslavos.


Para eliminar, desde el maestro :

postgres=# DROP DATABASE checkrep;



No puedes publicar comentarios.