PostgreSQL 13 Installation auf Oracle Linux 8

Database

Im Folgenden wird die Installation und Basiskonfiguration von PostgreSQL 13 auf Oracle Linux 8 beschrieben. Die Installationsanleitung ist nicht ausschließlich für Oracle Linux 8 erstellt, sondern kann in ähnlicher Weise auf andere Distributionen der RedHat-Familie angewendet werden.

Wer sich über Postgresql- und Datenbankthemen austauschen oder beraten möchte, kann gerne direkt Kontakt mit mir aufnehmen. >>Zum Kontaktformular

Systemanforderungen

Für die Installation wird ein Server oder eine VM benötigt. Das System weist in diesem Fall folgende Spezifikation auf:

  • Prozessor: 2 CPU Cores
  • Arbeitsspeicher: 8 GB
  • Speicherplatz: 20 GB
  • IP: 192.168.56.222
  • Betriebssystem: Oracle Linux 8
  • PostgreSQL Version: PostgreSQL 13

Hinweis: Für die Installation ist entweder Root-Zugriff oder sudo-Rechte notwendig.

Installation

Zuerst wird das PostgreSQL Repository eingebunden.

 

sudo dnf install -y download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

Danach wird das in Oracle Linux enthaltene PostgreSQL Modul deaktiviert.

 

sudo dnf -qy module disable postgresql

 

Weiter geht es mit der Installation von PostgreSQL.

 

sudo dnf install -y postgresql13-server postgresql13-contrib

 

Nach der Installation der Pakete ist der Applikationsuser postgres verfügbar, der als Besitzer für den Betrieb und das Management genutzt wird. Der Wechsel auf diesen User erfolgt per sudo-Befehl.

 

sudo su - postgres

 

Der Datenbankcluster wird mit dem postgres User initialisiert. Hierbei wird das data Verzeichnis angelegt, welches alle zugehörigen Verzeichnisse und Dateien beinhaltet. Dazu zählen:

  • Datendateien
  • Logdateien
  • Transaktionslogs (WAL)
  • Konfigurationsdateien
/usr/pgsql-13/bin/initdb -D /var/lib/pgsql/13/data --encoding=UTF-8 --locale=de_DE.UTF-8 --auth=scram-sha-256 --auth-local=peer --data-checksums

 

Bei dem Initialisieren werden die folgenden Parameter angewendet:

  • das Encoding ist UTF-8
  • es wird das deutsche Gebietsschema verwendet
  • die Authentifikation per IP v4/v6 erfolgt per scram-sha-256
  • die lokale Authentifikation per peer
  • Prüfsummen für Datendateien sind aktiviert

Zuletzt wird der PostgreSQL-Service beim Booten aktiviert und danach gestartet.

 

sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13

 

Damit ist die Installation abgeschlossen und der Login ist per Unix Domain Socket Verbindung mit psql als User postgres möglich.

 

sudo su - postgres
psql

 

Für den Superuser postgres kann nun als erstes ein Passwort per Metabefehl gesetzt werden.

 

\password

 

Dann wird psql wieder verlassen.

 

\q

Umgebungsvariablen setzen

Mit Umgebungsvariablen können Standardwerte beim Aufruf von PostgreSQL Anwendungen definiert werden. Diese werden hier für den User postgres gesetzt, können aber auch für andere User definiert werden. Dazu wird als erstes auf den User postgres gewechselt, falls noch ein anderer User in der Shell aktiv ist.

 

sudo su - postgres

 

Folgende Umgebungsvariablen sind hierbei in die .pgsql_profile Datei im Home-Verzeichnis des postgres Users aufzunehmen.

 

echo "export PATH=/usr/pgsql-13/bin:\$PATH
export PGDATA=/var/lib/pgsql/13/data
export PGPORT=5432
export PGUSER=postgres
export PGDATABASE=postgres" >> ~/.pgsql_profile

 

Danach werden die Umgebungsvariablen in der aktuellen Session geladen.

 

. ~/.pgsql_profile

Konfiguration

Abschließend erfolgt die Konfiguration des Clusters. Normalerweise wird die Konfiguration in Abhängigkeit vom jeweiligen Einsatzzweck angepasst, damit die Performance auch zur Systemumgebung und dem angestrebten Workload, z.B. OLTP oder OLAP, passt. In diesem Fall wird mit einer Basiskonfiguration mit dem PGConfig Konfigurationskalkulator begonnen. PGConfig liefert auf Basis der eingegebenen Werte eine Liste von Konfigurationsparametern zur Anpassung der postgresql.conf Konfigurationsdatei.

Abbildung: pgconfig

Die erzeugten Konfigurationsparameter werden mittels psql auf dem Datenbankserver eingespielt.

 

psql << EOF
-- Memory Configuration
ALTER SYSTEM SET shared_buffers TO '2GB';
ALTER SYSTEM SET effective_cache_size TO '6GB';
ALTER SYSTEM SET work_mem TO '82MB';
ALTER SYSTEM SET maintenance_work_mem TO '512MB';

-- Checkpoint Related Configuration
ALTER SYSTEM SET min_wal_size TO '1GB';
ALTER SYSTEM SET max_wal_size TO '3GB';
ALTER SYSTEM SET checkpoint_completion_target TO '0.9';
ALTER SYSTEM SET wal_buffers TO '16MB';

-- Network Related Configuration
ALTER SYSTEM SET listen_addresses TO '*';
ALTER SYSTEM SET max_connections TO '100';

-- Storage Configuration
ALTER SYSTEM SET random_page_cost TO '1.1';
ALTER SYSTEM SET effective_io_concurrency TO '200';

-- Worker Processes
ALTER SYSTEM SET max_worker_processes TO '2';
ALTER SYSTEM SET max_parallel_workers_per_gather TO '1';
ALTER SYSTEM SET max_parallel_workers TO '2';

-- Logging configuration for pgbadger
ALTER SYSTEM SET logging_collector TO 'on';
ALTER SYSTEM SET log_checkpoints TO 'on';
ALTER SYSTEM SET log_connections TO 'on';
ALTER SYSTEM SET log_disconnections TO 'on';
ALTER SYSTEM SET log_lock_waits TO 'on';
ALTER SYSTEM SET log_temp_files TO '0';
ALTER SYSTEM SET lc_messages TO 'C';

-- Adjust the minimum time to collect data
ALTER SYSTEM SET log_min_duration_statement TO '10s';
ALTER SYSTEM SET log_autovacuum_min_duration TO '0';

-- 'stderr' format configuration
ALTER SYSTEM SET log_destination TO 'stderr';
ALTER SYSTEM SET log_line_prefix TO '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ';

EOF

 

Hinweis: Die Änderung der Server-Konfiguration erfolgt, indem die Parameter in die Datei postgresql.auto.conf mittels SQL-Befehl ALTER SYSTEM eingetragen werden.

Ein Teil der Konfigurationsparameter benötigt einen Neustart des Clusters, damit die Änderungen aktiv werden. Dieser wird jetzt noch nicht durchgeführt.

Authentifikation

Die Authentifizierung der Clients am Cluster wird über die Konfigurationsdatei pg_hba.conf gesteuert. Die Abkürzung “hba” steht für “host-based authentication”. Jeder Eintrag stellt den Typ der Verbindung, die IP(-Range) des Clients, den Namen der Datenbank, den Namen des Users und die Art der Authentifizierung dar.

 

vi /var/lib/pgsql/13/data/pg_hba.conf

 

IPv6 und Einträge zur Replikation werden auskommentiert. Ein neuer Eintrag für das im Labor verwendete Subnet 192.168.56.0 wird hinzugefügt.

 

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             192.168.56.0/24         scram-sha-256
# IPv6 local connections:
#host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     all                                     peer
#host    replication     all             127.0.0.1/32            scram-sha-256
#host    replication     all             ::1/128                 scram-sha-256

 

Alle Änderungen aus der postgresql.conf und pg_hba.conf werden nach einem Neustart des Clusters wirksam.

 

exit
sudo systemctl restart postgresql-13

 

Die Installation und Konfiguration des Datenbankservers ist nun abgeschlossen. Der PostgreSQL Server läuft und ist bereit, Verbindungen aus dem Labor Subnet entgegenzunehmen.

 

psql -h 192.168.56.222 -p 5432 -d postgres -U postgres

Mykola Kumanikin Autor

Mykola Kumanikin arbeitet als Consultant für die Proventa AG. Sein Tätigkeitsumfeld umfasst Software-Testing, Ticketmanagement und seit Kurzem Datenbankarchitekturen mit PostgreSQL. Seine fachlichen Erfahrungen sammelte er in den unterschiedlichen Projekten in der Telekommunikationsbranche.

Tags