Subject: Load balancing of write queries among health-checked nodes

From: [email-masked]
Date: Tue, 08 Oct 2024 07:03:57 +0400

Hello. I have a PostgreSQL high availability cluster with Pgpool-II, but I don't use the virtual IP feature so my clients don't know which node to send queries to. DNS round-robin is not a solution because it can't distinguish between healthy and dead nodes.

I thought about having a Pgpool-II instance on each client (client Pgpool-II -> cluster Pgpool-II -> PostgreSQL), but AFAIK it can't distribute write queries. I also know that libpq may have multiple nodes to connect, but I need an advanced health check because a node may have connectivity but be separated from the whole cluster so it must be considered dead.

Is there any solution?

---

From: Ron Johnson <[email-masked]>
Date: Mon, 7 Oct 2024 23:30:05 -0400

On Mon, Oct 7, 2024 at 11:04 PM <[email-masked]> wrote:

> Hello. I have a PostgreSQL high availability cluster with Pgpool-II, but I
> don't use the virtual IP feature so my clients don't know which node to
> send queries to. DNS round-robin is not a solution because it can't
> distinguish between healthy and dead nodes.
>
> I thought about having a Pgpool-II instance on each client (client
> Pgpool-II -> cluster Pgpool-II -> PostgreSQL), but AFAIK it can't
> distribute write queries. I also know that libpq may have multiple nodes to
> connect, but I need an advanced health check because a node may have
> connectivity but be separated from the whole cluster so it must be
> considered dead.
>

Isn't that multi-master clustering?

-- 
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> crustacean!

---

From: [email-masked]
Date: Tue, 08 Oct 2024 07:41:00 +0400

Among PostgreSQL instances there is only one master. But yes, each server may be considered master by the clients because it's Pgpool-II will redirect write queries to the actual master. Maybe it's even better to avoid this unnecessary traffic between servers and decide which Pgpool-II is in front of the master on the client side, but this is optional.