Par mxltx le 12/08/2008 - 20:01
Bonjour,
Je souhaite monitorer une replication (Master/Slave) avec postgres 8.3.3 et slony 1.2.14.
Je cherche une methode a la mysql (show slave status\G;), mais apparement ca n'existe pas.
J'ai regardé dans les tables _replication.sl_* (_replication.sl_node; _replication.sl_status; _replication.sl_log_status; etc ...)
Lorsque ma replication est en cours j'obtiens ces valeurs
sagem=# select * from _replication.sl_node;
no_id | no_active | no_comment | no_spool
-------+-----------+----------------------------------+----------
1 | t | Node 1 - sagem@172.16.1.93 | f
2 | t | Node 2 - sagem_slave@172.16.1.94 | f
sagem=# select * from _replication.sl_status;
st_origin | st_received | st_last_event | st_last_event_ts | st_last_received | st_last_received_ts | st_last_received_event_ts | st_lag_num_events | st_lag_time
-----------+-------------+---------------+----------------------------+------------------+----------------------------+----------------------------
+-------------------+----------------
1 | 2 | 10872 | 2008-08-12 18:17:15.883313 | 10872 | 2008-08-12 18:17:21.004528 | 2008-08-12 18:17:15.883313 | 0 | 00:00:08.10195
(1 row)
sagem=# select * from _replication.sl_log_status;
sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+-----------+-----------+-------------+---------+-----------+-----------
sl_log_status | 0 | 1 | 3 | 0 | 1 | 0 | f | t
(1 row)
sagem=# select * from _replication.sl_subscribe;
sub_set | sub_provider | sub_receiver | sub_forward | sub_active
---------+--------------+--------------+-------------+------------
1 | 1 | 2 | t | t
(1 row)
sagem=# select * from _replication.sl_nodelock_nl_conncnt_seq;
sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
----------------------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
sl_nodelock_nl_conncnt_seq | 12 | 1 | 9223372036854775807 | 1 | 1 | 32 | f | t
(1 row)
Et lorsque ma replication est broken (slon_kill), j'obtiens les memes valeurs. (mis a part pour le select * from _replication.sl_status; qui est different pour le time).
Dans les scripts fournis avec slony, j'ai trouver des choses interessentes comme cette requetes SQL :
select case
when ttlcount = okcount then 'OK - '||okcount||' nodes in sync'
else 'ERROR - '||ttlcount-okcount||' of '||ttlcount||' nodes not in sync'
end as syncstatus
from (
-- determine total active receivers
select (select count(distinct sub_receiver)
from _replication.sl_subscribe
where sub_active = true) as ttlcount,
(
-- determine active nodes syncing within 10 seconds
select count(*) from (
select st_received, st_last_received_ts - st_last_event_ts as cfmdelay
from _replication.sl_status
where st_received in (
select distinct sub_receiver
from _replication.sl_subscribe
where sub_active = true
)
) as t1
where cfmdelay < interval '10 secs') as okcount
) as t2;
Qui me retourne :
syncstatus
----------------------
OK - 1 nodes in sync
(1 ligne)
meme lorsque ma replication n'est plus active (j'entend par la que le cluster est bien initialisé avec les set qui vont bien, mais que le process slon n'est pas starté).
Par contre j'ai remarqué que dans phpPgAdmin 4.2 dans la partie Noeuds, il y avait un "statut" sur la synchro (Etat ou Hors synchro):
Nom Statut Actions Commentaire
Node 1 - sagem@172.16.1.93 État Supprimer Node 1 - sagem@172.16.1.93
Node 2 - sagem_slave@172.16.1.94 État Supprimer Node 2 - sagem_slave@172.16.1.94
Bref, comment faire pour avoir un apercu sur la synchro en temps réel ??
Dans quelle table puis-je retrouver les informations necessaires ??
Faut-il plutot fouiller sur le master ou le slave pour retrouver ces informations ??
Si quelqu'un a une idée...
Cdt,
Mxltx