On met ici en place une réplication “Hot Standby en Streaming” entre les deux serveurs de la plate-forme postgresql.fr
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
sudo /etc/init.d/postgresql-9.0 start sudo su - postgres /usr/local/pgsql/bin/psql -h 127.0.0.1 -p 5433
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)
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 :
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
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