| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|---|
| 2 |
<!-- DerniÚre modification |
|---|
| 3 |
le $Date$ |
|---|
| 4 |
par $Author$ |
|---|
| 5 |
révision $Revision$ --> |
|---|
| 6 |
|
|---|
| 7 |
<sect1 id="maintenance"> <title>Maintenance</title> |
|---|
| 8 |
|
|---|
| 9 |
<indexterm><primary>maintenir &slony1;</primary></indexterm> |
|---|
| 10 |
|
|---|
| 11 |
<para>&slony1; effectue une grande partie de sa maintenance |
|---|
| 12 |
de lui-même, dans un processus de <quote> |
|---|
| 13 |
nettoyage</quote> qui : |
|---|
| 14 |
|
|---|
| 15 |
<itemizedlist> |
|---|
| 16 |
|
|---|
| 17 |
<listitem><para>supprime les anciennes donnéessur |
|---|
| 18 |
les différentes tables d'espace de nom de |
|---|
| 19 |
du cluster <productname>Slony-I</productname>, |
|---|
| 20 |
notamment <xref linkend="table.sl-log-1"/>, <xref |
|---|
| 21 |
linkend="table.sl-log-2"/>, and <xref |
|---|
| 22 |
linkend="table.sl-seqlog"/>;</para></listitem> |
|---|
| 23 |
|
|---|
| 24 |
<listitem><para>effectue un vacuum sur certaines |
|---|
| 25 |
tables utilisées par &slony1;. |
|---|
| 26 |
A partir de la version 1.0.5, ceci inclut &pglistener;; |
|---|
| 27 |
dans les versions antérieures, vous devez lancer |
|---|
| 28 |
souvent des vacuums sur cette table, sinon |
|---|
| 29 |
vous verrez votre réplication ralentir |
|---|
| 30 |
car &slony1; lÚve beaucoup d'événets, |
|---|
| 31 |
qui mÚnent à table à contenir de nombreux |
|---|
| 32 |
tuples morts. |
|---|
| 33 |
</para> |
|---|
| 34 |
|
|---|
| 35 |
<para>Avec certaines versions (la 1.1; peut-être la 1.0.5) |
|---|
| 36 |
il est possible de ne plus s'embarrasser avec les vacuums |
|---|
| 37 |
sur ces tables si vous utiliser quelque chose comme |
|---|
| 38 |
<application>pg_autovacuum</application> |
|---|
| 39 |
pour gérer le nettoyage de ces tables. |
|---|
| 40 |
Malheureusement, il est possible que |
|---|
| 41 |
<application>pg_autovacuum</application> |
|---|
| 42 |
ne nettoie pas assez fréquemment, vous pourrez donc préférer utiliser les vacuums internes. |
|---|
| 43 |
|
|---|
| 44 |
Nettoyer la table &pglistener; <quote>trop |
|---|
| 45 |
souvent</quote> |
|---|
| 46 |
est moins risqué que de ne pas la nettoyer assez. |
|---|
| 47 |
</para> |
|---|
| 48 |
|
|---|
| 49 |
<para>Malheureusement, si vous avez de longues transactions, |
|---|
| 50 |
les vacuums ne peuvent pas nettoyer les tuples morts |
|---|
| 51 |
qui sont plus récents que les anciennes transactions |
|---|
| 52 |
toujours en cours. Ceci conduira en particulier à une |
|---|
| 53 |
forte croissance de &pglistener; |
|---|
| 54 |
et ralentira la réplication. |
|---|
| 55 |
</para></listitem> |
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 |
<listitem> <para> Le bug <link linkend="dupkey"> Violation par |
|---|
| 59 |
clef dupliqué</link> a permis d'isoler des situations de |
|---|
| 60 |
concurrence dans &postgres; |
|---|
| 61 |
Des problÚms subsiste notamment |
|---|
| 62 |
lorsque <command>VACUUM</command> ne |
|---|
| 63 |
réclame pas correctement l'espace |
|---|
| 64 |
menant à une corruption des arbres B. </para> |
|---|
| 65 |
|
|---|
| 66 |
<para>Il peut être utile de lancer la commande |
|---|
| 67 |
<command> REINDEX TABLE sl_log_1;</command> |
|---|
| 68 |
périodiquement pour éviter ce problÚm |
|---|
| 69 |
</para> </listitem> |
|---|
| 70 |
|
|---|
| 71 |
<listitem><para> A partir de la version 1.2, |
|---|
| 72 |
la fonctionnalité <quote>log switching</quote> |
|---|
| 73 |
est arrivée;de temps en temps, elle tente d'interchanger |
|---|
| 74 |
les données entre &sllog1; and &sllog2; |
|---|
| 75 |
afin de réaliser un |
|---|
| 76 |
<command>TRUNCATE</command> sur les <quote>plus vielles</quote> |
|---|
| 77 |
données.</para> |
|---|
| 78 |
|
|---|
| 79 |
<para> Cela signifie que de maniÚre réguliÚre, |
|---|
| 80 |
ces tables sont complÚtement nettoyées ce qui |
|---|
| 81 |
évitequ'elle ne grossisse trop |
|---|
| 82 |
lors d'une charge importante |
|---|
| 83 |
et qu'elles deviennent |
|---|
| 84 |
impossible à nettoyer. |
|---|
| 85 |
|
|---|
| 86 |
</para> </listitem> |
|---|
| 87 |
|
|---|
| 88 |
</itemizedlist> |
|---|
| 89 |
</para> |
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
<sect2 id="maintenance-autovac"> |
|---|
| 93 |
<title> Intéraction avec l'autovaccum de &postgres; |
|---|
| 94 |
</title> |
|---|
| 95 |
|
|---|
| 96 |
<indexterm><primary>interaction avec autovacuum</primary></indexterm> |
|---|
| 97 |
|
|---|
| 98 |
<para>Les versions récentes de&postgres; propose |
|---|
| 99 |
un processus <quote>autovacuum</quote> |
|---|
| 100 |
qui détecte les modifications sur les tables et la |
|---|
| 101 |
création |
|---|
| 102 |
de tuples mort, puis nettoie de ces tables, |
|---|
| 103 |
<quote>Ã la demande.</quote>. |
|---|
| 104 |
On a constaté que cela peut interagir de maniÚre |
|---|
| 105 |
négative avec la politique de vacuum de &slony1; |
|---|
| 106 |
sur ces propres tables. </para> |
|---|
| 107 |
|
|---|
| 108 |
<para> &slony1; demande des vacuums sur ses tables |
|---|
| 109 |
immédiatement aprÚs avoir complété les |
|---|
| 110 |
transactions |
|---|
| 111 |
qui sont sensées supprimer de vieilles données, |
|---|
| 112 |
ce qui est considéré comme le meilleur moment |
|---|
| 113 |
pour le faire. Il semble que l'autovacuum détecte |
|---|
| 114 |
les changements un peu trop tÃŽt, et lance un vacuum |
|---|
| 115 |
alors que les transactions ne sont pas complétées, |
|---|
| 116 |
ce qui est relativement inutile. |
|---|
| 117 |
Il apparait préférable de configurer l'autovacuum |
|---|
| 118 |
pour éviter les tables de configuration |
|---|
| 119 |
gérées par &slony1;. </para> |
|---|
| 120 |
|
|---|
| 121 |
<para> La requête suivante identifie les tables que |
|---|
| 122 |
l'autovacuum ne doit pas traiter (remplacez le nom du |
|---|
| 123 |
cluster par celui de votre configuration locale) : |
|---|
| 124 |
</para> |
|---|
| 125 |
|
|---|
| 126 |
<programlisting> |
|---|
| 127 |
moncluster=# select oid, relname from pg_class where relnamespace = (select oid from pg_namespace where nspname = '_' || 'monCluster') and relhasindex; |
|---|
| 128 |
oid | relname |
|---|
| 129 |
-------+-------------- |
|---|
| 130 |
17946 | sl_nodelock |
|---|
| 131 |
17963 | sl_setsync |
|---|
| 132 |
17994 | sl_trigger |
|---|
| 133 |
17980 | sl_table |
|---|
| 134 |
18003 | sl_sequence |
|---|
| 135 |
17937 | sl_node |
|---|
| 136 |
18034 | sl_listen |
|---|
| 137 |
18017 | sl_path |
|---|
| 138 |
18048 | sl_subscribe |
|---|
| 139 |
17951 | sl_set |
|---|
| 140 |
18062 | sl_event |
|---|
| 141 |
18069 | sl_confirm |
|---|
| 142 |
18074 | sl_seqlog |
|---|
| 143 |
18078 | sl_log_1 |
|---|
| 144 |
18085 | sl_log_2 |
|---|
| 145 |
(15 rows) |
|---|
| 146 |
</programlisting> |
|---|
| 147 |
|
|---|
| 148 |
<para>La requête suivante remplira la table |
|---|
| 149 |
<envar>pg_catalog.pg_autovacuum</envar> |
|---|
| 150 |
avec les informations de configuration adéquates : |
|---|
| 151 |
<command> insert into pg_catalog.pg_autovacuum (vacrelid, |
|---|
| 152 |
enabled) select oid, 'f' from pg_catalog.pg_class where relnamespace = |
|---|
| 153 |
(select oid from pg_namespace where nspname = '_' || 'monCluster') and |
|---|
| 154 |
relhasindex; </command> </para> |
|---|
| 155 |
</sect2> |
|---|
| 156 |
|
|---|
| 157 |
<sect2><title> Chiens de garde : garder les Slons en vie</title> |
|---|
| 158 |
|
|---|
| 159 |
<indexterm><primary>Chiens de garde pour garder en vie les démons slon |
|---|
| 160 |
</primary></indexterm> |
|---|
| 161 |
|
|---|
| 162 |
<para>Il y a deux scripts <quote>chiens de garde</quote> disponibles pour surveiller |
|---|
| 163 |
la réplication et relancer les processus <application>slon</application> |
|---|
| 164 |
lorsqu'il meurent pour telle ou telle raison, par exemple une |
|---|
| 165 |
<quote>coupure</quote> réseau qui provoque une perte de connectivité.</para> |
|---|
| 166 |
|
|---|
| 167 |
<para>Ils pourraient vous être utiles...</para> |
|---|
| 168 |
|
|---|
| 169 |
<para> La <quote>meilleur et nouvelle</quote> façon de gérer les processus <xref |
|---|
| 170 |
linkend="slon"/> se fait via une combinaison de <xref |
|---|
| 171 |
linkend="mkslonconf"/>, qui crée un fichier de configuration pour chaque noeud |
|---|
| 172 |
d'un cluster, et <xref linkend="launchclusters"/> qui utilise ces fichiers |
|---|
| 173 |
de configuration.</para> |
|---|
| 174 |
|
|---|
| 175 |
<para> Cette approche est préférable aux anciens systÚmes de |
|---|
| 176 |
<quote>chiens de garde</quote> car vous pouvez <quote>pointer</quote> |
|---|
| 177 |
précisément, dans chaque fichier de configurationn, le paramÚtrage |
|---|
| 178 |
désiré pour chaque noeud, sans avoir à vous préoccuper des options |
|---|
| 179 |
que le script chien de garde vous proposer ( ou pas ). Ceci est particuliÚrement |
|---|
| 180 |
important si vous utilisez le <link linkend="logshipping"> log shipping </link>, |
|---|
| 181 |
auquel cas oublier l'option <command>-a</command> peut ruiner le noeud |
|---|
| 182 |
destinataire du log shipping et ruiner par là -même votre journée.</para> |
|---|
| 183 |
|
|---|
| 184 |
</sect2> |
|---|
| 185 |
|
|---|
| 186 |
<sect2 id="gensync"><title>En parallÚle aux chiens de garde : generate_syncs.sh</title> |
|---|
| 187 |
|
|---|
| 188 |
<indexterm><primary>Génére des SYNCs</primary></indexterm> |
|---|
| 189 |
|
|---|
| 190 |
<para>Un nouveau script est apparu dans &slony1; 1.1, il s'agit de |
|---|
| 191 |
<application>generate_syncs.sh</application>, qui est utilise dans les situations |
|---|
| 192 |
suivantes.</para> |
|---|
| 193 |
|
|---|
| 194 |
<para>Supposons que vous avez un serveur non fiable sur lequel le démon |
|---|
| 195 |
<application>slon</application> daemon ne fonctionne pas en continu, |
|---|
| 196 |
en rentrant de week-end vous vous trouverez peut-êtrÃÅ¡s la situation suivante : |
|---|
| 197 |
</para> |
|---|
| 198 |
|
|---|
| 199 |
<para>Le vendredi soir, quelque chose s'est <quote>cassé</quote> et le temps |
|---|
| 200 |
que la base de donnée redémarre, aucun des démons <application>slon</application> |
|---|
| 201 |
n'a survécu. Votre application en ligne a ensuite connu trois jours |
|---|
| 202 |
de charge transactionnelle relativement forte. |
|---|
| 203 |
</para> |
|---|
| 204 |
|
|---|
| 205 |
<para>Lorsque vous redémarrez <application>slon</application> le lundi, il n'y a pas eu |
|---|
| 206 |
de synchronisation sur le maître depuis Vendredi, ce qui fait que le prochain |
|---|
| 207 |
<quote>ensemble de SYNC</quote> comprendra toutes les modifications entre vendredi |
|---|
| 208 |
et lundi. Aïe !</para> |
|---|
| 209 |
|
|---|
| 210 |
<para>Si vous lancez <application>generate_syncs.sh</application> via une tache cron |
|---|
| 211 |
toute les 20 minutes, cela créera de force des événements <command>SYNC</command> |
|---|
| 212 |
sur l'origine, ce qui implique qu'entre vendredi et lundi, les nombreuses mises à jour |
|---|
| 213 |
seront découpées en plus de 100 ensemble de SYNCs, qui pourront être appliqués de |
|---|
| 214 |
maniÚre incrémentale, rendant la restauration mois déplaisante. |
|---|
| 215 |
</para> |
|---|
| 216 |
|
|---|
| 217 |
<para>Notez que si les <command>SYNC</command>s <emphasis>sont</emphasis> exécutés |
|---|
| 218 |
réguliÚrement, ce scripts ne fera rien de particulier.</para> |
|---|
| 219 |
</sect2> |
|---|
| 220 |
|
|---|
| 221 |
<sect2><title>Tester l'état &slony1; </title> |
|---|
| 222 |
|
|---|
| 223 |
<indexterm><primary>tester le statut du cluster</primary></indexterm> |
|---|
| 224 |
|
|---|
| 225 |
<para> Dans le répertoire <filename>tools</filename>, vous trouverez |
|---|
| 226 |
des scripts nommés <filename>test_slony_state.pl</filename> et |
|---|
| 227 |
<filename>test_slony_state-dbi.pl</filename>. Le premier utilise l'interface Perl/DBI |
|---|
| 228 |
; l'autre utilise l'interface Pg. |
|---|
| 229 |
</para> |
|---|
| 230 |
|
|---|
| 231 |
<para> Les deux font essentiellement la même chose, c'est à dire |
|---|
| 232 |
se connecter à un noeud &slony1; (celui de votre choix) et à partir de là |
|---|
| 233 |
détermine la liste des noeuds du cluster. Ensuite ils lancent une |
|---|
| 234 |
série de requêtes ( en lecture seule, et donc sans danger ) afin |
|---|
| 235 |
de parcourir différentes tables à la recherche de différentes conditions |
|---|
| 236 |
susceptibles de rélever des problÚmes, telles que : |
|---|
| 237 |
</para> |
|---|
| 238 |
|
|---|
| 239 |
<itemizedlist> |
|---|
| 240 |
<listitem><para> Gonflement des tables comme pg_listener, sl_log_1, sl_log_2, sl_seqlog; </para></listitem> |
|---|
| 241 |
<listitem><para> Voies d'écoute;</para></listitem> |
|---|
| 242 |
<listitem><para> Analyse de la propagation des événéments; </para></listitem> |
|---|
| 243 |
<listitem><para> Analyse de la propagation des confirmations. </para> |
|---|
| 244 |
|
|---|
| 245 |
<para> Si la communication est <emphasis>légÚrement</emphasis> perturbée, |
|---|
| 246 |
la réplication peut fonctionner, mais les confirmations peuvent ne pas être retournées, |
|---|
| 247 |
ce qui empêche les noeuds de nettoyer les vieux événements et les anciennes données de réplication |
|---|
| 248 |
. </para> </listitem> |
|---|
| 249 |
</itemizedlist> |
|---|
| 250 |
|
|---|
| 251 |
<para> Lancer ce script une par heure ou une fois par jour peut vous aider |
|---|
| 252 |
à détecter les symptomes précurseurs de certains problÚmes, avant même |
|---|
| 253 |
que cela conduise à une dégradation des performances. </para> |
|---|
| 254 |
</sect2> |
|---|
| 255 |
|
|---|
| 256 |
<sect2><title>Scripts de test de la réplication</title> |
|---|
| 257 |
|
|---|
| 258 |
<para>Dans le répertoire <filename>tools</filename> on peut trouver 4 |
|---|
| 259 |
scripts qui peuvent être utilisés pour surveiller des instances &slony1; : |
|---|
| 260 |
|
|---|
| 261 |
<itemizedlist> |
|---|
| 262 |
|
|---|
| 263 |
<listitem><para> <command>test_slony_replication</command> est un script |
|---|
| 264 |
Perl auquel vous pouvez passer les informations de connexion |
|---|
| 265 |
d'un noeud &slony1;. Il test alors la table <xref linkend="table.sl-path"/> |
|---|
| 266 |
et d'autres informations sur ce noeud afin de déterminer la forme de |
|---|
| 267 |
l'ensemble de réplication choisi.</para> |
|---|
| 268 |
|
|---|
| 269 |
<para> Ensuite il injecte des requêtes de test dans la table nommée |
|---|
| 270 |
<envar>slony_test</envar> qui est définie comme ci-dessous, et |
|---|
| 271 |
qui doit être ajoutée à l'ensemble des tables répliquées : |
|---|
| 272 |
|
|---|
| 273 |
<programlisting> |
|---|
| 274 |
CREATE TABLE slony_test ( |
|---|
| 275 |
description text, |
|---|
| 276 |
mod_date timestamp with time zone, |
|---|
| 277 |
"_Slony-I_testcluster_rowID" bigint DEFAULT nextval('"_testcluster".sl_rowid_seq'::text) NOT NULL |
|---|
| 278 |
); |
|---|
| 279 |
</programlisting></para> |
|---|
| 280 |
|
|---|
| 281 |
<para> La derniÚre colonne de la table est définie par &slony1; comme |
|---|
| 282 |
une une clé primaire manquante...</para> |
|---|
| 283 |
|
|---|
| 284 |
<para> Ce script génÚre une ligne de sortie pour chaque noeud &slony1; actif |
|---|
| 285 |
pour l'ensemble de réplication défini dans un fichier nommé |
|---|
| 286 |
<filename>cluster.fact.log</filename>.</para> |
|---|
| 287 |
|
|---|
| 288 |
<para> Il y a une option additionelle, <option>finalquery</option>, qui vous permet de |
|---|
| 289 |
passer une requête SQL spécifique à votre application pour déterminer |
|---|
| 290 |
l'état de votre application.</para></listitem> |
|---|
| 291 |
|
|---|
| 292 |
<listitem><para><command>log.pm</command> est un module Perl module qui gÚre les logs des |
|---|
| 293 |
scripts Perl.</para></listitem> |
|---|
| 294 |
|
|---|
| 295 |
<listitem><para><command>run_rep_tests.sh</command> est un script <quote>wrapper</quote> |
|---|
| 296 |
qui lance <command>test_slony_replication</command>.</para> |
|---|
| 297 |
|
|---|
| 298 |
<para> Si vous avez plusieurs clusters &slony1;, vous pouvez placer dans |
|---|
| 299 |
ce fichier le configuration pour se connecter à tous ces |
|---|
| 300 |
clusters.</para></listitem> |
|---|
| 301 |
|
|---|
| 302 |
<listitem><para><command>nagios_slony_test</command> est un script qui |
|---|
| 303 |
a été construit pour interroger les fichiers logs afin de pouvoir |
|---|
| 304 |
lancer le test de réplication réguliÚrement ( nous le laissons |
|---|
| 305 |
toutes les 6 minutes) et qu'un outil de supervision tel que |
|---|
| 306 |
<ulink |
|---|
| 307 |
url="http://www.nagios.org/"> <productname>Nagios</productname> |
|---|
| 308 |
</ulink> puisse utiliser le script to surveiller l'état indiqué |
|---|
| 309 |
dans ces logs.</para> |
|---|
| 310 |
|
|---|
| 311 |
<para> Il semble plus efficace qu'une tache |
|---|
| 312 |
<application>cron</application> lance les tests et que |
|---|
| 313 |
<productname>Nagios</productname> vérifie le résultat plutÎt que |
|---|
| 314 |
de voir <productname>Nagios</productname> lancer directement |
|---|
| 315 |
les tests. Ces tests peuvent vérifier l'ensemble du cluster &slony1; |
|---|
| 316 |
d'un seul coup, plutot que de voir <productname>Nagios</productname> |
|---|
| 317 |
provoque des mises à jour en permanence.</para></listitem> |
|---|
| 318 |
|
|---|
| 319 |
</itemizedlist></para> |
|---|
| 320 |
</sect2> |
|---|
| 321 |
|
|---|
| 322 |
<sect2><title> Autres tests de réplication</title> |
|---|
| 323 |
|
|---|
| 324 |
<indexterm><primary>tester la réplication</primary></indexterm> |
|---|
| 325 |
|
|---|
| 326 |
<para> La méthodologie de la section précédente est conçu avec un vue |
|---|
| 327 |
pour minimiser le coût des requêtes de test; sur un cluster trÚs chargé, |
|---|
| 328 |
supportant des centaines d'utilisateurs, le coût associé aux quelques |
|---|
| 329 |
requêtes de test n'est un point important et le temps de configuration |
|---|
| 330 |
des tables et des injecteurs de données est trÚs élevé.</para> |
|---|
| 331 |
|
|---|
| 332 |
<para> 3 autres méthodes pour analyser l'état de la réplication sont |
|---|
| 333 |
apparus :</para> |
|---|
| 334 |
|
|---|
| 335 |
<itemizedlist> |
|---|
| 336 |
|
|---|
| 337 |
<listitem><para> Pour un test orienté sur l'application, il est utile |
|---|
| 338 |
de créer une vue sur une table fréquemment mise à jour pour remonter |
|---|
| 339 |
des informations spécifique à l'application.</para> |
|---|
| 340 |
|
|---|
| 341 |
<para> Par exemple, on peut chercher soit des statistiques |
|---|
| 342 |
sur les objets applicatif les plus récents, soit les transactions |
|---|
| 343 |
de l'applicatio. Par exemple :</para> |
|---|
| 344 |
|
|---|
| 345 |
<para> <command> create view replication_test as select now() - |
|---|
| 346 |
txn_time as age, object_name from transaction_table order by txn_time |
|---|
| 347 |
desc limit 1; </command> </para> |
|---|
| 348 |
|
|---|
| 349 |
<para> <command> create view replication_test as select now() - |
|---|
| 350 |
created_on as age, object_name from object_table order by id desc |
|---|
| 351 |
limit 1; </command> </para> |
|---|
| 352 |
|
|---|
| 353 |
<para> Il y a un inconvénient : Cette approche nécessite que vous |
|---|
| 354 |
ayez une activité constante sur le systÚme impliquant la création |
|---|
| 355 |
de nouvelles transactions de maniÚre réguliÚre. |
|---|
| 356 |
Si quelque chose ne fonctionne pas dans votre application. vous obtiendrez |
|---|
| 357 |
des fausses alertes en provenance de la réplication, alors même que la réplication |
|---|
| 358 |
fonctionne correctement.</para> |
|---|
| 359 |
|
|---|
| 360 |
</listitem> |
|---|
| 361 |
|
|---|
| 362 |
<listitem><para> La vue &slony1; nommée <envar>sl_status</envar> |
|---|
| 363 |
fournit des informations sur la synchronisation des différents noeuds. |
|---|
| 364 |
Son contenu n'est intéressant que sur les noeuds origine, car les |
|---|
| 365 |
événements générés sur les autres noeuds peuvent généralement |
|---|
| 366 |
être ignorés. </para> |
|---|
| 367 |
</listitem> |
|---|
| 368 |
|
|---|
| 369 |
<listitem><para> Voir également la discussion sur <xref linkend="slonymrtg"/>. </para></listitem> |
|---|
| 370 |
|
|---|
| 371 |
</itemizedlist> |
|---|
| 372 |
</sect2> |
|---|
| 373 |
<sect2><title> Fichiers de log</title> |
|---|
| 374 |
|
|---|
| 375 |
<indexterm><primary>fichiers de log</primary></indexterm> |
|---|
| 376 |
|
|---|
| 377 |
<para>Les démons <xref linkend="slon"/> génÚre des fichiers de logs plus |
|---|
| 378 |
ou moins verbeux, selon le niveau de debug activé. Dans ce cas vous pouvez : |
|---|
| 379 |
|
|---|
| 380 |
<itemizedlist> |
|---|
| 381 |
|
|---|
| 382 |
<listitem><para> Utiliser un programme de rotations de logs comme |
|---|
| 383 |
<application>rotatelogs</application> d'<productname>Apache</productname> |
|---|
| 384 |
pour avoir une sécancer de fichiers de logs et évite d'avoir des fichiers |
|---|
| 385 |
trop gros;</para></listitem> |
|---|
| 386 |
|
|---|
| 387 |
<listitem><para> Purgez réguliÚrement les vieux fichiers de log.</para></listitem> |
|---|
| 388 |
|
|---|
| 389 |
</itemizedlist> |
|---|
| 390 |
</para> |
|---|
| 391 |
</sect2> |
|---|
| 392 |
|
|---|
| 393 |
<sect2><title>service </title> |
|---|
| 394 |
<indexterm><primary>service pour BSD </primary></indexterm> |
|---|
| 395 |
|
|---|
| 396 |
<sect3><title>slon</title> |
|---|
| 397 |
|
|---|
| 398 |
<para> Ce script crée un répertoire pour le service slon qui pourra être |
|---|
| 399 |
utilisé avec la commande svscan de daemontools. Ce script utilise multilog |
|---|
| 400 |
de maniÚre trÚs basique, ce qui semble être standard pour les installations |
|---|
| 401 |
daemontools / multilog. Si vous souhaitez une gestion intelligente des logs, |
|---|
| 402 |
consultez la section logrep ci-dessous. Actuellement ce script à des possibilités |
|---|
| 403 |
de gestion d'erreurs trÚs limitées. |
|---|
| 404 |
</para> |
|---|
| 405 |
|
|---|
| 406 |
<para> Pour les usages non-interactifs, configurer les variables d'environnement |
|---|
| 407 |
suivantes : <envar>BASEDIR</envar> <envar>SYSUSR</envar> |
|---|
| 408 |
<envar>PASSFILE</envar> <envar>DBUSER</envar> <envar>HOST</envar> |
|---|
| 409 |
<envar>PORT</envar> <envar>DATABASE</envar> <envar>CLUSTER</envar> |
|---|
| 410 |
<envar>SLON_BINARY</envar> Si un seul de ces valeurs n'est pas définie, |
|---|
| 411 |
le script demande les informations de maniÚre interactive.</para> |
|---|
| 412 |
|
|---|
| 413 |
<itemizedlist> |
|---|
| 414 |
<listitem><para> |
|---|
| 415 |
<envar>BASEDIR</envar> l'emplacement où la structure du répertoire du service slon sera créée. |
|---|
| 416 |
Il ne faut <emphasis>pas</emphasis> que ce soit le répertoire <filename>/var/service</filename>;</para></listitem> |
|---|
| 417 |
<listitem><para> |
|---|
| 418 |
<envar>SYSUSR</envar> l'utilisateur unix qui lancera le processus slon (et multilog);</para></listitem> |
|---|
| 419 |
<listitem><para> |
|---|
| 420 |
<envar>PASSFILE</envar> l'emplacement du fichier <filename>.pgpass</filename>. (par défaut <filename>~sysusr/.pgpass</filename>);</para></listitem> |
|---|
| 421 |
<listitem><para> |
|---|
| 422 |
<envar>DBUSER</envar> L'utilisateur postgres que slon doit utiliser ( par défaut slony);</para></listitem> |
|---|
| 423 |
<listitem><para> |
|---|
| 424 |
<envar>HOST</envar> l'adresse du serveur ou le slon doit se connecter (par défaut localhost)</para></listitem> |
|---|
| 425 |
<listitem><para> |
|---|
| 426 |
<envar>PORT</envar> le port de connexion (par défaut 5432)</para></listitem> |
|---|
| 427 |
<listitem><para> |
|---|
| 428 |
<envar>DATABASE</envar> la base de données sur laquelle slon se connecte (par défaut dbuser)</para></listitem> |
|---|
| 429 |
<listitem><para> |
|---|
| 430 |
<envar>CLUSTER</envar> le nom du cluster Slony1 (par défaut database)</para></listitem> |
|---|
| 431 |
<listitem><para> |
|---|
| 432 |
<envar>SLON_BINARY</envar> le chemin complet vers le binaire slon (par défaut <command>which slon</command>)</para></listitem> |
|---|
| 433 |
</itemizedlist> |
|---|
| 434 |
</sect3> |
|---|
| 435 |
<sect3><title>logrep-mkservice.sh</title> |
|---|
| 436 |
|
|---|
| 437 |
<para>Ce script utilise <command>tail -F</command> pour extraire des données des fichiers |
|---|
| 438 |
de logs en vous permettant d'utiliser des filtres multilog (via l'option CRITERIA) afin |
|---|
| 439 |
de créer des fichiers de logs spécifiques. Le but est de fournir un moyen de surveiller |
|---|
| 440 |
les fichiers de logs en temps réel en quête de données <quote>intéressante</quote> |
|---|
| 441 |
sans devoir modifier le fichier de log initial ou gacher des ressources CPU/IO |
|---|
| 442 |
en re-scannant les logs réguliÚrement. |
|---|
| 443 |
</para> |
|---|
| 444 |
|
|---|
| 445 |
<para>Pour une utilisation non interactive, il faut configurer les variable: |
|---|
| 446 |
<envar>BASEDIR</envar> <envar>SYSUSR</envar> <envar>SOURCE</envar> |
|---|
| 447 |
<envar>EXTENSION</envar> <envar>CRITERIA</envar>. Si une seul de ces options n'est |
|---|
| 448 |
pas définie le script demande interactivement les informations de configuration. |
|---|
| 449 |
</para> |
|---|
| 450 |
|
|---|
| 451 |
<itemizedlist> |
|---|
| 452 |
<listitem><para> |
|---|
| 453 |
<envar>BASEDIR</envar> : l'emplacement où sera créée la structure du répertoire du service de logrep. |
|---|
| 454 |
Il ne faut <emphasis>pas</emphasis> que ce soit le répertoire <filename>/var/service</filename>. |
|---|
| 455 |
</para></listitem> |
|---|
| 456 |
<listitem><para><envar>SYSUSR</envar> : l'utilisateur unix qui lancera le service.</para></listitem> |
|---|
| 457 |
<listitem><para><envar>SOURCE</envar> : nom du service de log que vous voulez suivre.</para></listitem> |
|---|
| 458 |
<listitem><para><envar>EXTENSION</envar> : un tag pour différencier ce logrep de ceux qui utilisent la même source.</para></listitem> |
|---|
| 459 |
<listitem><para><envar>CRITERIA</envar> : le filtre multilog que vous voulez utiliser.</para></listitem> |
|---|
| 460 |
</itemizedlist> |
|---|
| 461 |
|
|---|
| 462 |
<para> Un exemple trivial consiste à produire un fichier de log de tous les messages d'erreur |
|---|
| 463 |
slon qui pourrait être utilisé pour déclencher une alerte nagios : |
|---|
| 464 |
<command>EXTENSION='ERRORS'</command> |
|---|
| 465 |
<command>CRITERIA="'-*' '+* * ERROR*'"</command> |
|---|
| 466 |
(On relance la surveillance en déclenchant une rotation des logs avec <command>svc -a $svc_dir</command>) |
|---|
| 467 |
</para> |
|---|
| 468 |
|
|---|
| 469 |
<para> Une application plus intéressante est la surveillance de la progression d'une souscription d'un noeud : |
|---|
| 470 |
<command>EXTENSION='COPY'</command> |
|---|
| 471 |
<command>CRITERIA="'-*' '+* * ERROR*' '+* * WARN*' '+* * CONFIG enableSubscription*' '+* * DEBUG2 remoteWorkerThread_* prepare to copy table*' '+* * DEBUG2 remoteWorkerThread_* all tables for set * found on subscriber*' '+* * DEBUG2 remoteWorkerThread_* copy*' '+* * DEBUG2 remoteWorkerThread_* Begin COPY of table*' '+* * DEBUG2 remoteWorkerThread_* * bytes copied for table*' '+* * DEBUG2 remoteWorkerThread_* * seconds to*' '+* * DEBUG2 remoteWorkerThread_* set last_value of sequence*' '+* * DEBUG2 remoteWorkerThread_* copy_set*'"</command> |
|---|
| 472 |
</para> |
|---|
| 473 |
|
|---|
| 474 |
<para>Si vous avez un log de suscription, alors il est facile |
|---|
| 475 |
de déterminer si un noeud donné est en train de réaliser une copie |
|---|
| 476 |
ou une autre activité de souscription. Si les log ne sont pas vide et |
|---|
| 477 |
ne se termine pas par |
|---|
| 478 |
<command>"CONFIG enableSubscription: sub_set:1"</command> |
|---|
| 479 |
(ou 1 est le numéro d'ensemble de réplication que vous avez abonné) |
|---|
| 480 |
alors le slon est au milieu d'une copie initiale.</para> |
|---|
| 481 |
|
|---|
| 482 |
<para> Si vous surveiller le mtime du fichier de log de votre noeud primaire |
|---|
| 483 |
pour déterminer si le slon est tombé dans le coma, vérifier ce log de souscription |
|---|
| 484 |
est un bon moyen d'éviter de stopper le noeud alors qu'un souscription est en cours. |
|---|
| 485 |
En bonus, puisque les slons utilise svscan, vous pouvez simplement détruire le fichier |
|---|
| 486 |
( via l'interface svc ) et laisser svscan le recommencer plus tard. J'ai également |
|---|
| 487 |
découvert que les logs de COPY sont pratiques pour suivre de maniÚre interactive |
|---|
| 488 |
l'activité des souscritpions. |
|---|
| 489 |
</para> |
|---|
| 490 |
</sect3> |
|---|
| 491 |
|
|---|
| 492 |
</sect2> |
|---|
| 493 |
</sect1> |
|---|