dok:pg13cos8

PostgreSQL 13 Server auf CentOS Linux 8

PostgreSQL ist ein leistungsstarkes Datenbanksystem, bei dem die SQL-Sprache jener von Oracle sehr ähnlich ist. Aus diesem Grund wählten wir PostgreSQL als Datenbankplattform für BPS. Die Ursprünge von PostgreSQL reichen bis ins Jahr 1986 im Rahmen des POSTGRES-Projekts an der University of California in Berkeley zurück und wurden auf der Kernplattform seit mehr als 30 Jahren aktiv weiterentwickelt.

PostgreSQL ist kostenlos und Open Source, sodass Sie es ohne Lizenzkosten für Ihre Produktionsschemata verwenden können. Im Vergleich zu Oracle Express, das Sie auch kostenlos verwenden können, hat PostgreSQL keine Einschränkungen hinsichtlich der CPU-Anzahl, des Speicherlimits, der Datenbankgröße usw. Von einer Reihe von Unternehmen wird kommerzieller Support angeboten, falls Sie diesen benötigen.

Wir verwenden CentOS 8 Stream als Betriebssystem.

Stream ist eine fortlaufend aktualisierte Ausgabe die den Red Hat Ausgaben immer voraus ist, statt wie bei den früheren CentOS Ausgaben mit Punkt (z.B. die letzte Ausgabe 8.3) welche ein Klon der jeweiligen Red Hat Ausgabe war. Das frühere Modell von CentOS war deshalb besser «abgehangen» und möglicherweise stabiler, dafür waren die Pakete darin auch eher veraltet und CentOS wurde von Red Hat selber nicht genutzt und gepflegt.

Die Stream Ausgabe ist stets aktueller und wird von den Red Hat Entwicklern selber gepflegt und genutzt da es jetzt der unmittelbare Vorläufer der kommerziellen Red Hat Linux Versionen ist. So macht der damalige Kauf von CentOS im Jahre 2014 aus Sicht von Red Hat wohl endlich Sinn, ob es auch aus Anwendersicht gut ist muss sich noch zeigen. Jedenfalls entstehen bereits neue Distributionen welche die ehemalige Rolle von CentOS als stabilen Klon von Red Hat Linux übernehmen wollen wie z.B. Rocky Linux.

In diesem Tutorial werden Linux und PostgreSQL in einer virtuellen Maschine unter VMware Workstation 16 Pro installiert. Andere Virtualisierungslösungen wie VMware ESXi, VirtualBox oder Proxmox funktionieren natürlich ebenfalls.

Laden sie CentOS Linux 8 Stream von https://centos.org/ herunter.

Da Version 8 möglicherweise zum Zeitpunkt da sie diese Anleitung lesen nicht mehr die neuste Ausgabe ist, müssen sie ev. einen «Mirror» verwenden und dort zu to centos/8-stream/isos/x86_64/ gehen um die verfügbaren ISO Dateien zu finden, zum Beispiel http://linuxsoft.cern.ch/centos/8-stream/isos/x86_64/ für einen beliebten Schweizer Mirror.

Wählen sie das komplette Installationspaket welches auch das grösste ist, z.B. CentOS-Stream-8-x86_64-20210406-dvd1.iso (9.2GB). Der Download dauert natürlich etwas länger als die kleineren Pakete, dafür ist die Installation dann komfortabler.

Anlegen der Virtuellen Maschine

Kreieren sie in ihrer Virtualisieriungslösung eine neue VM mit folgenden Eckdaten:

  • Installions-Disk Datei (iso): C:\Users\myself\Downloads\CentOS-Stream-8-x86_64-20210406-dvd1.iso
  • Name der virtuellen Maschine: vmpg13
  • Anzahl Prozessoren: 4
  • Argeitsspeicher: 4 GB
  • „Bridged“ Netzwerk verwenden
  • Festplattengrösse: 256 GB (oder nach Bedarf)

Starten sie dann die VM

Installation

Aktualisieren

Öffne mit PuTTY ein SSH Terminal zu „vmpg13“ und melde dich mit dem oben definierten Passwort als «root» an.

Linux Software aktualisieren:

dnf -y update

Werkzeuge installieren:

dnf -y install nano

SSH Schlüssel für root einrichten

# ssh-keygen -t rsa -b 4096
    <enter>
    <enter>
    <enter>

Laden sie ihren persönlichen Schlüssel in PuTTYgen, und kopieren sie den öffentlichen Schlüssel ins Clipboard

Persönlichen Schlüssel in authorized_keys einfügen:

# nano ~/.ssh/authorized_keys
<paste>

Passwort Authentifizierung für SSH deaktivieren:

# nano /etc/ssh/sshd_config
...
PasswordAuthentication no
...

SSH neu starten:

# service sshd restart

Lassen sie für alle Fälle das aktuelle SSH Terminalfenster noch offen.

PuTTY Session mit SSH für root anlegen:

  • Session
    • Host Name: vmpg13
    • Port: 22 / SSH
  • Connection
    • Data
      • Auto-login username: root
    • SSH
      • Auth
        • Private key file: (Pfad zu ihrem PPK)
  • Session
    • Saved sessions: vmpg13 - root
    • Save

Testen ob die automatische Anmeldung funktioniert

Wenn soweit alles OK kann das erste Terminalfenster jetzt geschlossen werden.

Anmelde-Logo hinzufügen

Logo bei http://www.network-science.de/ascii/ erzeugen:

  • Text: vmpg13
  • Font: slant
  • Reflection: no
  • Adjustment: center
  • Stretch: no
  • Width: 80
  • do it!

Logo zum Clipboard kopieren, dann in motd einfügen:

# nano /etc/motd
<paste>

SELinux deaktivieren

# nano /etc/selinux/config
...
SELINUX=disabled
...

Firewall deaktivieren und neu starten

# systemctl stop firewalld
# systemctl disable firewalld
# reboot

Software installieren und Datenbank anlegen

Installation des RPM Verzeichnises:

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

PostgreSQL Module mit älteren Versionen im System ausschalten:

# dnf -qy module disable postgresql

Server Packete installieren:

# dnf -y install postgresql13-server

Datenbank initialisieren:

# /usr/pgsql-13/bin/postgresql-13-setup initdb

Automatischen Start einrichten:

# systemctl enable --now postgresql-13

Setze Password für Benutzer postgres

# su - postgres
$ psql -c "alter user postgres with password 'psql-user-pass'"
$ exit

Service neu starten:

# systemctl restart postgresql-13

Teste Anmeldung vom root Prompt:

# psql -U postgres -h localhost
<password>
\q

Verbindung von ausserhalb ermöglichen

Konfigurationsdateien finden:

# find / -name "postgresql.conf"
# find / -name "pg_hba.conf"

postgresql.conf bearbeiten und listen_address auf * setzen

# nano /var/lib/pgsql/13/data/postgresql.conf
...
listen_addresses = '*'
...

pg_hba.conf bearbeiten und Zeilen für externen Zugriff hinzufügen:

# nano /var/lib/pgsql/13/data/pg_hba.conf
...
# IPv4 all connections from any address:
host    all             all             0.0.0.0/0               scram-sha-256
# IPv6 all connections from any address:
host    all             all             ::/0                    scram-sha-256

Neustart:

# systemctl restart postgresql-13

Verzeichnis für eigene Tablespaces

Das standardmässige Datenverzeichnis ist bei dieser Installation /var/lib/pgsql/13/data

(Sie können sich das aktuelle Datenverzeichnis ggf. mit dem SQL-Befehl show data_directory; anzeigen lassen.)

Für eigenen Tablespaces verwendet man jedoch am besten ein Verzeichnis unter /home, da dieses typischerweise in der grössten Partition liegt:

# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             1.9G     0  1.9G   0% /dev
tmpfs                1.9G  8.0K  1.9G   1% /dev/shm
tmpfs                1.9G  8.5M  1.9G   1% /run
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cs-root   70G  2.6G   68G   4% /
/dev/mapper/cs-home  181G  1.3G  180G   1% /home
/dev/sda1           1014M  194M  821M  20% /boot
tmpfs                374M     0  374M   0% /run/user/0

Wir erzeugen also ein eigenes Datenverzeichnis:

# mkdir -p /home/pgsql/13/data
# chown -R postgres:postgres /home/pgsql/

Erzeugen sie dann ihre Tablespace-Verzeichnisse für BPS jeweils als Benutzer postgres unter /home/pgsql/13/data, z.B:

Eine einzige gemeinsame Tablespace für alle BPS Schemas:

# su postgres
$ mkdir /home/pgsql/13/data/bps

Oder eigene Tablespaces für jedes BPS Schema:

$ mkdir /home/pgsql/13/data/lu_buv
$ mkdir /home/pgsql/13/data/lu_fle
$ mkdir /home/pgsql/13/data/lu_mol
etc.

Separate Tablespaces für Index und Daten wären sinnvoll wenn man diese auf verschiedene Datenträger verteilen kann.

Optimierung

postgresql.conf für folgende Anpassungen bearbeiten.

Sessionsabmeldung während lange laufenden Abfragen vermeiden:

tcp_keepalives_idle = 60
tcp_keepalives_interval = 60

Für gute BPS Leistung auf einer Maschine mit mindestens 2GB RAM, 2 Prozessoren und SSD Festplatte:

max_connections = 20
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 13MB
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
max_parallel_maintenance_workers = 2

Für andere Konstellationen können sie sich hier Parameter-Vorschläge erstellen lassen: https://pgtune.leopard.in.ua

Neustart:

# systemctl restart postgresql-13

Installation und Einrichtung

Installation:

# dnf -y install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-1-1.noarch.rpm
# dnf -y remove pgdg-redhat-repo
# dnf makecache
# dnf -y install pgadmin4

httpd Service einrichten:

# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd

Konfiguration:

# /usr/pgadmin4/bin/setup-web.sh
Email address: <Ihre Email>
Password: <Ihr Passwort>
Retype password: <Ihr Passwort>
The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? y

Erste Schritte in pgAdmin 4

Im Web Browser:

http://vmpg13/pgadmin4

Zur Anmeldung Email und Passort von oben verwenden, dabei Sprache auf Deutsch einstellen.

Neuen Server hinzufügen:

  • Name: vmpg13
  • Hostname/Adresse: vmpg13
  • Benutzername: postgres
  • Passwort: <Password für Benutzer postgresql von oben>
  • Password speichern: optional
  • dok/pg13cos8.txt
  • Zuletzt geändert: 03.05.2021 09:58
  • von ibk