web-dev-qa-db-fra.com

Automatiser le basculement dans PostgreSQL 9.1

Comment configurer deux serveurs identiques pour le basculement automatique dans PostgreSQL 9.1.

OS

Centos 5
PostgreSQL 9.1 compilé à partir de la source
Le compte utilisateur postgres existe sur les deux machines et possède une clé sans mot de passe ssh pour se connecter aux deux machines.

Ma configuration actuelle:

Configuration du serveur maître:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 Host  replication   all   10.0.66.1/32      trust
 Host  replication   all   10.0.66.2/32      trust

serveur de secours

postgresql.conf et pg_hba.conf sont identiques à ce qui est configuré sur le serveur maître.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'Host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Grâce à hzRoot, je comprends maintenant comment basculer le serveur de veille en maître.

À l'aide des commandes suivantes, je peux synchroniser le nouvel esclave avec le nouveau maître, puis obtenir la sauvegarde et l'exécution de la réplication.

Sur le nouveau maître (10.0.66.2)

  1. su - postgres
  2. touchez trigger.txt dans/opt/pgsql91/data /
  3. recovery.conf devient recovery.done
  4. psql -c "; SELECT pg_start_backup ('backup', true)";
  5. rsync -a -v -e ssh/opt/pgsql91/data/10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; SELECT pg_stop_backup ()";

Sur le nouvel esclave (10.0.66.1)

  1. créer le fichier recovery.conf: cp recovery.done vers recovery.conf
  2. vi recovery.conf changer l'adresse IP: primary_conninfo = 'Host = 10.0.66.2'
  3. démarrer postgresql

Mes questions sont donc maintenant:

  1. Est-ce la bonne façon de changer de rôle?
  2. Quelqu'un at-il automatisé ce processus, si oui, qu'avez-vous fait?
  3. Si la réplication synchrone est activée, j'ai remarqué que le nouveau serveur maître ne valide aucune transaction car il attend que l'esclave réponde. Il n'y a cependant pas d'esclave car sur l'autre serveur, l'ancien maître est en panne. Est-ce correct ou dois-je désactiver temporairement la réplication synchrone pendant que le nouvel esclave est arrêté?
18
Craig Efrein

Découvrez repmrg :

repmgr est un ensemble d'outils open source qui aide les administrateurs de base de données et les administrateurs système à gérer un cluster de bases de données PostgreSQL.

En tirant parti de la fonction de redondance d'UC introduite dans PostgreSQL 9, repmgr simplifie considérablement le processus de configuration et de gestion de la base de données avec des exigences de haute disponibilité et d'évolutivité.

repmgr simplifie l'administration et la gestion quotidienne, améliore la productivité et réduit les coûts globaux d'un cluster PostgreSQL en:

  • surveiller le processus de réplication; permettant aux administrateurs de base de données d'émettre des données élevées
  • les opérations de disponibilité telles que les commutations et les basculements.

Cela fait deux choses:

  1. repmgr: programme de commande qui effectue des tâches sur votre cluster puis se ferme
  2. repmgrd: démon de gestion et de surveillance qui surveille le cluster et peut automatiser les actions à distance.

Pour le basculement automatique, repmgrd fait l'affaire et n'est pas un SPOF dans votre réseau, comme pgPool. Cependant, il est toujours important de surveiller tous les démons et de les récupérer après l'échec.

La version 2.0 est sur le point d'être publiée, y compris les RPM.

8
Frank Heikens

dans votre fichier recovery.conf, vous devez ajouter une ligne qui indique à postgres de basculer du maître à l'esclave. vous devez ajouter

trigger_file = '/any/file/to/trigger'

lorsque vous créez ce fichier sur un chemin donné. les nœuds vont changer. (le fichier n'inclut rien, c'est juste un déclencheur)

vous pouvez trouver des informations supplémentaires sur réplication en streaming

d'autre part, il sera peut-être possible de le créer automatiquement avec quelques astuces mais utiliser des outils de surveillance et faire du basculement manuel sera mieux ..

4
sftsz

Quelqu'un a-t-il envisagé d'utiliser pgpool-II pour cela?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

J'installe la réplication pour PostgreSQL. Il semble que la partie délicate se passe lorsque le vieux maître revient.

D'après ce que j'ai lu, pgpool semble pouvoir automatiser la plupart de cela. Cependant, je ne suis pas sûr de tirer parti des fonctionnalités de réplication déjà présentes dans PostgreSQL 9.1.

0
Paulo SantAnna