Diferencia entre revisiones de «PostgreSQL replicación esclavos multi»

De ES Ikoula wiki
Jump to navigation Jump to search
 
(No se muestran 33 ediciones intermedias de 3 usuarios)
Línea 1: Línea 1:
 +
<span data-link_translate_es_title="PostgreSQL replicación esclavos multi"  data-link_translate_es_url="PostgreSQL replicación esclavos multi"></span>[[:es:PostgreSQL replicación esclavos multi]][[es:PostgreSQL replicación esclavos multi]]
 +
<span data-link_translate_en_title="PostgreSQL replication slaves multi"  data-link_translate_en_url="PostgreSQL+replication+slaves+multi"></span>[[:en:PostgreSQL replication slaves multi]][[en:PostgreSQL replication slaves multi]]
 +
<span data-link_translate_he_title="PostgreSQL שכפול עבדים רב"  data-link_translate_he_url="PostgreSQL+%D7%A9%D7%9B%D7%A4%D7%95%D7%9C+%D7%A2%D7%91%D7%93%D7%99%D7%9D+%D7%A8%D7%91"></span>[[:he:PostgreSQL שכפול עבדים רב]][[he:PostgreSQL שכפול עבדים רב]]
 +
<span data-link_translate_ro_title="PostgreSQL replicare sclavi multi"  data-link_translate_ro_url="PostgreSQL+replicare+sclavi+multi"></span>[[:ro:PostgreSQL replicare sclavi multi]][[ro:PostgreSQL replicare sclavi multi]]
 +
<span data-link_translate_ru_title="PostgreSQL репликации рабы multi"  data-link_translate_ru_url="PostgreSQL+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8+%D1%80%D0%B0%D0%B1%D1%8B+multi"></span>[[:ru:PostgreSQL репликации рабы multi]][[ru:PostgreSQL репликации рабы multi]]
 +
<span data-link_translate_pl_title="PostgreSQL replikacji niewolników multi"  data-link_translate_pl_url="PostgreSQL+replikacji+niewolnik%C3%B3w+multi"></span>[[:pl:PostgreSQL replikacji niewolników multi]][[pl:PostgreSQL replikacji niewolników multi]]
 +
<span data-link_translate_ja_title="PostgreSQL のレプリケーション スレーブ マルチ"  data-link_translate_ja_url="PostgreSQL+%E3%81%AE%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96+%E3%83%9E%E3%83%AB%E3%83%81"></span>[[:ja:PostgreSQL のレプリケーション スレーブ マルチ]][[ja:PostgreSQL のレプリケーション スレーブ マルチ]]
 +
<span data-link_translate_ar_title="كيو النسخ المتماثل العبيد متعددة"  data-link_translate_ar_url="%D9%83%D9%8A%D9%88+%D8%A7%D9%84%D9%86%D8%B3%D8%AE+%D8%A7%D9%84%D9%85%D8%AA%D9%85%D8%A7%D8%AB%D9%84+%D8%A7%D9%84%D8%B9%D8%A8%D9%8A%D8%AF+%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9"></span>[[:ar:كيو النسخ المتماثل العبيد متعددة]][[ar:كيو النسخ المتماثل العبيد متعددة]]
 +
<span data-link_translate_zh_title="PostgreSQL 复制奴隶多"  data-link_translate_zh_url="PostgreSQL+%E5%A4%8D%E5%88%B6%E5%A5%B4%E9%9A%B6%E5%A4%9A"></span>[[:zh:PostgreSQL 复制奴隶多]][[zh:PostgreSQL 复制奴隶多]]
 +
<span data-link_translate_de_title="PostgreSQL Replikation Sklaven multi"  data-link_translate_de_url="PostgreSQL+Replikation+Sklaven+multi"></span>[[:de:PostgreSQL Replikation Sklaven multi]][[de:PostgreSQL Replikation Sklaven multi]]
 +
<span data-link_translate_nl_title="PostgreSQL replicatie slaven multi"  data-link_translate_nl_url="PostgreSQL+replicatie+slaven+multi"></span>[[:nl:PostgreSQL replicatie slaven multi]][[nl:PostgreSQL replicatie slaven multi]]
 +
<span data-link_translate_it_title="PostgreSQL replica schiavi multi"  data-link_translate_it_url="PostgreSQL+replica+schiavi+multi"></span>[[:it:PostgreSQL replica schiavi multi]][[it:PostgreSQL replica schiavi multi]]
 +
<span data-link_translate_pt_title="Multi de escravos de replicação PostgreSQL"  data-link_translate_pt_url="Multi+de+escravos+de+replica%C3%A7%C3%A3o+PostgreSQL"></span>[[:pt:Multi de escravos de replicação PostgreSQL]][[pt:Multi de escravos de replicação PostgreSQL]]
 
<span data-link_translate_fr_title="Replication PostgreSQL multi slaves"  data-link_translate_fr_url="Replication_PostgreSQL_multi_slaves"></span>[[:fr:Replication PostgreSQL multi slaves]][[fr:Replication PostgreSQL multi slaves]]
 
<span data-link_translate_fr_title="Replication PostgreSQL multi slaves"  data-link_translate_fr_url="Replication_PostgreSQL_multi_slaves"></span>[[:fr:Replication PostgreSQL multi slaves]][[fr:Replication PostgreSQL multi slaves]]
 
<br />
 
<br />
 +
{{#seo:
 +
    |title=PostgreSQL replicación esclavos multi
 +
    |titlemode=replace
 +
    |keywords=wiki ikoula, ikoula wiki, base de connaissance ikoula,PostgreSQL
 +
    |description=Esta página trata sobre la configuración de la replicación asíncrona de transmisión de PostgreSQL con un maestro y dos esclavos.
 +
    |og:type=artículo
 +
  |og:image=https://es-wiki.ikoula.com/resources/assets/logo_ikwiki.png
  
Este artículo ha sido traducido por un software de traducción automática. Usted puede ver el origen artículo [[:fr:Replication PostgreSQL multi slaves|aquí]].<br /><span data-translate="fr"></span>
+
    }}
  
== Introducción | _. _.  Esta página trata sobre la aplicación de una replicación asincrónica de PostgreSQL streaming 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. ==
+
== Introducción==
 +
Esta página trata sobre la configuración de la replicación asíncrona de transmisión de '''[https://www.ikoula.es/es/cloud-vps/oneclick/postgresql PostgreSQL]''' con un maestro y dos esclavos. Nuestros esclavos se configurarán como espera activa, es decir, será posible ejecutar consultas (solo lectura) en ellos.
  
 +
[[Archivo:Postgre.png|center|PostGreSQL]]
  
Contto de esta implementación | _. _.  Tenemos | _. _.  Servidores Debian | _. _.  actualizado | _. _.  Luego lo conecte a ql | _. _.  Activar la pantalla extendida y comprobamos nuestra replicación | _. _.  Tenemos tanto nuestra | _. _.  replicación con nuestros dos servidores eslavos | _. _.  | _. _.  y  | _. _.  Siempre conectado a ql en el maestro, crear una base de datos test | _. _.  ex | _. _.  | _. _.  para confirmar que la replicación es funcional | _. _.  Compruebe que la base de datos está bien replicado en nuestro | _. _.  Eslava | _. _.  La base de datos que creamos en nuestro maestro se replica tan bien automáticamente en nuestros dos eslavos. | _. _.  será nuestro maestro | _. _.  | _. _.  será un esclavo | _. _.  Postgres | _. _.  será un segundo esclavo | _. _.  Indicado las órdenes serán para cuando están precedidas de | _. _.  y como usuario del sistema  cuando están precedidas de | _. _.  Instalación de PostgreSQL y la configuración de los tres servidores: _! _ |  Todos los pedidos de esta parte tienen que ver en cada uno de los servidores. (Como primer paso, se recomienda tener un archivo | _. _.  con conexiones para cada servidor, como este: _! _ |  adaptando con las direcciones ip y nombres de sus propios servidores | _. _.  Añadir archivo APT PostgreSQL | _. _.  Importamos la clave pública de este depósito | _. _.  Actualizamos la caché APT para tener en cuenta el depósito | _. _.  Instalamos el paquete ql | _. _.  instalar la última versión estable es la | _. _.  en el momento de escribir esto | _. _.  Establece 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 | _. _.  Copiamos el usuario postgres desde y entre el público de cada servidor ssh key | _. _.  Desde el primer servidor | _. _.  Postgres | _. _.  en nuestro caso: _! _ |  al segundo | _. _.  Postgres | _. _.  nos | _. _.  y troisiseme | _. _.  Postgres | _. _.  Desde el segundo al primero y tercer servidor | _. _.  Del tercer al primer y segundo servidor | _. _.  Configuración del amo: _! _ |  Hacer sólo el amo: _! _ |  Postgres | _. _.  en nuestro caso: _! _ |  Creamos la función | _. _.  replicación de usuario: _! _ |  Nota: _! _ |  Definir un límite de conexión de | _. _.  porque tenemos | _. _.  Eslava | _. _.  Editamos el archivo principal de configuración de postgresql | _. _.  establecer las siguientes pautas: _! _ |  Nota: _! _ |  Activar archivado en nuestro segundo servidor | _. _.  personalizar la dirección IP de su servidor | _. _.  para aún más precauciones, pero esto no es una obligación. También definimos los parámetros hot_standby, bien que no hizo caso a un maestro, en cuyo caso debe ser degradado para esclavos en el futuro. ) Ahora edita el archivo de autenticación de postgresql | _. _.  para agregar nuestra autorización de usuario de replicación para conectar de la Eslava o la siguiente línea al final del archivo: _. _ |  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 | _. _.  Reinicie el servicio de postgresql para tener en cuenta nuestra configuración | _. _.  en raíz | _. _.  Esto asegura que el servicio ha iniciado con éxito | _. _.  Configuración de los eslavos | _. _.  En el primer esclavo | _. _.  Vamos a detener el servicio postgresql | _. _.  Editamos el archivo principal de configuración de postgresql | _. _.  para configurar la misma directrices como el maestro, por adaptación sólo la dirección IP del primer esclavo por que el segundo esclavo en el rsync archivo comando si desea activar o | _. _.  Ahora edita el archivo de autenticación de postgresql | _. _.  para agregar la autorización de nuestro usuario de replicación para conectar desde los otros servidores: _! _ |  Lo que hará en caso de que este esclavo debe ascendido maestro | _. _.  Nota: _! _ |  Con esta configuración similar a la de nuestro maestro permite para fácilmente promover a este esclavo como un maestro en caso de necesidad.
+
'''Contexto de esta implementación:'''
  
  
'''Para las operaciones a continuación, inicie sesión como usuario sistema postgres | _. _.  Creamos el directorio de destino de la wal del archivo maestro | _. _.  Eliminamos el directorio de datos de postgresql | _. _.  Hace la copia de seguridad base | _. _.  personalizar la dirección ip de su maestro y el nombre de tu usuario de replicación :'''
+
''Tenemos 3 servidores Debian 8 (actualizados):''
 
 
 
 
, se le pedirá la contraseña de tu usuario de replicación | _. _.  Configurar replicación creando el archivo | _. _.  con los siguientes parámetros: _! _ |  Nota: _! _ |  El archivo de activación es el archivo que creamos cuando queremos su replicación de parada de esclavo y comienza a aceptar las escrituras que es cuando queremos promover como maestro. Antes de promover un bloqueo de esclavo de su amo, por favor asegúrese de que el maestro inicial dado no para evitar cualquier corrupción.  3 Raíz, volvemos y empezamos el servicio: _! _ |  Esto asegura que el servicio ha iniciado con éxito | _. _.  Si nos conectamos a nuestro amo, ya podemos comprobar la replicación entre el amo y el esclavo primer es funcional | _. _.  Se conecta a nuestro amo y nos vamos conectando en usuario del sistema postgres | _. _.  Luego lo conecte a postgresql | _. _.  Activar la pantalla extendida y comprobamos nuestra replicación | _. _.  La replicación asincrónica, streaming con nuestro primer esclavo es bien hecha. En este punto tenemos un maestro de replicación | _. _.  Clásico esclavo | _. _.  un solo esclavo transmisión asincrónica | _. _.  En el segundo esclavo | _. _.  Repetir 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 orden de check-in en el archivo principal de configuración si desea activar archivado en este segundo esclavo. 8 (Auditoría y prueba de nuestra multi maestro de replicación eslavos | _. _.  Se conecta al maestro y se registran en el usuario postgres) :
 
  
 
Postgres01 (10.1.1.75) : Para quitarlo, desde el maestro  
 
Postgres01 (10.1.1.75) : Para quitarlo, desde el maestro  
Línea 22: Línea 41:
  
  
"'''#'''" "'''$'''".
+
Los comandos indicados deben realizarse en la raíz cuando están precedidos por "#" y como usuario del sistema postgres cuando están precedidos por "$".
  
== ==
+
== Instalación de PostgreSQL y preconfiguración de los tres [https://www.ikoula.es/es/servidor-dedicado servidores.] ==
  
 +
Todos los comandos en esta parte deben realizarse en cada uno de los [https://www.ikoula.es/es/servidor-dedicado servidores.]
  
 
+
Al principio, se recomienda tener un archivo / etc / hosts rellenado con las correspondencias de cada [https://www.ikoula.es/es/servidor-dedicado servidor], así (adaptándose con nombres de host y direcciones IP de sus propios [https://www.ikoula.es/es/servidor-dedicado servidores]):
/etc/hosts () :
 
  
 
<pre>
 
<pre>
Línea 40: Línea 59:
  
  
:
+
Añadimos el repositorio APT ''PostgreSQL'' :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 47: Línea 66:
  
  
:
+
Importamos la clave pública de este depósito:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 65: Línea 84:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Actualizamos el caché APT para tener en cuenta el repositorio:
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 73: Línea 91:
  
  
( 9.5 ) :
+
Instalamos el paquete postgresql (la última versión estable será la 9.5 cuando se escriban las líneas):
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 79: Línea 97:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Definimos una contraseña (de su elección pero segura) y generamos un par de claves ssh (sin frase de contraseña) para el usuario del sistema postgres:
() () :
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 92: Línea 109:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
Copiamos la clave pública ssh del usuario postgres desde y entre cada [https://www.ikoula.es/es/servidor-dedicado servidor]:
  
:
 
  
 
+
Desde el primer [https://www.ikoula.es/es/servidor-dedicado servidor] (postgres01 en nuestro caso) al segundo (postgres02 para nosotros) y troisisème (postgres03):
(postgres01 ) (postgres02 ) (postgres03) :
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 108: Línea 124:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Del segundo [https://www.ikoula.es/es/servidor-dedicado servidor] al primero y al tercero:
:
 
 
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
root@postgres02:~# su - postgres
 
root@postgres02:~# su - postgres
Línea 121: Línea 135:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Del tercer [https://www.ikoula.es/es/servidor-dedicado servidor] al primero y segundo:
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 134: Línea 147:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== ==
+
==Configuración maestra==
 
 
  
(postgres01 ) :
+
Para hacer solo en el master (postgres01 en nuestro caso):
  
  
/ :
+
Creamos el rol / usuario de replicación:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 149: Línea 161:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'' : 2 2 ''
+
''Nota: definimos un límite de conexión de 2 porque tenemos 2 esclavos''
  
  
/etc/postgresql/9.5/main/postgresql.conf :
+
El archivo de configuración principal postgresql /etc/postgresql/9.5/main/postgresql.conf se edita para configurar las siguientes directivas:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 164: Línea 176:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'': () ''
+
''Nota: activamos el archivo en nuestro segundo [https://www.ikoula.es/es/servidor-dedicado servidor] (adaptamos la dirección IP según la de su [https://www.ikoula.es/es/servidor-dedicado servidor]) para tomar aún más precauciones, pero esto no es una obligación. También definimos los parámetros hot_standby, aunque se ignoran en un maestro, en el caso de que deban ser degradados a un esclavo en el futuro.''
  
  
/etc/postgresql/9.5/main/pg_hba.conf :
+
Ahora estamos editando el archivo de autenticación postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar permiso para que nuestro usuario de replicación se conecte desde nuestros esclavos o la siguiente línea al final del archivo:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 173: Línea 185:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'' () ''  
+
''Adapte esta línea de acuerdo con el nombre de su usuario de replicación y la red (o las respectivas direcciones IP) de sus esclavos''  
  
  
() :
+
Reiniciamos el servicio postgresql para tener en cuenta nuestra configuración (en la root):
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 182: Línea 194:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Nos aseguramos de que el servicio comience correctamente:
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 207: Línea 218:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== ==
+
==Configuración de esclavos==
  
===  ===
+
'''En el primer esclavo'''
  
:
+
Comenzamos por detener el servicio postgresql :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 218: Línea 229:
  
  
/etc/postgresql/9.5/main/postgresql.conf :
+
El archivo de configuración principal postgresql /etc/postgresql/9.5/main/postgresql.conf se edita para configurar las mismas directivas que en el maestro, simplemente adaptando la ip del primer esclavo con la del segundo esclavo en el comando rsync d. Archivar si quieres activarlo ya sea:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 231: Línea 242:
  
  
/etc/postgresql/9.5/main/pg_hba.conf () :
+
Ahora estamos editando el archivo de autenticación postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar el permiso de nuestro usuario de replicación para conectarse desde nuestros otros [https://www.ikoula.es/es/servidor-dedicado servidores] (esto solo será útil en caso de que este esclavo debe ascender maestro):
 
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
hostssl replication    repuser <ip du réseau de vos serveurs>/24    md5
 
hostssl replication    repuser <ip du réseau de vos serveurs>/24    md5
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'' : ''
+
''Nota: con esta configuración similar a la de nuestro maestro, esto promoverá fácilmente a este esclavo como maestro cuando sea necesario.''
  
 
+
Para las operaciones a continuación, inicie sesión como usuario del sistema de postgres:
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 247: Línea 256:
  
  
:
+
Creamos el directorio de destino de los archivos del master :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 253: Línea 262:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Eliminamos el directorio de datos postgresql :
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 261: Línea 269:
  
  
() :
+
Essayez avec cette orthographe : On fait le base [https://www.ikoula.es/es/r1soft backup] (adaptez l'ip par celle de votre master et le nom de votre utilisateur de réplication), le mot de passe de votre utilisateur de réplication vous sera demandé :
 +
182/5000
 +
Hacemos la base de datos de respaldo (adaptamos la ip según la de su maestro y el nombre de su usuario de replicación), se le pedirá la contraseña de su usuario de replicación:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 268: Línea 278:
  
  
/var/lib/postgresql/9.5/main/recovery.conf :
+
Configuramos la replicación creando el archivo /var/lib/postgresql/9.5/main/recovery.conf con los siguientes parámetros :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 276: Línea 286:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'' : ''
+
''Nota: El archivo de activación es el archivo que creamos solo cuando queremos que su esclavo detenga la replicación y comience a aceptar scripts, es decir, cuando queremos promoverlo como maestro. Antes de promocionar un Esclavo en el caso de un bloqueo maestro, se debe garantizar que el maestro inicial no volverá a subir para evitar daños.''
  
 
+
Regresamos a la raíz e iniciamos el servicio :
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 285: Línea 294:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
+
Nos aseguramos de que el servicio haya comenzado correctamente :
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 310: Línea 318:
  
  
:
+
Si nos conectamos a nuestro maestro, ya podemos verificar que nuestra replicación entre el maestro y el primer esclavo es funcional:
  
:
+
Nos conectamos con nuestro maestro y nos conectamos como un usuario del sistema postgres:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 319: Línea 327:
  
  
:
+
Entonces nos conectamos a postgresql :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 326: Línea 334:
  
  
:
+
Activamos la pantalla extendida y comprobamos nuestra replicación :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 353: Línea 361:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
/ ()
+
Nuestra replicación de transmisión asíncrona con nuestro primer esclavo estaba bien hecha. En esta etapa tenemos una replicación clásica Maestro / esclavo (solo un esclavo en transmisión asíncrona)
 +
 
 +
'''En el segundo esclavo'''
  
===  ===
+
Rehacemos exactamente lo que se hizo en el primer esclavo, obviamente adaptando su nombre de host en el archivo recovery.conf y la dirección IP en el comando de archivo en el archivo de configuración principal si también desea activar el Archivando en este segundo esclavo.
  
  
  
== ==
+
===Comprobando y probando nuestra replicación maestra multi-eslava===
  
:
+
Nos conectamos con el master e iniciamos sesión como usuario de postgres:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 367: Línea 377:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
:
+
Entonces nos conectamos a postgresql :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 374: Línea 384:
  
  
:
+
Activamos la pantalla extendida y comprobamos nuestra replicación :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 418: Línea 428:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
2 (postgres02 03).
+
Así que tenemos nuestras 2 replicaciones con nuestros dos [https://www.ikoula.es/es/servidor-dedicado servidores] esclavos (postgres02 y postgres03).
  
  
(ex : checkrep) :
+
Siempre conectado a postgresql en el maestro, creamos una base de datos de prueba (por ejemplo, checkrep) para confirmar que la replicación es funcional:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 428: Línea 438:
  
  
2 :
+
Verificamos que esta base de datos esté bien replicada en nuestros 2 esclavos :
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 471: Línea 481:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
La base de datos que creamos en nuestro maestro, por lo tanto, se ha replicado automáticamente en nuestros dos eslavos.
  
  
 
+
Para borrarlo, desde el master:
:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">

Revisión actual del 10:57 6 oct 2021

es:PostgreSQL replicación esclavos multi en:PostgreSQL replication slaves multi he:PostgreSQL שכפול עבדים רב ro:PostgreSQL replicare sclavi multi ru:PostgreSQL репликации рабы multi pl:PostgreSQL replikacji niewolników multi ja:PostgreSQL のレプリケーション スレーブ マルチ ar:كيو النسخ المتماثل العبيد متعددة zh:PostgreSQL 复制奴隶多 de:PostgreSQL Replikation Sklaven multi nl:PostgreSQL replicatie slaven multi it:PostgreSQL replica schiavi multi pt:Multi de escravos de replicação PostgreSQL fr:Replication PostgreSQL multi slaves

Introducción

Esta página trata sobre la configuración de la replicación asíncrona de transmisión de PostgreSQL con un maestro y dos esclavos. Nuestros esclavos se configurarán como espera activa, es decir, será posible ejecutar consultas (solo lectura) en ellos.

PostGreSQL

Contexto de esta implementación:


Tenemos 3 servidores Debian 8 (actualizados):

Postgres01 (10.1.1.75) : Para quitarlo, desde el maestro

Postgres02 (10.1.1.90) :

Postgres03 (10.1.1.199) :


Los comandos indicados deben realizarse en la raíz cuando están precedidos por "#" y como usuario del sistema postgres cuando están precedidos por "$".

Instalación de PostgreSQL y preconfiguración de los tres servidores.

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

Al principio, se recomienda tener un archivo / etc / hosts rellenado con las correspondencias de cada servidor, así (adaptándose con nombres de host y direcciones IP de sus propios servidores):

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       postgres01
10.1.1.90       postgres02
10.1.1.199      postgres03


Añadimos el repositorio 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

Actualizamos el caché APT para tener en cuenta el repositorio:

# apt-get update


Instalamos el paquete postgresql (la última versión estable será la 9.5 cuando se escriban las líneas):

# apt-get install postgresql

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

# passwd postgres
# su - postgres
$ ssh-keygen

Copiamos la clave pública ssh del usuario postgres desde y entre cada servidor:


Desde el primer servidor (postgres01 en nuestro caso) al segundo (postgres02 para nosotros) y troisisème (postgres03):

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

Del segundo servidor al primero y al tercero:

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

Del tercer servidor al primero y segundo:

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

Configuración maestra

Para hacer solo en el master (postgres01 en nuestro caso):


Creamos el rol / usuario de replicación:

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

Nota: definimos un límite de conexión de 2 porque tenemos 2 esclavos


El archivo de configuración principal postgresql /etc/postgresql/9.5/main/postgresql.conf se edita 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: activamos el archivo en nuestro segundo servidor (adaptamos la dirección IP según la de su servidor) para tomar aún más precauciones, pero esto no es una obligación. También definimos los parámetros hot_standby, aunque se ignoran en un maestro, en el caso de que deban ser degradados a un esclavo en el futuro.


Ahora estamos editando el archivo de autenticación postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar permiso para que nuestro usuario de replicación se conecte desde nuestros esclavos o la siguiente línea al final del archivo:

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

Adapte esta línea de acuerdo con el nombre de su usuario de replicación y la red (o las respectivas direcciones IP) de sus esclavos


Reiniciamos el servicio postgresql para tener en cuenta nuestra configuración (en la root):

# systemctl restart postgresql

Nos aseguramos de que el servicio comience 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 esclavos

En el primer esclavo

Comenzamos por detener el servicio postgresql :

# systemctl stop postgresql


El archivo de configuración principal postgresql /etc/postgresql/9.5/main/postgresql.conf se edita para configurar las mismas directivas que en el maestro, simplemente adaptando la ip del primer esclavo con la del segundo esclavo en el comando rsync d. Archivar si quieres activarlo ya sea:

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 estamos editando el archivo de autenticación postgresql /etc/postgresql/9.5/main/pg_hba.conf para agregar el permiso de nuestro usuario de replicación para conectarse desde nuestros otros servidores (esto solo será útil en caso de que este esclavo debe ascender maestro):

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

Nota: con esta configuración similar a la de nuestro maestro, esto promoverá fácilmente a este esclavo como maestro cuando sea necesario.

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

# su – postgres


Creamos el directorio de destino de los archivos del master :

$ mkdir /var/lib/postgresql/wal_archive

Eliminamos el directorio de datos postgresql :

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


Essayez avec cette orthographe : On fait le base backup (adaptez l'ip par celle de votre master et le nom de votre utilisateur de réplication), le mot de passe de votre utilisateur de réplication vous sera demandé : 182/5000 Hacemos la base de datos de respaldo (adaptamos la ip según la de su maestro y el nombre de su usuario de replicación), se le pedirá la contraseña de su usuario de replicación:

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


Configuramos la replicación creando el 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 archivo de activación es el archivo que creamos solo cuando queremos que su esclavo detenga la replicación y comience a aceptar scripts, es decir, cuando queremos promoverlo como maestro. Antes de promocionar un Esclavo en el caso de un bloqueo maestro, se debe garantizar que el maestro inicial no volverá a subir para evitar daños.

Regresamos a la raíz e iniciamos el servicio :

# systemctl start postgresql

Nos aseguramos de que el servicio haya comenzado 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 nos conectamos a nuestro maestro, ya podemos verificar que nuestra replicación entre el maestro y el primer esclavo es funcional:

Nos conectamos con nuestro maestro y nos conectamos como un usuario del sistema postgres:

# su - postgres


Entonces nos conectamos a postgresql :

$ psql


Activamos la pantalla 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

Nuestra replicación de transmisión asíncrona con nuestro primer esclavo estaba bien hecha. En esta etapa tenemos una replicación clásica Maestro / esclavo (solo un esclavo en transmisión asíncrona)

En el segundo esclavo

Rehacemos exactamente lo que se hizo en el primer esclavo, obviamente adaptando su nombre de host en el archivo recovery.conf y la dirección IP en el comando de archivo en el archivo de configuración principal si también desea activar el Archivando en este segundo esclavo.


Comprobando y probando nuestra replicación maestra multi-eslava

Nos conectamos con el master e iniciamos sesión como usuario de postgres:

# su – postgres

Entonces nos conectamos a postgresql :

$ psql


Activamos la pantalla 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í que tenemos nuestras 2 replicaciones con nuestros dos servidores esclavos (postgres02 y postgres03).


Siempre conectado a postgresql en el maestro, creamos una base de datos de prueba (por ejemplo, checkrep) para confirmar que la replicación es funcional:

postgres=# CREATE DATABASE checkrep;


Verificamos que esta base de datos esté bien replicada en nuestros 2 esclavos :

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, por lo tanto, se ha replicado automáticamente en nuestros dos eslavos.


Para borrarlo, desde el master:

postgres=# DROP DATABASE checkrep;



No puedes publicar comentarios.