Configuring Postgres Enterprise Manager (PEM)
TPA installs and configures PEM when you run the tpaexec configure
command with the --enable-pem command line option.
The default behavior with --enable-pem is to enable the pem-agent
role for all postgres instances in the cluster. The pem-agent role
is also added to Barman nodes when the --enable-pg-backup-api
command line option is used along with --enable-pem .
A dedicated instance named pemserver is also added to the cluster.
Since PEM server uses a Postgres backend, a pemserver instance
implicitly uses the postgres role as well, which ensures that
pemserver gets a valid Postgres cluster configured for use as a PEM
backend. All configuration options available for a normal Postgres
instance are valid for PEM’s backend Postgres instance as well. For
details, see:
PEM is available only by way of EDB’s package repositories and therefore
requires a valid subscription.
Supported architectures
PEM is supported with all architectures by way of the --enable-pem
configuration command-line option. An exception is the BDR-Always-ON
architecture when used with EDB Postgres Extended. You can optionally
edit the generated cluster config file (config.yml ) and assign or
remove the pem-agent role from any Postgres instance in the cluster to
enable or disable PEM there.
PEM configuration
TPA configures PEM agents and PEM server with the appropriate
instance-specific settings, with the remaining settings set to their
default values. Some of the configuration options might be exposed for
user configuration in the future.
PEM server’s web interface is configured to run on https and uses port
443 for that configuration. PEM’s web server configuration uses
self-signed certificates.
The default login credentials for the PEM server web interface use the
Postgres backend database user, which is set to postgres for PostgreSQL
and enterprisedb for EDB Postgres Advanced Server clusters by default.
You can get the login password for the web interface by running
tpaexec show-password $clusterdir $user .
Shared PEM server
Some deployments might want to use a single PEM server for monitoring
and managing multiple clusters in the organization. Shared PEM server
deployment in tpaexec is supported by way of the pem_shared
variable. You can set this variable by way of vars: under the PEM
server instance for the given cluster config that plans to use an
existing PEM server. pem_shared is a Boolean variable, so possible
values are true and false (default). When declaring a PEM server
instance as shared, we tell the given cluster config that the PEM server
instance is in fact managed by a separate cluster config that
provisioned and deployed the PEM server in the first place. So any
changes you want to make to the PEM server instance, including the
Postgres backend for PEM, are managed by the cluster where the PEM
server instance isn’t declared as a shared PEM instance.
A typical workflow for using a shared PEM server across multiple
clusters looks something like this:
Create a tpaexec cluster with a single instance that has the
pem-server role. (Call it pem-cluster for this example.) You can
as easily use the same workflow in a scenario where PEM is
provisioned as part of a larger cluster and not just a single
instance that runs as a PEM server. We use a single-node cluster
because it’s easier to use that as an example and arguably easy to
maintain as well.
In the other cluster (pg-cluster for example), reference this
particular PEM server from $clusters/pem-cluster as a shared PEM
server instance. Use bare as the platform so you aren’t trying to
create a new PEM server instance. Also, specify the IP address of the
PEM server that this cluster can use to access the PEM server
instance.
- Name: pemserver
node: 5
role:
- pem-server
platform: bare
public_ip: 13.213.53.205
private_ip: 10.33.15.102
vars:
pem_shared: true
Before running deploy in the Postgres cluster, make sure that
pg-cluster can access the PEM server instance by way of SSH. You
can allow this access by copying the pg-cluster public key to the
PEM server instance by way of ssh-copy-id . Then do an SSH to
make sure you can log in without having to specify the password.
# add pem-clusters key to the ssh-agent (handy for `aws` platform)
$ cd $clusters/pem-cluster
$ ssh-add id_pem-clutser
$ cd $clusters/pg-cluster
$ ssh-keyscan -4 $pem-server-ip >> known_hosts
$ ssh-copy-id -i id_pg-cluster.pub -o UserKnownHostsFile=tpa_known_hosts $user@$pem-server-ip
$ ssh -F ssh_config pemserver
Update the PostgreSQL config file on the PEM server node so it allows
connections from the new pg-cluster . You can modify the existing
pg_hba.conf file on the PEM server by adding new entries to
pem_postgres_extra_hba_settings under vars: in the
pem-cluster config.yml file. For example:
instances:
- Name: pemserver
location: main
node: 1
role:
- pem-server
vars:
pem_postgres_extra_hba_settings:
- "# Allow pem connections from pg-cluster1.quire"
- hostssl pem +pem_agent 10.33.15.108/32 cert
- "# Allow pem connections from pg-cluster1.upside"
- hostssl pem +pem_agent 10.33.15.104/32 cert
- "# Allow pem connections from pg-cluster2.zippy"
- hostssl pem +pem_agent 10.33.15.110/32 cert
- "# Allow pem connections from pg-cluster2.utopic"
- hostssl pem +pem_agent 10.33.15.109/32 cert
Then run tpaexec provision $clusters/pem-cluster followed by
tpaexec deploy $clusters/pem-cluster . When complete, nodes from
your new pg-cluster can speak with the PEM server backend.
To ensure that PEM agents from the nodes in pg-cluster can
connect and register with the PEM server backend, you must run
export EDB_PEM_CREDENTIALS_FILE=/path/to/pem/credentials/file
before you run tpaexec deploy . The credentials file is a text
file that contains your access credentials to the PEM server’s
backend Postgres instance in the username:password format.
$ cat pem_creds
postgres:f1I%fw!QmWevdzw#EL#$Ulu1cWhg7&RT
If you don’t know the backend password, you can get that by using the
tpaexec show-password command.
tpaexec show-password $pem-clusterdir $user
Run tpaexec deploy $clusters/pg-cluster so PEM is deployed on the
new pg-cluster while using the shared PEM server instance.
Connecting to the PEM UI
The PEM UI runs on an https interface, so you can connect with a running
instance of a PEM server by way of https://$pem-server-ip/pem. Login
credentials for the PEM UI are set to the Postgres backend user that
uses postgres for postgresql or enterprisedb for epas
flavors. The tpaexec show-password command shows the password for
the backend user. For example:
tpaexec show-password $clusterdir $user
See the PEM documentation
for more details on using and configuring PEM.