====== Installation de Postgres 9.0 ======
Cette doc est succinte !
Pour plus de détails, voir les articles de Guillaume, notamment : [[http://www.dalibo.org/hs44_installation_de_postgresql|L'installation de PostgreSQL]] et [[http://www.dalibo.org/hs44_la_replication_par_les_journaux_de_transactions|La réplication par les journaux applicatifs]]
===== Préambule =====
On met ici en place une réplication "Hot Standby en Streaming" entre les deux serveurs de la plate-forme postgresql.fr
* Babar : serveur principal : ip = 212.85.154.68 port = 5433
* Dumbo : serveur secondaire (en mode standby) : ip = 212.85.154.69 port = 5433
===== Compilation =====
Même procédure sur Babar et Dumbo
sudo aptitude install make libreadline-dev
cd /home/damien/
wget http://wwwmaster.postgresql.org/redir/357/f/source/v9.0beta3/postgresql-9.0beta3.tar.gz
tar xzvf postgresql-9.0beta3.tar.gz
cd postgresql-9.0beta3/
./configure
make
sudo make install
sudo su - postgres
cd /var/lib/postgresql/
mkdir 9.0
/usr/local/pgsql/bin/initdb -D /var/lib/postgresql/9.0/
Avant de démarrer le serveur, on modifie port sur 5433 dans postgresql.conf
port 5433
Puis on met en place le script de démarrage. Ne pas oublier de modifier la paramètre PGDATA !
sudo cp /home/damien/postgresql-9.0beta3/contrib/start-script/linux /etc/init.d/postgresql-9.0
sudo vi /etc/init.d/postgresql-9.0
sudo chmod a+x /etc/init.d/postgresql-9.0
sudo update-rc.d postgresql-9.0 defaults
===== Smoke test =====
sudo /etc/init.d/postgresql-9.0 start
sudo su - postgres
/usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433
===== Configuration du Hot Standby =====
sur Dumbo :
sudo passwd postgres
sudo su - postgres
mkdir -p /var/lib/postgresql/babar_wals
Au passage le shmmax de dumbo est trop bas pour la 9.0, on corrige :
sudo su -
echo "kernel.shmmax=134217728" > /etc/sysctl.conf
echo "kernel.shmall=2097152" > /etc/sysctl.conf
sudo sysctl -p
sur Babar, on ouvre une liaison ssh pour exporter les wals :
sudo su - postgres
ssh-keygen
ssh-copy-id postgres@dumbo.postgresql.fr
touch /tmp/tst
scp /tmp/tst postgres@dumbo.postgresql.fr:/var/lib/postgresql/babar_wals
Modification dans le postgresql.conf de Babar
wal_level = hot_standby
archive_mode = on
archive_command = 'scp %p postgres@dumbo.postgresql.fr:/var/lib/postgresql/babar_wals/%f'
puis redémarrage du serveur PG sur Babar
sudo /etc/init.d/postgresql-9.0 restart
On fait un snapshot de la base sur Babar
sudo su - postgres
/usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 -c "select pg_start_backup('init dumbo')"
cp -pr /var/lib/postgresql/9.0 /var/lib/postgresql/9.0-dumbo
/usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 -c "select pg_stop_backup()"
Préparation et export du snapshot sur Babar
sudo su - postgres
cd /var/lib/postgresql/9.0-dumbo
rm postmaster.pid
rm pg_xlog/*
echo 'hot_standby = on' >> postgresql.conf
echo "standby_mode = 'on'" >> recovery.conf
echo "restore_command = 'cp -i /var/lib/postgresql/babar_wals/%f %p'" >> recovery.conf
scp -pr /var/lib/postgresql/9.0-dumbo dumbo.postgresql.fr:/var/lib/postgresql/
Sur dumbo, on charge le snapshot et on démarre en mode recovery/standby
sudo /etc/init.d/postgresql-9.0 stop
sudo mv /var/lib/postgresql/9.0 /var/lib/postgresql/9.0-orig
sudo mv /var/lib/postgresql/9.0-dumbo/ /var/lib/postgresql/9.0
sudo /etc/init.d/postgresql-9.0 start
Il ne reste plus qu'à tester sur Dumbo :
/usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 -c "SELECT pg_is_in_recovery();";
pg_is_in_recovery
-------------------
t
(1 row)
===== Streaming Réplication =====
Sur Babar, ouverture d'un accès vers la pseudo-base "replication" en provenance de Dumbo
Dans postgresql.conf :
listen_addresses = '*'
et dans pg_hba.conf :
Note pour le lecteur : Ceci est une installation de test, le serveur n'a pas vocation a détenir des données sensibles et la sécurité n'est pas un enjeu crucial. Si vous souhaitez utiliser le mode streaming en production, vous devez élever le niveau d'authenitification ( évitez trust ! ) et utiliser
des adresses IP issues d'un réseau privé.
host replication postgres 212.85.154.69/32 trust
... puis redémarrage du serveur sur Babar
Attention ! Il faut également vérifier la conf [[iptables]] !
Sur Dumbo, on teste avec l'option replication=1
/usr/local/pgsql/bin/psql -h babar.postgresql.fr -p 5433 -U postgres replication=1
Sur Babar, on configure le streaming des wals :
max_wal_senders = 5
wal_keep_segments = 32
... et on redémarre le serveur
Sur Dumbo, on complète le recovery.conf pour récupérer les transactions commitées en se connectant à Babar :
primary_conninfo = 'host=212.85.154.68 port=5433 user=postgres'
trigger_file = '/var/lib/postgresql/9.0/failover.trigger'
... et on redémarre le serveur
Il ne reste plus qu'à tester :-)
sur babar :
$ /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 -c "SELECT pg_current_xlog_location()"
pg_current_xlog_location
--------------------------
0/12000BB8
(1 row)
puis sur dumbo
$ /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 -U postgres -c "SELECT pg_last_xlog_receive_location ()"
pg_last_xlog_receive_location
--------------------------
0/12000BB8
(1 row)
Pour transformer Dumbo en maitre en cas de crash de babar, taper la commande suivante sur dumbo:
sudo su - postgres
touch /var/lib/postgresql/9.0/failover.trigger
===== Migration 8.3 -> 9.0 =====
Exemple pour la base drupal6
/usr/local/pgsql/bin/dropdb -h 127.0.0.1 -p 5433 drupal6
/usr/local/pgsql/bin/createdb -h 127.0.0.1 -p 5433 drupal6
pg_dump drupal6 | /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433 drupal6