Charmed PostgreSQL VM

Channel Revision Published Runs on
latest/stable 345 09 Nov 2023
Ubuntu 22.04 Ubuntu 20.04 Ubuntu 18.04 Ubuntu 16.04 Ubuntu 14.04
latest/stable 239 09 Feb 2022
Ubuntu 22.04 Ubuntu 20.04 Ubuntu 18.04 Ubuntu 16.04 Ubuntu 14.04
latest/stable 226 01 Apr 2021
Ubuntu 22.04 Ubuntu 20.04 Ubuntu 18.04 Ubuntu 16.04 Ubuntu 14.04
14/stable 430 28 Jun 2024
Ubuntu 22.04
14/stable 429 28 Jun 2024
Ubuntu 22.04
14/candidate 429 26 Jun 2024
Ubuntu 22.04
14/candidate 430 26 Jun 2024
Ubuntu 22.04
14/beta 430 26 Jun 2024
Ubuntu 22.04
14/beta 429 26 Jun 2024
Ubuntu 22.04
14/edge 442 Yesterday
Ubuntu 22.04
14/edge 441 Yesterday
Ubuntu 22.04
juju deploy postgresql --channel 14/stable
Show information

Platform:

Ubuntu
22.04 20.04 18.04 16.04 14.04

Note: All commands are written for juju >= v.3.0

If you are using an earlier version, check the Juju 3.0 Release Notes.

How to scale units

Replication in PostgreSQL is the process of creating copies of the stored data. This provides redundancy, which means the application can provide self-healing capabilities in case one replica fails. In this context, each replica is equivalent one juju unit.

This guide will show you how to establish and change the amount of juju units used to replicate your data.

Deploy PostgreSQL with replicas

To deploy PostgreSQL with multiple replicas, specify the number of desired units with the -n option.

juju deploy postgresql --channel 14/stable -n <number_of_replicas>

To retrieve the primary replica, one can use the action get-primary on any of the units running postgresql:

juju run postgresql/leader get-primary

Similarly, the primary replica is displayed as a status message in juju status. However, one should note that this hook gets called on regular time intervals and the primary may be outdated if the status hook has not been called recently.

update-status hook

We highly suggest configuring the status hook to run frequently. In addition to reporting the primary, secondaries, and other statuses, the status hook performs self-healing in the case of a network cut.

To change the frequency of the update-status hook, run

juju model-config update-status-hook-interval=<time(s/m/h)>

Note that this hook executes a read query to PostgreSQL. On a production level server, this should be configured to occur at a frequency that doesn’t overload the server with read requests. Similarly, the hook should not be configured at too quick of a frequency, as this can delay other hooks from running.

You can read more about status hooks here.

Scale replicas on an existing application

To scale up the cluster, use juju add-unit:

juju add-unit postgresql --num-units <amount_of_units_to_add>

To scale down the cluster, use juju remove-unit:

juju remove-unit postgresql/<unit_id_to_remove>

Warning: Do not remove the last unit, it will destroy your data!