Installation und Konfiguration des PostgreSQL-DBMS

Aus OpenBib Wiki
Wechseln zu: Navigation, Suche

Bis einschließlich Version 2.3 verwendet OpenBib das MySQL-DBMS. Ab Version 3 wird von OpenBib das PostgreSQL-DBMS eingesetzt.

Inhaltsverzeichnis

Installation

OpenBib verwendet verschiedene Datenbanken. Es sind dies

Alle diese Datenbanken werden mit dem DBMS PostgreSQL verwaltet. PostgreSQL installieren Sie mit:

apt-get install postgresql-9.1

Mit diesem Paket wird der Datenbankserver eingerichtet.

Mit

apt-get install postgresql-client-9.1

werden die Dienstprogramme installiert.

Nach der Installation wird der PostgresSQL-Server automatisch gestartet.

Setzen Sie nun ein Passwort <Passwort> für den Benutzer root wie folgt:

root@thorin:~# su - postgres
postgres@thorin:~$ psql
psql (9.1.5)
Type "help" for help.

postgres=# create role root with superuser login password '<Passwort>';
CREATE ROLE
postgres=# 

Danach müssen sie die Authentifizierung in der Datein pg_hba.conf konfigurieren:

postgres@sake:~$ vi /etc/postgresql/9.1/main/pg_hba.conf

Dort ändern:

local   all             postgres                                peer
local   all             all                                     peer

in

local   all             postgres                                peer
local   all             all                                     md5

Danach PostgreSQL restarten:

root@thorin:~# /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.1 database server 

Jetzt kann sich jeder Nutzer mit dem Passwort anmelden durch

psql -U root -W openbib_system

Konfiguration

Wesentlich beim Anlegen einer Datenbank ist die Spezifikation von UTF-8 als zu verwendendes Encoding. Manuell geschieht dies durch

/usr/bin/createdb -U root -W -E UTF-8 -O root <datenbank>

Performance-Tuning

Allgemeines

Zum Performance-Tuning der OpenBib zugrundeliegenden Datenbank PostgreSQL sollten folgende Maßnahmen durchgeführt werden:

mount option 'noatime'
Die Partitionen, auf denen sich die Datenbanken befinden sollte in der fstab direkt mit noatime gemounted werden, um unnötige FS-Lookups zu vermeiden. Konkret wird mit dieser Option die Aktualisierung der letzten Zugriffszeit in den Inodes übersprungen.

pgtune

Die Anpassung der PostgreSQL-Parameter an die eingesetzte Server-Hardware kann man sehr einfach mit dem Programm pgtune vornehmen.

apt-get install pgtune

Als Argumente werden dem Programm die Konfigurationsdatei postgresql.conf sowie die notwendige Anzahl von Server-Verbindungen übergeben

root@thorin:/etc/postgresql/9.1/main>pgtune -i postgresql.conf -c 300
# -----------------------------
# PostgreSQL configuration file
# -----------------------------
[...]
default_statistics_target = 50 # pgtune wizard 2012-06-26
maintenance_work_mem = 896MB # pgtune wizard 2012-06-26
constraint_exclusion = on # pgtune wizard 2012-06-26
checkpoint_completion_target = 0.9 # pgtune wizard 2012-06-26
effective_cache_size = 11GB # pgtune wizard 2012-06-26
work_mem = 12MB # pgtune wizard 2012-06-26
wal_buffers = 8MB # pgtune wizard 2012-06-26
checkpoint_segments = 16 # pgtune wizard 2012-06-26
shared_buffers = 3584MB # pgtune wizard 2012-06-26
max_connections = 600 # pgtune wizard 2012-06-26

Auf der Standardausgabe wird auf Grundlage der bereits existierenden postgresql.conf dann eine entsprechend modifizierte Version ausgegeben.

Nach Umkopieren und Neustart des Servers werden diese Einstellungen aktiv. Allerdings reicht mit hoher Wahrscheinlichkeit der benötige Shared Memory nicht aus. Eine typische Fehlermeldung lautet:

root@thorin:/root>/etc/init.d/postgresql stop
* Stopping PostgreSQL 9.1 database server                                                                                                 [OK ] 
root@thorin:/opt/openbib/autoconv/data/inst001>/etc/init.d/postgresql start
* Starting PostgreSQL 9.1 database server
* The PostgreSQL server failed to start. Please check the log output:
2012-06-26 09:42:49 CEST FATAL:  could not create shared memory segment: Das Argument ist ung?ltig
2012-06-26 09:42:49 CEST DETAIL:  Failed system call was shmget(key=5432001, size=3868942336, 03600).
2012-06-26 09:42:49 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX  parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 3868942336 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
       If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
       The PostgreSQL documentation contains more information about shared memory configuration.

Dann muss der entsprechende Wert - hier 3868942336 - systemseitig erhöht werden:

sysctl -w kernel.shmmax=3868942336
sysctl -p

bzw. in

/etc/sysctl.d/30-postgresql-shm.conf

Die Verwendung von pgtune ist ein erster Schritt hin zu einer optimalen Konfiguration. Dennoch müssen entsprechend der tatsächlichen Belastung des PostgreSQL-Servers im Betrieb weitere Anpassungen noch erfolgen.

pgbouncer

Zur Steigerung der Performance kann mittels pgbouncer ein Pooling der Verbindungen zur Datenbank und ein schnellerer Verbindungsaufbau verwirklicht werden.

Dazu muss das Paket installiert

apt-get install pgbounder

und konfiguriert werden. Wesentliche Parameter in /etc/pgbouncer/pgbouncer.ini

[databases]
* = host=127.0.0.1 port=5432

Damit wird festgelegt, welche Datenbank auf welchem Server angesprochen wird. * steht im Beispiel für alle Datenbanken

 listen_port = 6432

Als Port kann ein beliebiger Wert eingetragen werden. Als Analogie zum Standard-PostgreSQL-Port bietet sich 6432 an.

auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt

Die Authentifizierung geschieht z.B. via md5. Berechtigte Nutzer werden mit ihren md5-Passworten in userlist.txt eingetragen.

Mittels dieser Einträge kann dann auch der Zugriff auf den Admin/Statistikbereich von pgbouncer geregelt werden

admin_users = root,openbib
stats_users = root,openbib
pool_mode = session

Der Poolmode regelt, wie lange eine aktive Verbindung zur Datenbank gehalten werden soll. Infrage kommen session und transaction

max_client_conn = 1800
; defalt pool size.  20 is good number when transaction pooling
; is in use, in session pooling it needs to be the number of
; max clients you want to handle at any moment
default_pool_size = 1800

Für den pool_mode session wird die in PostgreSQL konfigurierte maximale Verbindungszahl eingetragen.

Wichtg!

Damit die Filedescriptoren nicht ausgehen, muss via limits der Standardwert erhöht werden. Dazu die Datei

/etc/security/limits.d/postgresql.conf 

anlegen mit dem Inhalt

postgres soft nofile 65536
postgres hard nofile 65536
root soft nofile 65536
root hard nofile 65536

Anstelle eines Usernamens kann auch ein Wildcard * verwendet werden. Allerdings gilt der für alle Nutzer, aber nicht root!


Dann neu Einloggen und Dienste restarten

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge