Ceci est une ancienne révision du document !
Mise à jour de l'infra postgresql avril 2014
Remarques et todo
- tantor a 2 ip :
- 95.142.160.131
- 95.142.169.64
Une raison particulière à ça ? Le dns pointe sur 95.142.160.131
- Installation d'etckeeper ?
- durée de rétention des sauvegardes ? (5 jours pour le moment)
- passer le listen_addresses à '*' sur les 2 machines pour simplifier la conf ?
- envoi de mails depuis les crons ? si oui à quelle adresse ?
- utilisation des liens symboliques /data plutôt que des vrais chemins /srv/data_(celeste|tantor) pour simplifier et unifier au maximum les scripts ?
- les seuls scripts différents sur les 2 machines sont
- les crontabs
- le
postgresql.conf
(archive_command + éventuellement le listen_addresses) - le
recovery.conf
(primary_conninfo) - le script de sauvegarde PITR (rsync vers le serveur)
Actions
- Suppression de l'instance 8.4 sur tantor
- Migration de celeste vers postgresql 9.3.4
- temps estimé : TODO
-
- log shipping
- streaming replication
- pas de hot standby
- Mise en place d'une sauvegarde PITR de celeste (en plus du pg_dumpall déjà en place)
- Déplacement des sauvegardes pg_dumpall + rsync de celles-ci sur le FS /data/srv_(celeste_tantor) (actuellement sur le FS / )
- Mise en place de rapports pgBadger et pgCluu quotidiens
Détails
Suppression instance 8.4 sur tantor
A priori instance non utilisée, pas de précaution à prendre.
Sauf avis contraire ?
Migration en 9.3
Mise à jour via pg_dumpall.
Temps de l'opération à définir.
La sauvegarde pg_dumpall|gz prend actuellement moins d'une minute et occupe un peu moins de 30 Mo.
La sauvegarde pg_dumpall|gz prend actuellement moins d'une minute et occupe un peu moins de 30 Mo.
tests des applicatifs en 9.3 ?
- Installation de la 9.3
- Configuration du dépôts apt.postgresql.org sur tantor :
- fichier /etc/apt/sources.list.d
deb http://apt.postgresql.org/pub/repos/apt/ squeeze-pgdg main
- + autres étapes, voir http://wiki.postgresql.org/wiki/Apt
- sudo apt-get install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3
Positionner manual dans le fichier /etc/postgresql/9.2/main/start.conf sur celeste le temps de l'opération pour ne pas que l'instance 9.2 ne redémarre automatiquement.
Mise en réplication
Ajout de la clé publique de postgres@tantor sur postgres@celeste(fait par rjuju le 7/04/2014)-
- on utilise les liens symboliques /data point sur /srv/data_(celeste|tantor)
- /data/backups/xlog/
- /data/backups/snapshot/
- Ajout d'un utilisateur de réplication
- CREATE ROLE repli REPLICATION ;
création d'un mot de passe et mise en place d'un fichier .pgpass ou du trust ?
- Modification de la configuration postgres sur celeste :
archive_mode = on archive_command = 'rsync -a %p postgres@tantor.postgresql.fr:/data/backups/postgresql/xlog/%f' wal_level = hot_standby # au cas où on veuille passer en hot_standby checkpoint_completion_target = 0.9 ssl = true log_checkpoints = on log_disconnections = on log_connections = on log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u ' shared_buffers = 128MB wal_buffers = -1 max_wal_senders = 3 port = 5432 max_connections = 100 listen_addresses = 'localhost,217.70.189.115' # ip de celeste lc_messages = 'C' default_text_search_config = 'pg_catalog.french'
- Modification de la configuration postgres sur tantor :
archive_mode = on archive_command = 'rsync -a %p postgres@celeste.postgresql.fr:/data/backups/postgresql/xlog/%f' wal_level = hot_standby # au cas où on veuille passer en hot_standby checkpoint_completion_target = 0.9 ssl = true log_checkpoints = on log_disconnections = on log_connections = on log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u ' shared_buffers = 128MB wal_buffers = -1 max_wal_senders = 3 port = 5432 max_connections = 100 listen_addresses = 'localhost,95.142.160.131' # ip de tantor lc_messages = 'C' default_text_search_config = 'pg_catalog.french'
- Modification du pg_hba.conf sur celeste et tantor :
#connexions locales local all all peer host all all 127.0.0.1/32 md5 host all all ::1/128 md5 # pas de connexion sans ssl hostnossl all all 0.0.0.0/0 reject # on autorise celese et tantor hostssl all postgres 217.70.189.115/32 md5 hostssl all postgres 95.142.160.131/32 md5 # on autorise celeste et tantor à se connecter pour la réplication hostssl replication repli 217.70.189.115/32 md5 hostssl replication repli 95.142.160.131/32 md5 # on rejette tout le reste hostssl all all 0.0.0.0/0 reject
- Création du recovery.conf sur tantor :
standby_mode = on primary_conninfo = 'host=celeste.postgresql.fr port=5432 user=repli' restore_command = 'cp /data/backups/xlog/%f %p' # pas de cleanup comme on a une sauvegarde pitr, ils seront purgés par le cron PITR # pas de trigger file
Mise à jour des scripts de dump
- Création du nouveau répertoire, en tant que postgres, sur celeste :
mkdir -p /data/backups/postgresql mkdir -p /data/backups/postgresql-tantor
- Création du nouveau répertoire, en tant que postgres, sur tantor :
mkdir -p /data/backups/postgresql mkdir -p /data/backups/postgresql-celeste
- Déplacement des anciennes sauvegardes, sur celeste en tant que postgres:
mv /var/backups/postgresql/* /data/backups/postgresql rmdir /var/backups/postgresql
- Déplacement des anciennes sauvegardes, sur tantor en tant que postgres:
mv /var/backups/postgresql-celeste/* /data/backups/postgresql-celeste rmdir /var/backups/postgresql-celeste
- Sur celeste, crontab
postgres
:
0 1 * * * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.daily.sql.gz 0 2 * * 1 pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.weekly.sql.gz 0 3 1 * * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.monthly.sql.gz 0 4 * 1 * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.yearly.sql.gz # export vers Tantor 0 6 * * * rsync -av --delete /data/backups/postgresql/* tantor.postgresql.fr:/data/backups/postgres-celeste/
- Sur tantor, crontab
postgres
:
#0 1 * * * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.daily.sql.gz #0 2 * * 1 pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.weekly.sql.gz #0 3 1 * * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.monthly.sql.gz #0 4 * 1 * pg_dumpall | gzip -c > /data/backups/postgresql/pgsql.yearly.sql.gz # export vers Celeste #0 6 * * * rsync -av --delete /data/backups/postgresql/* celeste.postgresql.fr:/data/backups/postgres-tantor/
Mise en place de la sauvegarde PITR
- Script de sauvegarde PITR sur celeste:
#!/bin/bash SRVSRC="celeste" SRVDEST="tantor" SNAPNAME="snapshot_$(date '+%Y_%m_%d_%H_%M_%S')" PGDIR="/data/var/lib/postgresql/" DESTDIR="/data/backups/snapshot/${SNAPNAME}/" rc=0 psql -c "SELECT pg_start_backup('${SNAPNAME}')" if [ $? -ne 0 ]; then echo "Unable to start backup !" exit 1 fi rsync -avp ${PGDIR} postgres@${SRVDEST}:${DESTDIR} if [ $? -ne 0 ]; then echo "Error during rsync of ${PGDIR} to postgres@${SRVDEST}:${DESTDIR} !" rc=1 fi psql -c "SELECT pg_stop_backup()" if [ $? -ne 0 ]; then echo "Unable to stop backup !" rc=1 fi exit ${rc}
- Script de sauvegarde PITR sur tantor (en cas de switchover) :
#!/bin/bash SRVSRC="tantor" SRVDEST="celeste" SNAPNAME="snapshot_$(date '+%Y_%m_%d_%H_%M_%S')" PGDIR="/data/var/lib/postgresql/" DESTDIR="/data/backups/snapshot/${SNAPNAME}/" rc=0 psql -c "SELECT pg_start_backup('${SNAPNAME}')" if [ $? -ne 0 ]; then echo "Unable to start backup !" exit 1 fi rsync -avp ${PGDIR} postgres@${SRVDEST}:${DESTDIR} if [ $? -ne 0 ]; then echo "Error during rsync of ${PGDIR} to postgres@${SRVDEST}:${DESTDIR} !" rc=1 fi psql -c "SELECT pg_stop_backup()" if [ $? -ne 0 ]; then echo "Unable to stop backup !" rc=1 fi exit ${rc}
- Script de purge PITR (snapshot + WAL) sur celeste (en cas de switchover) et tantor :
#!/bin/bash RETENTION=5 # Suppression des snapshots de plus de $RETENTION jours find /data/backups/postgresql/snapshot/ -maxdepth 1 -type d -mtime +${RETENTION} -print -exec rm -rf {} \; # Suppression des WAL de plus de $RETENTION jours find /data/backups/postgresql/xlog -type f -mtime +${RETENTION} -print -delete
pgBadger + pgCluu
- Installation de sysstat
sudo apt-get install sysstat
TODO