Buen día Jaime, muchísimas gracias.
En el día de ayer luego de que me comentaras lo del health, y verificando la 
documentación que me pasaste pude identificar cual es el problema.
Cuando solo tenes un nodo activo, el mismo queda como master (leader)

[cid:8249e855-c12d-44b5-b165-805525bf57c5]

Del lado del haproxy hay un httpchk que identifica según el endpoint si el 
mismo está disponible para "master" o bien como "replica"

[cid:2d875205-f17e-476d-9aa2-a0a9baed2407]

Lo que hace el haproxy es balancear entre un master y una replica como 
contingencia en caso que uno no quede disponible y además para balancear la 
lectura a la base de datos, lo cierto es que cuando tenes un cluster de dos 
nodos uno es de lectura y escritura y el otro es solo de lectura.
Si cambias este check en el binding de réplica por "master" va a retornar 200 y 
por ende va a dejar disponible el puerto 5001 para su conexión.
De esta manera tanto el puerto 5000 y 5001 quedan activos.
Para que quede un solo nodo activo con los dos puertos escuchando, el option 
httpchk del listener de replicas tiene que ser cambiado por master.

[cid:f36f76f4-db05-4659-bbf9-ecf96649b5ab]

Siendo esta la solución, entiendo que es recomendable tener un clúster de 3 o 
más nodos, simplemente por esto. Porque de tener un clúster de dos nodos hay 
más posibilidades que se dispare una alarma de conectividad con el puerto de 
lectura en el caso que uno no quede disponible.

Muchísimas gracias nuevamente Jaime, pronto les estaré consultando por otro 
tema que tenemos en el clúster ya que necesito identificar de donde proviene y 
como resolver un lag que estamos teniendo.

Saludos,


Rodrigo Cordero

________________________________
De: Jaime Soler <jaime.so...@gmail.com>
Enviado: jueves, 11 de noviembre de 2021 06:07
Para: Rodrigo Emmanuel Cordero <rodrigo.cord...@hotmail.es>
Cc: pgsql-es-ay...@postgresql.org <pgsql-es-ay...@postgresql.org>
Asunto: Re: Consulta sobre nodos master y replicas

Ambos puertos, 5000 y 5001 se deberían de poder usar. La diferencia entre ambos 
es, a la hora de asignarte un servidor por defecto, es el número de chequeos 
correctos que tienen que devolver el api-rest ,
Para el puerto 5000, volverá a considerar un servidor como disponible después 
de 4 healthcheck ok's:   default-server inter 3s fastinter 1s fall 3 rise 4 
on-marked-down shutdown-sessions
Y 2 healthcheck's ok en el caso del puerto 5001:   default-server inter 3s 
fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
La cuestión que creo que debéis de darle una vuelta es saber, cómo queréis 
ustedes manejar las conexiones desde el aplicativo, sí siempre van al master o 
permite la aplicación balanceo de carga y usen conexiones a replicas, o 
replicas con o sin sincronismo...

Un saludo

El mié, 10 nov 2021 a las 18:42, Rodrigo Emmanuel Cordero 
(<rodrigo.cord...@hotmail.es<mailto:rodrigo.cord...@hotmail.es>>) escribió:
Hola Jaime, muchas gracias por contestar.
Es cierto, utilizamos patroni con el healthcheck, el comportamiento al pasar de 
un nodo a otro es normal pero cuando quedan más de un nodo activo. El problema 
que estamos teniendo puntualmente es que, cuando solo nos queda un solo nodo 
activo el único puerto al que podemos conectarnos es al 5000, que apunta de 
igual manera a cada nodo al igual que el puerto 5001. Este comportamiento es 
normal o deberíamos poder conectarnos a ambos puertos del haproxy si solo queda 
un nodo de postgres activo?

Muchas gracias,

Rodrigo Cordero
________________________________
De: Jaime Soler <jaime.so...@gmail.com<mailto:jaime.so...@gmail.com>>
Enviado: miércoles, 10 de noviembre de 2021 08:21
Para: Rodrigo Emmanuel Cordero 
<rodrigo.cord...@hotmail.es<mailto:rodrigo.cord...@hotmail.es>>
Cc: Jaime Casanova 
<jcasa...@systemguards.com.ec<mailto:jcasa...@systemguards.com.ec>>; 
pgsql-es-ay...@postgresql.org<mailto:pgsql-es-ay...@postgresql.org> 
<pgsql-es-ay...@postgresql.org<mailto:pgsql-es-ay...@postgresql.org>>
Asunto: Re: Consulta sobre nodos master y replicas

Creo que lo que estás usando es Patroni, que ofrece la posibilidad de tener 
haproxy como balanceador, usando como healthcheck la api rest que expone 
patroni en el puerto 8008.
El api rest, te da acceso a los nodos standby síncronos sobre el método /sync 
(https://github.com/zalando/patroni/blob/2f31e88bdc3f933f0c3fffdc6ea67a99a7c378cc/patroni/api.py#L151
 ) o los standby asínconos mediante el método /async 
(https://github.com/zalando/patroni/blob/2f31e88bdc3f933f0c3fffdc6ea67a99a7c378cc/patroni/api.py#L151
 )
En tu caso el puerto 5000 y el 5001 va a balancear las peticiones a cualquiera 
de los nodos de base de datos que esten vivos.
Creo que conviene que revises los endpoints de healcheck que ofrece patroni 
https://patroni.readthedocs.io/en/latest/rest_api.html#health-check-endpoints y 
adecuar la configuración del haproxy, en función a lo que necesites.

Un saludo.

El mié, 10 nov 2021 a las 2:22, Rodrigo Emmanuel Cordero 
(<rodrigo.cord...@hotmail.es<mailto:rodrigo.cord...@hotmail.es>>) escribió:
Un gusto Jaime, muchas gracias por contestar.
Disculpas... Efectivamente, hay un haproxy y adjunto el archivo de 
configuracion del mismo para que puedas decirme si la configuracion es correcta.

Muchas gracias,

Rodrigo Cordero

Get Outlook para Android<https://aka.ms/AAb9ysg>
________________________________
From: Jaime Casanova 
<jcasa...@systemguards.com.ec<mailto:jcasa...@systemguards.com.ec>>
Sent: Tuesday, November 9, 2021 7:40:35 PM
To: Rodrigo Emmanuel Cordero 
<rodrigo.cord...@hotmail.es<mailto:rodrigo.cord...@hotmail.es>>
Cc: pgsql-es-ay...@postgresql.org<mailto:pgsql-es-ay...@postgresql.org> 
<pgsql-es-ay...@postgresql.org<mailto:pgsql-es-ay...@postgresql.org>>
Subject: Re: Consulta sobre nodos master y replicas

On Tue, Nov 09, 2021 at 06:52:42PM +0000, Rodrigo Emmanuel Cordero wrote:
> Hola, antes que nada un gusto en saludarlos.
> Estoy teniendo una duda respecto al comportamiento del cluster con tres nodos 
> de postgres (1 Master / 2 Replicas).
> Cuando el nodo master se apaga, automáticamente uno de los nodos "replicas" 
> toma el control del master, esto esta bien.

en realidad, postgres no hace esto de forma automática. probablemente
tienes una aplicación que hace esto.

> Ahora la duda que tengo actualmente es cuando solo queda un solo nodo, el 
> único puerto al cual es posible conectarse es el 5000, y el 5001 pierde 
> conexión.
> ¿Este comportamiento es normal?
> ¿Teniendo un solo nodo activo, pueden quedar los puertos 5000 y 5001 activos 
> o esto ocurre solo cuando hay mas de un nodo activo?
>

y aqui se confirma el hecho de que tienes una aplicación haciendo esto.
esos puertos no los usa postgres para nada.

Sabes que estas usando para el failover? mi sospechas son haproxy o
pg_auto_failover

--
Jaime Casanova
Director de Servicios Profesionales
SystemGuards - Consultores de PostgreSQL

Reply via email to