PostgreSQL 13 Server auf CentOS Linux 8
Vorbemerkungen
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.
Installation
Linux
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>
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
Datenbank
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
pgAdmin 4
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