2017-07-05 21 views
2

Je veux utiliser Postgresql dans Windows Server 2012 R2 pour un notre projet où il peut être temps de disponibilité 24/7.Deux instances de maître sur le même base de données

Je voudrais demander à la communauté si je peux avoir 2 instances maître dans 2 serveurs différents A & B et ils vont «travailler» sur le même DB situé dans un stockage de fichiers partagés en lan. Toujours une instance maître sur le serveur A sera en ligne et quand elle est déconnectée pour une raison quelconque (je suppose) un script powershell reconnaîtra que le service postgresql s'est arrêté et démarrera le service dans le serveur B. Le même script va vérifier qu'un seul service dans les serveurs A & B travaille pour éviter les conflits.

Je voudrais demander si cela est possible ou une meilleure approche pour ma configuration. (Je ne peux pas utiliser la réplication car lorsque le serveur A arrête le serveur B est en mode lecture seule chose que je ne veux pas)

Répondre

3

Si vous parvenez à démarrer deux instances de PostgreSQL dans le même répertoire de données, la corruption de données sérieuses se produira. Normalement, il y a un fichier postmaster.pid qui empêche cela, mais un processus serveur PostgreSQL sur une machine différente qui accède au même système de fichiers sera heureusement dissocié après avoir craché des messages de log, pensant qu'il a été laissé derrière un crash.

Alors vous marchez vraiment sur la glace mince avec une solution comme ça.

Une autre question que vous ne pensez pas est ce script qui est censé vérifier si le serveur est toujours en cours. Que faire si ce script échoue, parce que, par exemple, la connexion réseau entre les deux serveurs est en panne, mais le serveur est encore en cours d'exécution heureusement? Un tel scénario “ split brain ” entraînera la corruption de données avec votre configuration.

Une autre mise en garde: puisque vous semblez utiliser Windows (? Powershell), vous imaginez probablement un système de fichiers CIFS lorsque vous parlez de stockage partagé. Un Windows “ partage réseau ” est pas un système de fichiers fiable — la dernière fois que j'ai vérifié, il n'a pas honoré _commit.

Création d'un cluster de basculement fiable est plus difficile que vous le pensez, et je vous recommande de vérifier les solutions existantes avant d'essayer de rouler votre propre.

+0

D'abord merci pour la réponse. Vous avez raison et c'est pourquoi je demande ici, mais je n'ai pas réussi à trouver une solution existante fonctionnant dans le serveur de Windows. Tous les outils sont pour les systèmes Linux. La seule solution que j'ai trouvée comme je l'ai mentionné ci-dessus est avec wal archivage, un serveur où le serveur esclave est toujours en mode lecture seule lorsque le maître est en panne et ne peut pas travailler avec notre application. Avez-vous une autre configuration à l'esprit de suggérer dans Windows environnement? –

+0

Je ne fais pas Windows ... Avez-vous regardé la [page Wiki PostgreSQL] (https://wiki.postgresql.org/wiki/Clustering) qui répertorie les solutions de clustering? Peut-être que [this] (https://wiki.postgresql.org/wiki/Shared_Storage) est intéressant aussi. –

+0

Oui, ce senario je le décris ci-dessus mais je ne suis pas sûr qu'il fonctionnera bien et je voulais un deuxième avis! –