Postgres als Enterprise-Datenbank

Werbung
Postgres als Enterprise-Datenbank
Michael Banck <[email protected]>
Linux-Stammtisch München, 25.7.2017
Michael Banck <[email protected]>
1 / 51
PostgreSQL
Michael Banck <[email protected]>
2 / 51
PostgreSQL - Überblick
I
Erweiterbares, Objekt-Relationales Datenbanksystem
I
Entstanden als Forschungsprojekt in Berkeley, Community-basierte
Entwicklung seit Mitte der 90er
I
Hersteller-Unabhängig, kommerzieller Support von mehreren
Firmen erhältlich
I
‘’Postgres Global Development Group”, 5 köpfiges Core Team, 3
köpfiges Release Team, ca. 20 Committer
I
Jährlicher Release-Zyklus, 5 Jahre Wartungszeitraum pro Release
I
Vierteljährliche Patch-Releases
I
Keine Copyright-Assignments, Open-Core oder Dual-Lizenzierung
I
BSD/MIT-artige Lizenz
I
Viele (auch proprietäre) Forks
Michael Banck <[email protected]>
3 / 51
PostgreSQL - Forks
Michael Banck <[email protected]>
4 / 51
PostgreSQL - Forks
Michael Banck <[email protected]>
5 / 51
PostgreSQL - Cloud Provider
Michael Banck <[email protected]>
6 / 51
PostgreSQL - Haupt-Features
I
Rock Solid
I
Gute und konsistente Abdeckung des SQL-Standards, sowie
sinnvolle moderne Erweiterungen
I
Kosten-basierter Query-Planer
I
Große Anzahl an Erweiterungen
I
Transaktionale Änderungen an Datenbankstruktur
I
Hohe Anzahl an Treibern für Programmiersprachen
I
Viele verschiedene prozedurale Sprachen
I
Fremddaten-Wrapper (FDW) für den Zugriff auf viele andere
Datenquellen/Datenbanken
Michael Banck <[email protected]>
7 / 51
PostgreSQL - Benutzer
Michael Banck <[email protected]>
8 / 51
Top Feature-Requests 2009
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Einfache, eingebaute Replikation
In-Place Upgrades
Administration/Monitoring
Treiber-Qualität/Wartung
Erweiterungs-Management
Locales/Collationen pro Spalte
Materialisierte und Aktualisierbare Sichten
Parallelisierte Queries
Index-Only Scans
Merge/Upsert Anweisung
Automatische Partitionierung
Hot Standby
Rekursive Abfragen
Window Funktionen
Autonome Transaktionen
Michael Banck <[email protected]>
9 / 51
Top Feature-Requests 2009 - Stand 2017
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Einfache, eingebaute Replikation
In-Place Upgrades
Administration/Monitoring
Treiber-Qualität/Wartung
Erweiterungs-Management
Locales/Collationen pro Spalte
Materialisierte und Aktualisierbare Sichten
Parallelisierte Queries
Index-Only Scans
Merge/Upsert Anweisung
Automatische Partitionierung
Hot Standby
Rekursive Abfragen
Window Funktionen
Autonome Transaktionen
Michael Banck <[email protected]>
10 / 51
PostgreSQL: Zitate von Analysten
I
Donald Feinberg, Gartner:
I
I
Noel Yuhanna, Forrester:
I
I
Postgres functionality has increased greatly and is now more than
sufficient to run both mission-critical and non-mission-critical
applications.
PostgreSQL has the second-largest open source community; has
competitive technology and features and continues to expand its
growth across various industries.
Matt Aslett, 451 Group:
I
I
PostgreSQL is a proven database for enterprise relational
application workloads
Increased commercial offerings and cloud-based functionality are
driving adoption
http://2013.pgconf.de/de/talks/edb-pggermany-2013-v01.pdf
Michael Banck <[email protected]>
11 / 51
Neue Features - Version 9.4
I
Binäres JSON (jsonb) inklusive Indizierung
I
Nebenläufige Aktualisierung von materialisierten Sichten
I
Reduzierte Sperren für einige ALTER TABLE Befehle
I
Konfigurationsänderungen via ALTER SYSTEM SQL Befehl
I
Logical Changeset Generierung / Change Data Capture
I
Replikations-Slots and zeitverzögerte Standbys
I
Erhöhte Skalierbarkeit
Michael Banck <[email protected]>
12 / 51
Neue Features - Version 9.5
I
INSERT .. ON CONFLICT UPDATE/IGNORE (UPSERT)
I
Row-Level Security (RLS)
I
Block-Range Indexe (BRIN)
I
GROUPING SETS, CUBE und ROLLUP für analytische Abfragen
I
Zurückspulen eines alten Masters als neuer Standby
I
ALTER TABLE ... SET LOGGED / UNLOGGED
I
TABLESAMPLE in definierter Zeit
I
IMPORT FOREIGN SCHEMA für Fremddaten-Wrapper
I
Erhöhte Skalierbarkeit
Michael Banck <[email protected]>
13 / 51
Neue Features - Version 9.6
I
Parallele Query-Ausführung
I
Mehr als ein synchroner Standby
I
Verbessertes VACUUM (automatische Freeze Map)
I
Remote Joins/Sorts/UPDATEs/DELETEs im Postgres
Fremddaten-Wrapper
I
Verbesserte Aktivitätssicht auf Locking und Vacuum
I
Erhöhte Skalierbarkeit
Michael Banck <[email protected]>
14 / 51
Neue Features - Version 10
I
Logische Replikation
I
Weitergehende Parallelisierung
I
Native, deklarative Partitionierung
I
Client-basiertes Verbindungs-Failover
I
Quorum-Commit für synchrone Standbys
I
Vereinfachte Konfiguration von Replikation
I
Salted Challenge Response Authentication Mechanism (SCRAM)
I
Verbesserte und Produktiv-Reife Hash-Indexe
I
Schnellere Ausführung von Expressions
I
Spaltenübergreifende Statistiken für den Query-Planer
Michael Banck <[email protected]>
15 / 51
Enterprise Features - Definition
I
Fehler-Toleranz und Daten-Konsistenz
I
Transaktionsisolation zwischen Benutzern
I
Unternehmens-relevante Sicherheits-Features
I
Interoperabilität und Erweiterbarkeit
I
Planbare Major- und Patch-Releases, lange Wartungszyklen
I
Major-Upgrades ohne (längere) Downtime
I
Stabile Replikation und Hochverfügbarkeit
I
Horizontale und vertikale Skalierung
Michael Banck <[email protected]>
16 / 51
Fehler-Toleranz und Daten-Konsistenz
Michael Banck <[email protected]>
17 / 51
Fehler-Toleranz und Daten-Konsistenz
I
I
‘’I manage thousands of databases (PostgreSQL, SQL Server, and
MySQL), and this past weekend we had a massive power surge
that knocked out two APC cabinets. [. . . ] Long story short, every
single PostgreSQL machine survived the failure with zero data
corruption. I had a few issues with SQL Server machines, and
virtually every MySQL machine has required data cleanup and
table scans and tweaks to get it back to ”production” status.”
‘’I had exactly the same experience 3 years ago. Complete power
failure (the stand-by generator took fire) in one small datacenter
(around 500 machines). We had Oracle, SQL Server, DB2,
MySQL, Progress, and of course PostgreSQL. The only database
engine that restarted with no operation required was PostgreSQL.
There were very minimal problems with Oracle (typing recover on
some instances), but we had quite a few problems with the other
engines.”
Michael Banck <[email protected]>
18 / 51
Transaktionsisolation zwischen Benutzern
Michael Banck <[email protected]>
19 / 51
Transaktionsisolation zwischen Benutzern Problemszenario
Es soll sichergestellt werden, dass zusammen immer mindestens 1000
Euro auf den Konten sind
BEGIN;
UPDATE meine_konten SET kstand = kstand - $abhebung
WHERE ktoid = ’Giro’;
SELECT SUM(kstand) FROM meine_konten;
IF (sum >= 1000.00)
COMMIT;
ELSE
ROLLBACK;
Angenommen wir haben je 600 Euro auf zwei Konten (= 1200 Euro)
und heben gleichzeitig von jedem 200 Euro ab (= 800 Euro).
Michael Banck <[email protected]>
20 / 51
Transaktionsisolation zwischen Benutzern Problemszenario
Client 1
Client 2
liest Girokonto, erhält 600
ändert Girokontostand in 400
liest Sparbuch, erhält 600
ändert Sparbuchstand in 400
ermittelt Summe:
400 + 600 = 1000
ermittelt Summe:
400 + 600 = 1000
commit
commit
I
I
Ergebnis: Inkonsistente Daten, Gesamtkontostand ist 800
Lösung: Postgres erlaubt echte serialisierte Transaktionen
Michael Banck <[email protected]>
21 / 51
Transaktionsisolation zwischen Benutzern Serializable Snapshot Isolation
Client 1
Client 2
liest Girokonto, erhält 600
ändert Girokontostand in 400
liest Sparbuch, erhält 600
ändert Sparbuchstand in 400
ermittelt Summe:
400 + 600 = 1000
ermittelt Summe:
400 + 600 = 1000
commit
commit
ERROR: could not serialize
access due to read/write
dependencies among transactions
Michael Banck <[email protected]>
22 / 51
Unternehmens-relevante SicherheitsFeatures
Michael Banck <[email protected]>
23 / 51
Unternehmens-relevante SicherheitsFeatures
I
Authentifizierung
I
I
I
Zugriffskontrolle innerhalb der Datenbank
I
I
I
I
Quell-IP/Nutzer/Datenbank basiert
SCRAM (ab PostgreSQL 10)
Spaltenbasierte Grants
Row-Level Security (RLS)
SELinux Erweiterung
Auditierung
I
I
PGAudit Erweiterung
Objekt-Audit-Logging
Michael Banck <[email protected]>
24 / 51
Unternehmens-relevante SicherheitsFeatures - Row-Level Security
CREATE USER bob;
CREATE USER alice;
CREATE TABLE m1(id int primary key, f1 text, app_user text);
INSERT INTO m1 VALUES(1,’a’,’bob’);
INSERT INTO m1 VALUES(2,’b’,’alice’);
ALTER TABLE m1 ENABLE ROW LEVEL SECURITY;
CREATE POLICY P ON m1 USING (app_user = current_user);
GRANT SELECT (f1, app_user) ON m1 TO bob;
GRANT SELECT (app_user) ON m1 TO alice;
Michael Banck <[email protected]>
25 / 51
Unternehmens-relevante SicherheitsFeatures - Row-Level Security
SELECT * FROM m1;
id | f1 | app_user
----+----+---------1 | a | bob
2 | b | alice
SET SESSION AUTHORIZATION bob;
SELECT f1, app_user FROM m1;
f1 | app_user
----+---------a | bob
SET SESSION AUTHORIZATION alice;
SELECT f1, app_user FROM m1;
FEHLER: keine Berechtigung für Relation m1
Michael Banck <[email protected]>
26 / 51
Unternehmens-relevante SicherheitsFeatures - PGAudit
CREATE ROLE auditor;
SET pgaudit.role = ’auditor’;
CREATE TABLE account
(
id INT,
name TEXT,
password TEXT,
description TEXT
);
GRANT SELECT (password) ON public.account TO auditor;
Michael Banck <[email protected]>
27 / 51
Unternehmens-relevante SicherheitsFeatures - PGAudit
SELECT id, name FROM account;
SELECT password FROM account;
AUDIT: OBJECT,1,1,READ,SELECT,TABLE,
public.account,SELECT password FROM account
Michael Banck <[email protected]>
28 / 51
Unternehmens-relevante SicherheitsFeatures - STIG
Michael Banck <[email protected]>
29 / 51
Interoperabilität und Erweiterbarkeit
Michael Banck <[email protected]>
30 / 51
Interoperabilität und Erweiterbarkeit
I
Federation via Foreign Data Wrappers (FDW)
SQL/MED-Standard
I
I
I
Insbesondere zu anderen Postgres-Instanzen (postgres fdw)
Andere SQL-Datenbanken: MySQL, Oracle, Informix, SQLAlchemy
Erweiterungen (Extensions)
I
I
I
I
Verfügbar seit Postgres 9.1
Reines SQL oder zusätzlich C-basierte Bibliothek
Mächtige API und Hooks
Große, wachsende Anzahl
I
I
I
I
I
I
Zusätzliche Datentypen
Prozedurale Sprachen
Administrative Hilfen
Protokollierung/Auditierung
Foreign-Data-Wrapper
Neue Index-Typen (seit 10)
Michael Banck <[email protected]>
31 / 51
Erweiterungen
Michael Banck <[email protected]>
32 / 51
Enterprise-relevante Erweiterungen Beispiele
I
pglogical - Logische Replikation
I
pgaudit - Auditierung von Ereignissen
I
orafce - Oracle Kompatibilität
I
postgis - Geographische Objekte (Spatial)
I
pg partman - Automatisiertes Management von Partitionierung
I
pgcrypto - Verschlüsselung von Tabellen
I
tsearch/pg trgm - Volltextsuche / Ähnlichkeitssuche
I
sepgsql - SELinux-basierte MAC (Mandatory Access Controls)
I
pgstrom - GPU-Offloading von rechen-intensiven Workloads
Michael Banck <[email protected]>
33 / 51
Replikation und Hochverfügbarkeit
Michael Banck <[email protected]>
34 / 51
Physikalische (Streaming) Replikation
I
I
I
I
I
I
I
I
I
I
I
Transaktionslog wird via Datenbank-Verbindung übertragen
Lesende Abfragen auf Standby möglich (Hot-Standby)
Vorhaltung der benötigten Transaktionslogs auf Primary pro
Standby via Replikations-Slots
Cloning eines neuen Standbys via Basebackup
Switchover, Switchback, Promote und Remastering
Kaskadierende und/oder Zeitverzögerte Replikation
Quorum-basierte synchrone Replikation, optional pro Transaktion
Konsistente lesende Abfragen von synchronen Standbys
Optional zentrale Archivierung von Transaktionslogs
Einfache Konfiguration
Einschränkungen:
I
I
Erfordert gleiche Major-Version auf Primary und Standby
Nur gesamte Instanz replizierbar, keine einzelnen Datenbanken oder
Tabellen
Michael Banck <[email protected]>
35 / 51
Logische Replikations-Lösungen
I
Versions-Unabhängig
I
Einzelne Datenbanken, oder Teile davon replizierbar
I
Trigger-basiert
I
I
I
I
Slony-I
Londiste
Bucardo (Master-Master)
Logical Decoding-basiert
I
I
I
Native Logische Replikation (ab PostgreSQL 10)
pglogical (Erweiterung, ab 9.4)
Bi-Directional Replication (BDR, Master-Master)
Michael Banck <[email protected]>
36 / 51
Logische Replikations-Lösungen Benchmark
Michael Banck <[email protected]>
37 / 51
Hochverfügbarkeit - Definition
I
Schutz gegen Hardware/Software-Ausfall
I
I
I
I
I
Wartung beeinträchtigt Betrieb nicht
I
I
I
I
CPU defekt
Ausfall Netzwerk-Karte
Kernel-Panik
Absturz des Postgres-Prozesses
Neustart Postgres-Prozess nach Patching oder
Konfiguration-Änderung
Major-Versions Upgrade von Postgres
Aktualisierung Betriebssystem
Anwendung ist durchgehend verfügbar
I
Keine langanhaltenden Locks während Schema-Änderungen
Michael Banck <[email protected]>
38 / 51
Hochverfügbarkeit - Failover-Lösungen
I
Pacemaker/Corosync
I
I
pgsql Ressourcen-Agent (Standard)
pgsqlms Ressourcen-Agent (PostgreSQL Automatic Failover, PAF)
I
repmgr
I
pgpool-II
I
Container-basiert:
I
I
I
I
Patroni
Compose Governor
Stolon
Client-basiertes Failover durch Angabe mehrerer Hosts
I
I
PgJDBC (seit 9.3-1100)
libpq (ab Postgres 10)
Michael Banck <[email protected]>
39 / 51
Hochverfügbarkeit - Pacemaker
Beispiel-Setup
Michael Banck <[email protected]>
40 / 51
Hochverfügbarkeit - Pacemaker
Beispiel-Setup
I
Erfahrungen:
I
I
I
I
Mehrere unerwartete Schwenks, teilweise vermutlich wegen LVM
Ressource
Aber auch mehrere erfolgreiche Schwenks bei Hardware-Problemen
bzw. Kernel Panics
Hardware-Ausfall 23.12.2015, 21:00 Uhr, 2:59 Minuten Downtime
Kernel-Panik 12.2.2017, 22:35, 1:02 Minuten Downtime:
<22:35:06>LOG:
<22:36:03>LOG:
<22:36:08>LOG:
Verbindungsende: Sitzungszeit: 0:00:00.042
Benutzer=xxx Datenbank=XYZPROD
Host=10.xxx.xxx.xxx port=54856
Datenbanksystem wurde unterbrochen; letzte
bekannte Aktion am 2017-02-12 22:34:55 CET
Verbindung autorisiert: Benutzer=xxx
Datenbank=XYZPROD SSL aus
Michael Banck <[email protected]>
41 / 51
Hochverfügbarkeit - pgBouncer für
Transparenten Postgres-Neustart
I
PostgreSQL Verbindungs-Proxy
I
I
I
I
I
I
Sehr leichtgewichtig, robust und performant
Entwickelt ursprünglich von Skype, ISC Lizenz, C
Hält eingehende Verbindungen mit PAUSE/RESUME
I
I
I
I
I
Pooler
Queuing
Router
Nach Beendigung aller aktiven Verbindungen kann Postgres z.B.
neu gestartet werden
Anwendung sieht nur verzögerte Verbindung, keine Fehlermeldung
Benötigt kurzlebige Verbindungen/Transaktionen
Kann eingehende Verbindungen je nach Konfiguration an
verschiedene Postgres-Datenbanken routen
Ermöglicht selber On-Line Neustart mit Socket-Übernahme
Michael Banck <[email protected]>
42 / 51
Hochverfügbarkeit - Near-Zero-Downtime
Major Upgrades
I
Logische Replikation (Slony-I, pglogical)
I
I
I
Benötigt doppelte Hardware / doppelten Speicherplatz
Primärschlüssel auf allen Tabellen erforderlich
Work-Flow
I
I
I
I
I
I
Aufsetzen der Replikation
Synchronisierung des Datenbestands inklusive Änderungen
Switchover
Evtl. Switchback bei Problemen
Abschalten des Altsystems
In-Place Upgrades mit pg upgrade
I
I
I
I
I
Internes Postgres Programm
Benötigt keine Primärschlüssel aber zweites Datenverzeichnis
Funktioniert nicht mit allen Erweiterungen/Datentypen
Statistiken müssen nach Upgrade neu angelegt werden
Hardlink-Modus (ohne Switchback Möglichkeit) Downtime ab 10s
I
Skaliert mit Anzahl der Datenbank-Objekte, nicht -Größe
Michael Banck <[email protected]>
43 / 51
Vertikale und Horizontale Skalierung
Michael Banck <[email protected]>
44 / 51
Vertikale und Horizontale Skalierung Definition
I
Vertikale Skalierung: Verbesserte Ausnutzung der vorhandenen
Ressourcen eines Servers
I
I
I
Mehr Transaktionen pro CPU Core
Verwendung von mehreren CPU Cores für einzelne Abfragen
Horizontale Skalierung: Verteilung der Last auf mehrere Server
I
Verteilung von Abfragen auf mehrere Server
I
I
I
Daten auf jedem Server repliziert: Load Balancing
Daten zwischen Servern verteilt: Sharding
Verwendung von mehreren Servern für einzelne Abfragen
I
Massive Parallel Processing
Michael Banck <[email protected]>
45 / 51
Vertikale Skalierung - Erhöhte
Skalierbarkeit 9.3 bis 9.6
https://gauss.credativ.com/~mme/2017/PGConfUS 2017 V01.pdf
Michael Banck <[email protected]>
46 / 51
Vertikale Skalierung - TPC-H Benchmark
20 GB 9.6 Non-Parallel vs. Parallel
Michael Banck <[email protected]>
47 / 51
Vertikale Skalierung - TPC-H Benchmark
300 GB 9.6 vs 10
Michael Banck <[email protected]>
48 / 51
Horizontale Skalierung - Load Balancing
I
Lesende Abfragen werden verteilt
I
Schreibende Abfragen auf Primary
I
Daten auf allen Knoten repliziert
I
Anwendungs-Transparent
I
I
Anwendungsunterstützung
I
I
I
I
pgpool-II
HAProxy
pgBouncer DNS Round-Robin
PgJDBC Verbindungs-Option LoadBalance=true
Parameter remote apply für konsistente Lese-Abfragen (ab 9.6)
Michael Banck <[email protected]>
49 / 51
Horizontale Skalierung - Sharding
I
Lesende und schreibende Abfragen werden verteilt
I
Daten sind (sofern sinnvoll) zwischen Knoten aufgeteilt
I
Normalerweise replizierte Fakt-Tabellen für effiziente Joins
I
Postgres-XL
I
Greenplum
I
CitusDB
I
PL/Proxy
I
In Zukunft vermutlich FDW-basiertes natives Sharding
‘’Towards Built-in Sharding in Community PostgreSQL”
https://www.pgcon.org/2017/schedule/events/1069.en.html
Michael Banck <[email protected]>
50 / 51
Danke für die Aufmerksamkeit - Kontakt
I
Fragen?
I
Michael Banck <[email protected]>
I
http://www.credativ.de
I
http://www.credativ.de/postgresql-competence-center
I
http://www.credativ.de/über-credativ/stellenangebote
I
http://www.credativ.de/blog
Michael Banck <[email protected]>
51 / 51
Herunterladen