Vous n'êtes pas identifié(e).
bonjour,
j'ai un soucis quand je crée mon cluster patroni.... quand je crée ma 2eme VM elle ne se rattache pas à mon cluster et j’ai un message dans la log patroni qui dit :
" CRITICAL: system ID mismatch, node ig9-cluster4 belongs to a different cluster: 7191794644507281311 != 7202911683523250114"
mes fichiers patroni.yml sont identique avec juste le name et connect_address qui chage entre la 1ere vm et la 2eme
j'arrive pas à comprend le problème...
mon architecture: rhel8 et postgresql14: 3 vm etcd en cluster et 3 vm patroni/postgresql .....
pour info j ai deja un cluster patroni rattaché à mon cluster etcd qui lui fonctionne bien ....
merci d'avance pour votre aide car ça fait 1 semaine que je tourne en rond la dessus ....
Hors ligne
Bonjour,
Cela veut dire qu'apparemment vous essayez de mettre en réplication physique 2 instances différentes, le system ID étant généré aléatoirement lors d'un initdb mais étant préservé lors de la réplication physique (type pg_basebackup).
Julien.
https://rjuju.github.io/
Hors ligne
bonjour,
merci de votre réponse ... j'avais bien compris mais comment faire pour rattacher ma vm alors ou comment faire pour que ma base ai le même ID ?
j'ai essayé de supprimé le noyau postgresql , supprimé tout les package et reinstaller et j ai toujours le meme probleme ......
merci d avance pour vos aides....
Hors ligne
Impossible de répondre sans savoir ce que vous faites exactement. Je n'ai que très peu utilisé patroni mais au vu de l'erreur j'imagine que c'est patroni qui devrait se charger de créer le réplica en fonction de ses besoins, alors que vous lui fournissez une instance pré-existante. Il faudrait supprimer l'instance sur la 2nde VM (arrêter postgres et supprimer le pgdata par exemple), et y démarrer patroni avec la configuration adéquate.
Julien.
https://rjuju.github.io/
Hors ligne
merci rjuju,
Suppression de l instance sur la 2eme VM ( postgresql ne tourne pas car patroni ne se lance pas) suppression de pgdata , et redemarrer patroni j'ai deja fait. Le resultat de ça: patroni demarre bien mais ne rattache pas de postgresql et le pgdata reste vide.....
alors je te met comment ce passe l'installation....
je crée mon serveur via ansible ou sont descendu les package postgresql14-libs, postgresql14 et postgresql14-server.
apres cela j install les packages python3-certifi, patroni-etcd et jq...
je crée le fichier patroni.service et le fichier patroni.yml .
Dans le fichier patroni.yml je met bien la bonne adresse ip correspondant à mon serveur en face de connect_address
et mon name est bien différent sur chacune des vm : ig9-cluster1 sur la 1ere VM, ig9-cluster2 sur la 2eme ....
Je demarre la 1ere vm:
root@div2sv002596:/root# systemctl status patroni
● patroni.service - Patroni high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2023-02-22 17:38:09 CET; 20h ago
Main PID: 52614 (patroni)
Tasks: 11 (limit: 11200)
Memory: 80.1M
CGroup: /system.slice/patroni.service
├─52614 /usr/bin/python3 /usr/bin/patroni /etc/patroni/patroni.yml
├─52635 /usr/pgsql-14/bin/postgres -D /bases/pgsql/14/data --config-file=/bases/pgsql/14/data/postgresql.conf --listen_addresses=* --port=5434 --cluster_name=clusterig9 --wal_l>
├─52637 postgres: clusterig9: logger
├─52642 postgres: clusterig9: startup recovering 000000010000000000000003
├─52649 postgres: clusterig9: checkpointer
├─52650 postgres: clusterig9: background writer
└─52651 postgres: clusterig9: stats collector
je demarre la 2eme vm:
root@div2sv002597:/root# systemctl start patroni
root@div2sv002597:/root# systemctl status patroni
● patroni.service - Patroni high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2023-02-23 14:11:44 CET; 4s ago
Process: 59533 ExecStart=/usr/bin/patroni /etc/patroni/patroni.yml (code=exited, status=1/FAILURE)
Main PID: 59533 (code=exited, status=1/FAILURE)
Feb 23 14:11:43 div2sv002597 systemd[1]: Started Patroni high-availability PostgreSQL.
Feb 23 14:11:44 div2sv002597 systemd[1]: patroni.service: Main process exited, code=exited, status=1/FAILURE
Feb 23 14:11:44 div2sv002597 systemd[1]: patroni.service: Failed with result 'exit-code'.
le message d'erreur vu dans patroni.log:
2023-02-23 14:11:43,547 INFO: Selected new etcd server http://XXX.XX.XXX.XXX:2379
2023-02-23 14:11:43,553 INFO: No PostgreSQL configuration items changed, nothing to reload.
2023-02-23 14:11:43,575 CRITICAL: system ID mismatch, node ig9-cluster2 belongs to a different cluster: 7191794644507281311 != 7191807465559984021
ci-dessous mon fichier patroni.service et patroni.yml
exemple patroni.service
----------------------------------------------------------------------
[Unit]
Description=Patroni high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/usr/bin/patroni /etc/patroni/patroni.yml
ExecReload=/usr/bin/kill -s HUP $MAINPID
KillMode=process
TimeoutSec=30
Restart=no
[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------
exemple fichier patroni
------------------------------------------------------------------------------
scope: clusterig9
namespace: /service/clusterig9/ # valeur par défaut
name: ig9-cluster1
restapi:
listen: IP_SERVEUR:8008
connect_address: IP_SERVEUR:8008
log:
level: INFO
dir: /var/log/patroni/
etcd:
hosts:
- IP_ETCD1:2379
- IP_ETCD2:2379
- IP_ETCD3:2379
username: root
password: Supp0rt
protocol: http
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
wal_level: replica
hot_standby: on
max_wal_senders: 10
max_replication_slots: 5
initdb:
- encoding: UTF8
- data-checksums
pg_hba:
- host all all all scram-sha-256
- host replication replicator all scram-sha-256
users:
dba:
password: dba_password
options:
- createrole
- createdb
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: "*:5434"
connect_address: IP_SERVEUR:5434
data_dir: /bases/pgsql/14/data
bin_dir: /usr/pgsql-14/bin
authentication:
replication:
username: replication
password: replicator
superuser:
username: postgres
password: postgres
rewind:
username: rewinder
password: rewinder
parameters:
unix_socket_directories: '.'
basebackup:
max-rate: "100M"
checkpoint: "fast"
watchdog:
mode: automatic
device: /dev/watchdog
safety_margin: 5
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
--------------------------------------------------------------------------------------
Hors ligne
bonjour,
Il faut détruire le PGDATA du replica et normalement patroni devrait la recréer automatiquement selon ce que vous avez mis dans patroni.yml dans la section create_replica_methods (pg_basebackup par défaut).
Donc en gros, vous identifiez votre leader et votre replica.
sur le replica vous arrêtez patroni (systemctl stop patroni).
sur le replica vous supprimez le contenu de PGDATA et vous relancez patroni sur ce noeud.
Dernière modification par ruizsebastien (23/02/2023 15:27:05)
Cordialement,
Sébastien.
Hors ligne
ah... je viens de voir que rjuju avait répondu dans ce sens.
Que vous donne la commande "patronictl -c /etc/patroni/patroni.yml list" ?
et les traces patroni sur le replica en echec (2ème noeud) ? >> je viens de voir le massage plus haut de patroni.log.
Il faut donc bien supprimer le contenu de PGDATA avant de relancer patroni sur le 2ème noeud.
Dernière modification par ruizsebastien (23/02/2023 15:28:41)
Cordialement,
Sébastien.
Hors ligne
donc j'ai vidé PGDATA:
j'ai relancé patroni sur la 2eme VM ....
PGDATA reste vide....
commande patronictl -c /Etc/patroni/patroni.yml list sur la 1ere VM:
root@div2sv002596:/root# patronictl -c /etc/patroni/patroni.yml list
+ Cluster: clusterig9 (7191794644507281311) ---+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------------+---------------------+---------+---------+----+-----------+
| ig9-cluster1 | 172.18.239.151:5434 | Replica | running | | unknown |
| ig9-cluster2 | 172.18.239.153:5432 | Replica | stopped | | unknown |
+--------------+---------------------+---------+---------+----+-----------+
sur la 2eme vm:
--------------------------------------------------------------------------------
root@div2sv002597:/bases/pgsql/14/data# systemctl start patroni
root@div2sv002597:/bases/pgsql/14/data# systemctl status patroni
● patroni.service - Patroni high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-02-23 14:36:15 CET; 8min ago
Main PID: 2207 (patroni)
Tasks: 5 (limit: 11200)
Memory: 31.1M
CGroup: /system.slice/patroni.service
└─2207 /usr/bin/python3 /usr/bin/patroni /etc/patroni/patroni.yml
Feb 23 14:36:15 div2sv002597 systemd[1]: Started Patroni high-availability PostgreSQL.
root@div2sv002597:/bases/pgsql/14/data# vim /var/log/patroni/patroni.log
root@div2sv002597:/bases/pgsql/14/data# ll
total 0
root@div2sv002597:/bases/pgsql/14/data#
-----------------------------------------------------------
le contenur de /var/log/patroni/patroni.log:
2023-02-23 14:53:54,089 INFO: Selected new etcd server http://172.16.132.9:2379
2023-02-23 14:53:54,095 INFO: No PostgreSQL configuration items changed, nothing to reload.
2023-02-23 14:53:54,103 INFO: Lock owner: None; I am ig9-cluster2
2023-02-23 14:53:54,107 INFO: waiting for leader to bootstrap
2023-02-23 14:54:04,104 INFO: Lock owner: None; I am ig9-cluster2
2023-02-23 14:54:04,107 INFO: waiting for leader to bootstrap
---------------------------------------------------------------------------------
Hors ligne
en complement coté etcd:
-----------------------------
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/clusterig9
/service/clusterig9/initialize
/service/clusterig9/members
/service/clusterig9/clusterig9
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS get /service/clusterig9
/service/clusterig9: is a directory
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS get /service/clusterig9/members
/service/clusterig9/members: is a directory
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/clusterig9/members
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/clusterig9/clusterig9
/service/clusterig9/clusterig9/members
/service/clusterig9/clusterig9/initialize
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/clusterig9/clusterig9/members
/service/clusterig9/clusterig9/members/ig9-cluster1
/service/clusterig9/clusterig9/members/ig9-cluster2
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS get /service/clusterig9/clusterig9/members/ig9-cluster1
{"conn_url":"postgres://172.18.239.151:5434/postgres","api_url":"http://172.18.239.151:8008/patroni","state":"running","role":"replica","version":"2.1.7"}
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS get /service/clusterig9/clusterig9/members/ig9-cluster2
{"conn_url":"postgres://172.18.239.153:5432/postgres","api_url":"http://172.18.239.153:8008/patroni","state":"stopped","role":"uninitialized","version":"2.1.7"}
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS get /service/clusterig9/clusterig9/initialize
7191794644507281311
root@div2sv002487:/root
-------------------------------------
sur mon autre cluster qui lui fonctionne :
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/cluster-patroni-test
root@div2sv002487:/root# etcdctl --endpoints=$ENDPOINTS ls /service/cluster-patroni-test
/service/cluster-patroni-test/config
/service/cluster-patroni-test/history
/service/cluster-patroni-test/initialize
/service/cluster-patroni-test/leader
/service/cluster-patroni-test/members
/service/cluster-patroni-test/status
root@div2sv002487:/root#
Hors ligne
pourriez-vous essayé de faire ceci sur le 1er noeud :
patronictl -c /etc/patroni/patroni.yml restart --role master clusterig9 ig9-cluster1
Le deuxième noeud ne peut pas être recréé et réintégré dans le cluster tant qu'il n'y a pas de leader identifié.
Cordialement,
Sébastien.
Hors ligne
bonjour,
Désolé j etais en week end prolongé ....
donc j'ai testé ta commande .... rien
voici le message que je reçois....
root@div2sv002596:/root# patronictl -c /etc/patroni/patroni.yml restart --role master clusterig9 ig9-cluster1
+ Cluster: clusterig9 (7191794644507281311) ---+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------------+---------------------+---------+---------+----+-----------+
| ig9-cluster1 | 172.18.239.151:5434 | Replica | running | | unknown |
| ig9-cluster2 | 172.18.239.153:5432 | Replica | stopped | | unknown |
+--------------+---------------------+---------+---------+----+-----------+
Error: No master among provided members
... je vais supprimé les entré dans etcd vois si ça permet de recréé le cluster .....
merci de votre aide.
Katia
Hors ligne
bonjour,
En plus de checker etcd, vous pouvez faire ceci pour tenter d'avoir un leader opérationnel dans le cluster :
arrêt de patroni sur les 2 noeuds.
Sur le 1er noeud : vérifier que l'instance est bien arrêtée, supprimer tous les fichiers qui ne devrait pas être là (postmaster.pid, standby.signal). Démarrer l'instance avec pg_ctl et voir si elle démarre correctement (voir les traces postgresql le cas échéant). Si elle démarre bien, vérifier si elle est bien en status primary (select pg_is_in_recovery(); >> doit renvoyer "f"). Si tout est ok : arrêt de l'instance avec pg_ctl. Relance patroni sur ce noeud et voir l'état avec patronictl list (devrait être en leader). Sinon voir les traces postgresql + patroni de ce noeud pour voir ou ça coince.
Cordialement,
Sébastien.
Hors ligne
super il est passé leader
bon par contre j arrive pas a connecté le 2ème dessus maintenant ....
root@div2sv002597:/bases/pgsql/14/data# patronictl -c /etc/patroni/patroni.yml list
+ Cluster: clusterig9 (7191794644507281311) ---+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------------+---------------------+---------+---------+----+-----------+
| ig9-cluster1 | 172.18.239.151:5434 | Leader | running | 2 | |
| ig9-cluster2 | 172.18.239.153:5434 | Replica | stopped | | unknown |
+--------------+---------------------+---------+---------+----+-----------+
root@div2sv002597:/bases/pgsql/14/data# ll
total 0
sur le secondaire , j'ai lancer la commande suivante:
patronictl -c /etc/patroni/patroni.yml reinit clusterig9 ig9-cluster2
et dans la log patroni.log j'ai le message suivant:
OSError: [Errno 16] Device or resource busy: '/bases/pgsql/14/data/'
/bases/pgsql/14/data/ est un fs ... cela peu venir de la ????
merci de votre aide
Katia
Hors ligne
essayez de vider le /bases/pgsql/14/data/ du noeud 2
de faire un arrêt de patroni du noeud 2
et de faire le reinit ensuite (du noeud 2 bien sûr).
Cordialement,
Sébastien.
Hors ligne
bonjour
/bases/pgsql/14/data du noeud 2 est vide comme marqué plus haute. et le reinit à été fait fs vide .
si je fais le reinit patroni arreter il me dit que ig9-cluster2 n est pas un membre du cluster
--------------------------------------------------------------------------------------------------------------------------------
root@div2sv002597:/bases/pgsql/14/data# patronictl -c /etc/patroni/patroni.yml reinit clusterig9 ig9-cluster2
+ Cluster: clusterig9 (7191794644507281311) --+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------------+---------------------+--------+---------+----+-----------+
| ig9-cluster1 | 172.18.239.151:5434 | Leader | running | 2 | |
+--------------+---------------------+--------+---------+----+-----------+
Error: ig9-cluster2 is not a member of cluster
root@div2sv002597:/bases/pgsql/14/data#
--------------------------------------------------------------------------------------------------------------------------------------------
quand je verifie l etat de patroni arreter j'ai comme retour de log que pg_basebackup n arrive pas a se connecter au serveur 1
je ping et ça fonctionne ....
---------------------------------------------------------------------------------------------------------------------------------------------
root@div2sv002597:/bases/pgsql/14/data# systemctl status patroni
● patroni.service - Patroni high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Tue 2023-02-28 08:55:50 CET; 4min 2s ago
Process: 21222 ExecStart=/usr/bin/patroni /etc/patroni/patroni.yml (code=exited, status=0/SUCCESS)
Main PID: 21222 (code=exited, status=0/SUCCESS)
Feb 28 04:29:55 div2sv002597 patroni[58538]: pg_basebackup: error: connection to server at "172.18.239.151", port 5434 failed: No route to host
Feb 28 04:29:55 div2sv002597 patroni[58538]: Is the server running on that host and accepting TCP/IP connections?
Feb 28 06:34:25 div2sv002597 patroni[32553]: pg_basebackup: error: connection to server at "172.18.239.151", port 5434 failed: No route to host
Feb 28 06:34:25 div2sv002597 patroni[32553]: Is the server running on that host and accepting TCP/IP connections?
Feb 28 08:55:46 div2sv002597 systemd[1]: Stopping Patroni high-availability PostgreSQL...
Feb 28 08:55:50 div2sv002597 systemd[1]: patroni.service: Succeeded.
Feb 28 08:55:50 div2sv002597 systemd[1]: Stopped Patroni high-availability PostgreSQL.
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
root@div2sv002597:/bases/pgsql/14/data# ping 172.18.239.151
PING 172.18.239.151 (172.18.239.151) 56(84) bytes of data.
64 bytes from 172.18.239.151: icmp_seq=1 ttl=64 time=0.541 ms
64 bytes from 172.18.239.151: icmp_seq=2 ttl=64 time=0.498 ms
----------------------------------------------------------------------------------------------------------------------------------------------------
quand je demarre patroni:
-----------------------------------------------------------------------------------------------------------------------------------------------------
root@div2sv002597:/bases/pgsql/14/data# systemctl status patroni
● patroni.service - Patroni high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-02-28 09:03:35 CET; 3s ago
Main PID: 16681 (patroni)
Tasks: 6 (limit: 11200)
Memory: 28.9M
CGroup: /system.slice/patroni.service
└─16681 /usr/bin/python3 /usr/bin/patroni /etc/patroni/patroni.yml
Feb 28 09:03:35 div2sv002597 systemd[1]: Started Patroni high-availability PostgreSQL.
root@div2sv002597:/bases/pgsql/14/data#
------------------------------------------------------------------------------------------------------------------------
si je fais le reinit il me dis succes mais j ai le message d erreur busy dans la log ....
------------------------------------------------------------------------------------------------------------------------------
root@div2sv002597:/bases/pgsql/14/data# patronictl -c /etc/patroni/patroni.yml reinit clusterig9 ig9-cluster2
+ Cluster: clusterig9 (7191794644507281311) ---+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+--------------+---------------------+---------+---------+----+-----------+
| ig9-cluster1 | 172.18.239.151:5434 | Leader | running | 2 | |
| ig9-cluster2 | 172.18.239.153:5434 | Replica | stopped | | unknown |
+--------------+---------------------+---------+---------+----+-----------+
Are you sure you want to reinitialize members ig9-cluster2? [y/N]: Y
Failed: reinitialize for member ig9-cluster2, status code=503, (bootstrap from leader 'ig9-cluster1' already in progress)
Do you want to cancel it and reinitialize anyway? [y/N]: Y
Success: reinitialize for member ig9-cluster2
------------------------------------------------------------------------------------------------------------------------------------
/vat/log/patroni/patroni.log:
-------------------------------------------------------------------------------------------------------------------------------------
OSError: [Errno 16] Device or resource busy: '/bases/pgsql/14/data'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/patroni/postgresql/__init__.py", line 1047, in move_data_directory
os.rename(self._data_dir, new_name)
OSError: [Errno 16] Device or resource busy: '/bases/pgsql/14/data' -> '/bases/pgsql/14/data_2023-02-28-09-06-11'
-----------------------------------------------------------------------------------------------------------------------------------------
Je vais créé un nouveau cluster en utilsant non pas un fs mais un repertoire sous le fs voir si ca passe ..... ( comme mon 1er cluster).....
merci de votre aide
Katia
Hors ligne
re bonjour ...
Bonjour,
Mon problème avance et se résout petit à petit.
Déjà j’avais un problème de firewall ; Je l’ai complètement désactivé ….
Ensuite le problème du fs … en effet pour répliquer patroni supprime le répertoire récepteur de la base puis le recrée en même temps que la base… étant que c’est un fs la suppression est impossible d’où le message dans la log de patroni
OSError: [Errno 16] Device or resource busy: '/bases/pgsql/14/data' -> '/bases/pgsql/14/data_2023-02-28-14-45-13'
Enfin mon 3 eme problème concerne l’entrée pg_hba dans patroni.yml….
Quand on exécute la commande patronictl avec edit-config la section hba_conf n’apparait pas ….
Nous avons modifié le fichier patroni.yml mais cela n a pas été pris en compte … il a fallu passé par edit-config pour que cela le soit….
Petite question pourquoi la section pg_hba.conf dans le boostrap n’est pas prise en compte ?
en tout cas merci de vos aides .... car la je comprennais plus ( et mes collègues non plus) ...
Hors ligne
La section bootstrap n'est utilisée qu'une fois : lors de la création initiale du cluster.
Ensuite ce sont les autres sections qui sont utilisées (dont celle qui s'appelle create_replica_method)
Cordialement,
Sébastien.
Hors ligne
La section bootstrap n'est utilisée qu'une fois : lors de la création initiale du cluster.
Ensuite ce sont les autres sections qui sont utilisées (dont celle qui s'appelle create_replica_method)
ok.
Merci de tes explications et de ton aide.
Bonne journée.
Katia
Hors ligne