PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/08/2018 11:09:29

calimero
Membre

[RESOLU] Load balancing / Failover PGPool2 et Master/Slave Pg10

Bonjour,

J'ai monté un cluster Master/Slave en utilisant PGPool2 et PostgreSql10. La configuration est faite ainsi

2 Serveurs Postgres
1 Master
1 Slave
La réplication est faite directement par Postgresql par l'application des logs sur le slave.

2 serveurs PgPool2
1 Master
1 Slave
Activation de heartbeat / watchdog + mise en place d'une IP virtuelle pour le load balancing et le failover

Le cluster fonctionne bien, si je stoppe le pgpool master, le slave prend le relais, quand je redémarre le master il devient bien slave. Si la base postgres Master tombe j'ai mis en place le FailOver qui promeut la base Slave en Master. Je n'ai pas encore mis en place la reconstruction du cluster Postgres suite au passage du Slave en Master.

Je voulais aller plus loin dans le load balancing en jouant sur les paramètres de Pgpool dans la section  MASTER/SLAVE MODE

Le paramètre sr_check_period à se que je comprends permet d'activer la vérification de la synchro entre le master et le slave. Si la Synchro n'est pas "bonne" alors Pgpool envoie toutes les demandes sur le master.

Quand j'active ce paramètre je me prends des erreurs liées au changement de nom de fonctions entre Postgres 9 et postgres 10.
Pgpool2 fais encore appel aux fonctions pg_current_xlog_insert_location(), pg_last_xlog_replay_location().... mais celles si n'existent plus sur postgres 10.
J'ai tenté de contourner le pb en créant ces fonctions mais cela n'a rien changé. J'utilise bien le user postgres pour faire la vérification et j'ai bien créé les fonctions avec ce user.

CREATE FUNCTION pg_catalog.pg_current_xlog_location() RETURNS pg_lsn AS $$
BEGIN
    RETURN pg_current_wal_lsn();
END;
$$ LANGUAGE plpgsql;


Dans les logs pgpool je vois cela :

Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 21004:CONTEXT:  while checking replication time lag
Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 27005:LOG:  worker child process with pid: 21004 exits with status 256
Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 27005:LOG:  fork a new worker child process with pid: 21005
Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 21005:FATAL:  Backend throw an error message
Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 21005:DETAIL:  Exiting current session because of an error from backend
Aug  2 09:28:07 PGPool2-INS01 pgpool[27005]: 2018-08-02 09:28:07: pid 21005:HINT:  BACKEND Error: "la fonction pg_current_xlog_location() n'existe pas"

J'ai tenté de voir comment changer cela directement dans pgpool mais impossible car c'est compilé dans le binaire.

Auriez-vous des idées pour solutionner/contourner ce soucis s'il vous plaît ?

Merci d'avance pour vos commentaires

Cali

Dernière modification par calimero (02/08/2018 13:31:53)

Hors ligne

#2 02/08/2018 11:37:17

gleu
Administrateur

Re : [RESOLU] Load balancing / Failover PGPool2 et Master/Slave Pg10

Utiliser une version à jour de pgpool semble la solution la plus simple. Ce problème a été corrigé le 19 juin 2017. Quelque chose me dit que vous n'avez pas la dernière version wink

Hors ligne

#3 02/08/2018 13:30:21

calimero
Membre

Re : [RESOLU] Load balancing / Failover PGPool2 et Master/Slave Pg10

Bonjour Guillaume,

En effet je viens de voir que je n'étais pas en dernière version....Maintenant cela fonctionne bien.
Merci beaucoup smile

Cordialement

Cali

Hors ligne

Pied de page des forums