21.05.2016 Views

PostgreSQL et la streaming replication

jdl_2016-05

jdl_2016-05

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>PostgreSQL</strong> <strong>et</strong> <strong>la</strong><br />

<strong>streaming</strong> <strong>replication</strong><br />

Stefan Fercot<br />

19 mai 2016


Sommaire<br />

• <strong>PostgreSQL</strong>, c’est quoi ?<br />

• Instal<strong>la</strong>tion<br />

• Fonctionnement interne<br />

• Méthodes de sauvegarde (dumps, point-in-time recovery, <strong>streaming</strong> <strong>replication</strong>)<br />

• Streaming <strong>replication</strong> : r<strong>et</strong>our d’expérience d’utilisation dans un environnement de<br />

type « cluster »<br />

• Quelques chiffres des volumétries gérées


<strong>PostgreSQL</strong>, c’est quoi ?


<strong>PostgreSQL</strong><br />

• Système de base de données libre<br />

• Au sein des différentes communautés libres, <strong>PostgreSQL</strong> est souvent utilisé comme<br />

exemple à différents niveaux<br />

• qualité du code<br />

• indépendance des développeurs <strong>et</strong> gouvernance du proj<strong>et</strong><br />

• réactivité de <strong>la</strong> communauté<br />

• stabilité <strong>et</strong> puissance du logiciel<br />

• Tous ces atouts font que <strong>PostgreSQL</strong> est désormais reconnu <strong>et</strong> adopté par des milliers de<br />

grandes sociétés de par le monde


Histoire<br />

• L'origine du nom <strong>PostgreSQL</strong> remonte à <strong>la</strong> base de données Ingres, développée à l'université de Berkeley<br />

par Michael Stonebraker. En 1985, il prend <strong>la</strong> décision de reprendre le développement à partir de zéro <strong>et</strong><br />

nomme ce nouveau logiciel Postgres, comme raccourci de post-Ingres.<br />

• En 1995, avec l'ajout du support du <strong>la</strong>ngage SQL, postgres fut renommé Postgres95 puis <strong>PostgreSQL</strong>.<br />

• Aujourd'hui, le nom officiel est “<strong>PostgreSQL</strong>” (prononcez “post - gresse - Q - L”). Cependant, le nom<br />

“Postgres” est accepté comme alias.<br />

• http://www.postgresql.org/about/history


Communauté<br />

• ~ 2000 : Communauté japonaise (aujourd’hui plus de 3000 membres)<br />

• 2004 : Communauté francophone (http://www.postgresql.fr/)<br />

• 2006 : « Software in the Public Interest »<br />

• 2007 : Communauté italienne<br />

• 2008 : <strong>PostgreSQL</strong> Europe <strong>et</strong> US<br />

• 2009 : Boom des PGDay


Versions<br />

• 2010 : v9.0 → réplication intégrée<br />

• version 9.1.22, 9.2.17, 9.3.13, 9.4.8, 9.5.3<br />

• http://www.postgresql.org/support/versioning/


Références<br />

• Sponsors<br />

• http://www.postgresql.org/about/sponsors/<br />

• Skype, VMware, Dalibo, Fujitsu, RedHat<br />

• Utilisateurs clé<br />

• http://www.postgresql.org/about/users/<br />

• U.S. General Services Administration, Apple, Cisco,…<br />

• Yahoo, Instagram, Za<strong>la</strong>ndo, TripAdvisor<br />

• Le Bon Coin (http://www.postgresqlfr.org/temoignages:le_bon_coin)


Instal<strong>la</strong>tion


Méthodes<br />

• Sources<br />

• Doc : http://docs.postgresql.fr/9.5/instal<strong>la</strong>tion.html<br />

• Téléchargement : http://www.postgresql.org/download/<br />

• Yum<br />

• Doc : https://wiki.postgresql.org/wiki/YUM_Instal<strong>la</strong>tion


• Instal<strong>la</strong>tion moteur<br />

• Création utilisateur<br />

• Création du répertoire de données<br />

• Démarrage<br />

Etapes


Yum


Fonctionnement interne


PGdata


Configuration<br />

• pg_hba.conf : règles d'authentification<br />

• pg_ident.conf : configuration mécanisme d'authentification extérieur<br />

• postgresql.conf : paramétrage


Mémoire<br />

• Données en cache : shared_buffers<br />

• Mémoire de travail des transactions : work_mem


WAL<br />

• Write Ahead Logs, (appelés parfois WAL ou XLOG)<br />

• Journaux de transactions<br />

• Garantie contre les pertes de données<br />

• Modification de données sur disque en 2 temps<br />

• Mécanisme d’archivage/recyc<strong>la</strong>ge<br />

• http://www.dalibo.org/glmf108_postgresql_<strong>et</strong>_ses_journaux_de_transactions


Checkpoint<br />

• Processus s’assurant que tous les fichiers de données, écrits sur le disque,<br />

ont été mis à jour pour refléter l'information des journaux de transaction<br />

• checkpoint_timeout = 15min<br />

• checkpoint_compl<strong>et</strong>ion_targ<strong>et</strong> = 0.9


ACID<br />

• Atomicité (Atomic)<br />

• Une transaction est entière : « tout ou rien ».<br />

• Cohérence (Consistent)<br />

• Une transaction amène le système d'un état stable à un autre.<br />

• Iso<strong>la</strong>tion (Iso<strong>la</strong>ted)<br />

• Les transactions n'agissent pas les unes sur les autres.<br />

• Durabilité (Durable)<br />

• Une transaction validée provoque des changements permanents.


MultiVersion Concurrency Control (MVCC)<br />

• MVCC (Multi Version Concurrency Control) est le mécanisme interne de<br />

<strong>PostgreSQL</strong> utilisé pour garantir <strong>la</strong> cohérence des données lorsque plusieurs<br />

processus accèdent simultanément à <strong>la</strong> même table.<br />

• Chaque transaction travaille dans son image de <strong>la</strong> base, cohérent du début à <strong>la</strong> fin<br />

de ses opérations.<br />

• Une lecture ne bloque pas une écriture<br />

• Une écriture ne bloque pas une lecture<br />

• Une écriture ne bloque pas les autres écritures…<br />

• … sauf pour <strong>la</strong> mise à jour de <strong>la</strong> même ligne.


Méthodes de sauvegarde


Méthodes<br />

• Sauvegarde à froid des fichiers (ou physique)<br />

• Sauvegarde à chaud en SQL (ou logique)<br />

• Sauvegarde à chaud des fichiers (PITR)


pg_dump<br />

• Sauvegarde une base de données à chaud<br />

• Sauvegarde complète ou partielle<br />

• pg_dump est l'outil le plus utilisé pour sauvegarder une base de données<br />

<strong>PostgreSQL</strong><br />

• pg_dump b1 > b1.dump<br />

• sauvegardera <strong>la</strong> base b1 de l'instance locale sur le port 5432 dans un fichier b1.dump


Point In Time Recovery<br />

• Sauvegarde traditionnelle<br />

• sauvegarde pg_dump à chaud<br />

• sauvegarde des fichiers à froid<br />

• Insuffisant pour les grosses bases<br />

• long à sauvegarder<br />

• encore plus long à restaurer<br />

• Perte de données potentiellement importante<br />

• car impossible de réaliser fréquemment une sauvegarde


Point In Time Recovery<br />

• Les journaux de transactions contiennent toutes les modifications<br />

• Il faut les archiver<br />

• … <strong>et</strong> avoir une image des fichiers à un instant t<br />

• La restauration se fait en restaurant c<strong>et</strong>te image<br />

• … <strong>et</strong> en rejouant les journaux<br />

• entièrement<br />

• partiellement (ie, jusqu'à un certain moment)<br />

• PITR = archivage continu <strong>et</strong> récupération d'un instantané


Point In Time Recovery<br />

• archive_command = 'cp %p /mnt/backup/WAL/%f‘<br />

• archive_timeout = 900<br />

• archive_mode = on<br />

• wal_level = archive


Streaming <strong>replication</strong><br />

• Serveur standby (read-only) se connecte au primaire<br />

• Serveur primaire envoie au standby les enregistrements de WAL dès qu'ils<br />

sont générés, sans attendre qu'un fichier de WAL soit rempli<br />

• Archivage ou wal_keep_segments en cas de forte désynchronisation<br />

• Asynchrone par défaut


Streaming <strong>replication</strong>


Streaming <strong>replication</strong>


Streaming <strong>replication</strong><br />

• Etape 1<br />

• Créer dossier partagé entre les serveurs maître-esc<strong>la</strong>ve<br />

• Etape 2<br />

• Créer utilisateur <strong>PostgreSQL</strong> pour <strong>la</strong> réplication<br />

• sudo -u postgres createuser -SRD --<strong>replication</strong> -P <strong>replication</strong><br />

• Autoriser l’accès dans pg_hba.conf<br />

• host <strong>replication</strong> <strong>replication</strong> IP_esc<strong>la</strong>ve/32 md5


Streaming <strong>replication</strong><br />

• Etape 3<br />

• Modifier postgresql.conf sur le maître<br />

• listen_addresses = '*'<br />

• hot_standby = on<br />

• wal_level = hot_standby<br />

• archive_mode = on<br />

• archive_command = 'cp %p /DIR/%f‘ #Répertoire DIR partagé entre les serveurs maître-esc<strong>la</strong>ve<br />

• archive_timeout = 900<br />

• max_wal_senders=5<br />

• wal_keep_segments = 32<br />

• wal_sender_timeout = 60s


Streaming <strong>replication</strong><br />

• Etape 4<br />

• Initier <strong>la</strong> réplication sur l’esc<strong>la</strong>ve<br />

• systemctl stop postgresql-9.5<br />

• rm -rf /PGdata/*<br />

• pg_basebackup -h IP_maître -U <strong>replication</strong> -D PGdata -X stream -P


Streaming <strong>replication</strong><br />

• Créer recovery.conf sur l’esc<strong>la</strong>ve<br />

• standby_mode = 'on'<br />

• primary_conninfo = 'host=IP_maître port=5432 user=<strong>replication</strong> password=xxx application_name=NAME'<br />

• restore_command = 'cp /DIR/%f %p'<br />

• recovery_targ<strong>et</strong>_timeline = '<strong>la</strong>test'<br />

• archive_cleanup_command = 'pg_archivecleanup /DIR %r'<br />

#Répertoire DIR partagé entre les serveurs maître-esc<strong>la</strong>ve


R<strong>et</strong>our d’expérience


Streaming <strong>replication</strong><br />

• Utilisation dans un environnement de type « cluster »<br />

• Haute-disponibilité<br />

• Bascule automatique des ressources avec RHEL cluster<br />

• http://cluster<strong>la</strong>bs.org/wiki/PgSQL_Replicated_Cluster


Streaming <strong>replication</strong>


Quelques chiffres des volumétries gérées<br />

• Le Bon Coin : ~3To (160 cœurs, 1To RAM)<br />

• Max 250Go, moyenne 150Go, accroissement annuel 30Go<br />

• Exemples<br />

• 200Go : 24 cpu (6 cores physiques * 2 logique * 2 hyper-threading), 96G ram<br />

• 250Go : 8 vcpu, 40G ram. 200-500 iops


Demo


Sources<br />

• Formations http://www.dalibo.com/<br />

• http://docs.postgresql.fr<br />

• http://cluster<strong>la</strong>bs.org/wiki/PgSQL_Replicated_Cluster


Questions ?

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!