forked from gleu/pgdocs_fr
/
slon.xml
483 lines (433 loc) · 20.2 KB
/
slon.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
<?xml version="1.0" encoding="UTF-8"?>
<!-- Dernière modification
le $Date$
par $Author$
révision $Revision$ -->
<refentry id="slon">
<refmeta>
<refentrytitle id="app-slon-title"><application>slon</application></refentrytitle>
<manvolnum>1</manvolnum>
<refmiscinfo>Application</refmiscinfo>
</refmeta>
<refnamediv>
<refname><application>slon</application></refname>
<refpurpose>
Le démon &slony1;
</refpurpose>
</refnamediv>
<indexterm zone="slon">
<primary>slon</primary>
</indexterm>
<refsynopsisdiv>
<cmdsynopsis>
<command>slon</command>
<arg rep="repeat"><replaceable class="parameter">option</replaceable></arg>
<arg><replaceable class="parameter">clustername</replaceable></arg>
<arg><replaceable class="parameter">conninfo</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para><application>slon</application> est un démon applicatif qui
<quote>contrôle</quote> la réplication &slony1;. Une
instance <application>slon</application> doit être lancée pour
chaque nœud du cluster &slony1;.</para>
</refsect1>
<refsect1 id="r1-app-slon-3">
<title>Options</title>
<variablelist>
<varlistentry>
<term><option>-d</option> <replaceable class="parameter">log_level</replaceable></term>
<listitem>
<para>
Le paramètre <envar>log_level</envar> spécifie le niveau de
messages de débogage que <application>slon</application> doit
afficher dans son journal d'activité.
</para>
<para id="nineloglevels">Il y a neuf niveaux de débogage :
<itemizedlist>
<listitem><para>Fatal</para></listitem>
<listitem><para>Error</para></listitem>
<listitem><para>Warn</para></listitem>
<listitem><para>Config</para></listitem>
<listitem><para>Info</para></listitem>
<listitem><para>Debug1</para></listitem>
<listitem><para>Debug2</para></listitem>
<listitem><para>Debug3</para></listitem>
<listitem><para>Debug4</para></listitem>
</itemizedlist>
</para>
<para>
Les cinq premiers niveaux de débogage (de Fatal à Info) sont
<emphasis>toujours</emphasis> affichés dans les traces. Dans les
précédentes versions de &slony1;, la valeur <quote>suggérée</quote>
pour <envar>log_level</envar> était 2, qui fournit toutes les traces
jusqu'au niveau de débogage 2. Dans &slony1; version 2, il est
recommandé de configurer <envar>log_level</envar> à 0 ; la
plupart des informations intéressantes dans les traces est générée
à des niveaux supérieurs.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-s</option> <replaceable class="parameter">Intervalle entre
les vérifications SYNC</replaceable></term>
<listitem>
<para>
Le paramètre <envar>sync_interval</envar>, exprimé en millisecondes,
indique à quelle fréquence <application>slon</application> doit
vérifier si un événement <command>SYNC</command> doit être produit.
La valeur par défaut est 2000 ms. La boucle principale dans
<function>sync_Thread_main()</function> est endormie pendant des
intervalles de <envar>sync_interval</envar> millisecondes entre
chaque itération.
</para>
<para>
Un intervalle de vérifications très court garantit que le nœud
origine soit <quote>très suivi</quote> car il met à jour les abonnés
plus fréquemment. Si vous avez des séquences répliquées qui sont
souvent mises à jour <emphasis>sans</emphasis> que certaines tables
ne soient affectées, cela évite que des opérations qui mettent à
jour uniquement ces séquences soient effectuées, et ainsi évite la
génération d'événements de synchronisation.
</para>
<para>
Si un nœud n'est pas l'origine d'un ensemble de réplication,
et donc qu'il ne reçoit aucune mise à jour des données répliquées,
alors il est un peu inutile de mettre une valeur inférieure à celle
du paramètre <envar>sync_interval_timeout</envar>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-t</option><replaceable class="parameter">intervalle maximal
entre deux SYNC</replaceable></term>
<listitem>
<para>
À la fin de chaque période <envar>sync_interval_timeout</envar>,
un événement <command>SYNC</command> est produit sur le nœud
<quote>local</quote> même s'il n'y eu aucune mise à jour des
données répliquées et qu'aucun <command>SYNC</command> n'a été
généré.
</para>
<para>
Si l'activité de l'application s'arrête, soit parce que
l'application a été éteinte, soit parce que les utilisateurs humains
sont rentrés chez eux et arrêtés les mises à jour, alors le démon
&lslon; continue de tourner et se réveille toutes les
<envar>sync_interval</envar> millisecondes, et si aucune mise à
jour ne s'est produite, alors aucun événement <command>SYNC</command>
n'est généré. Sans ce paramètre <quote>timeout</quote>,
<emphasis>aucun</emphasis> événement <command>SYNC</command> ne
pourrait être produit, et cela entraînerait la chute du système de
réplication.
</para>
<para>
Le paramètre <envar>sync_interval_timeout</envar> provoque la
génération de <command>SYNC</command>, même s'il n'y a pas
réellement de travail de réplication a faire. Plus la valeur de
ce paramètre est bas, plus les évènements <command>SYNC</command>
lorsque l'application n'est pas active. Ceci a deux effets :
</para>
<itemizedlist>
<listitem>
<para>
Le système aura plus de travail.
</para>
<para>
(Cependant puisque l'application n'utilise pas la base de
données et qu'il n'y a pas de données à répliquer, la charge
de travail supplémentaire sera assez simple à gérer.)
</para>
</listitem>
<listitem>
<para>
La réplication sera tenue un peu plus <quote>à jour</quote>.
</para>
<para>
(Cependant puisqu'il n'y a pas de données à répliquer, être
plus souvent <quote>mis à jour</quote> est un mirage.)
</para>
</listitem>
</itemizedlist>
<para>
La valeur par défaut est 10000 ms et la valeur maximale est 120000
ms. Par défaut, vous pouvez prévoir que chaque nœud soit
<quote>synchronisé</quote> par un <command>SYNC</command> toutes les
dix secondes.
</para>
<para>
Notez que des événements <command>SYNC</command> sont aussi générés
sur chaque nœud abonné. Cependant, puisqu'ils ne contiennent
pas de données à répliquer par les autres nœuds, les évènements
<command>SYNC</command> des nœuds abonnés ne sont pas
terriblement intéressants.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-g</option> <replaceable class="parameter">taille du groupe</replaceable></term>
<listitem>
<para>
L'option <envar>sync_group_maxsize</envar> contrôle la taille
maximale d'un groupe <command>SYNC</command>. La valeur par défaut
est 6. Ainsi, si un nœud particulier a 200 événements
<command>SYNC</command> de retard, il essaiera de les regrouper
par groupes dont la taille maximale sera
<envar>sync_group_maxsize</envar>. Ceci doit permettre de réduire
le temps de lantence au démarrage (NdT : « overhead »)
en réduisant le nombre de transactions à <quote>valider</quote>.
</para>
<para>
La valeur par défaut, 6, est probablement adéquate pour les petits
systèmes qui ne peuvent allouer que des quantités limitées de
mémoire à <application>slon</application>. Si vous avez beaucoup de
mémoire, il est raisonnable d'augmenter cette valeur car cela
augmentera la quantité de travail réalisée à chaque transaction, et
cela permettra à un nœud abonné de rattraper plus vite son
retard.
</para>
<para>
Les processus Slon sont souvent très petits ; même en cas
de valeurs très fortes pour cette option,
<application>slon</application> devrait simplement grossir de
quelques Mo.
</para>
<para>
Le gros avantage d'augmenter ce paramètre est que cela divise
le nombre de transactions <command>COMMIT</command> ; passer
de 1 à 2 aura probablement un impact considérable, mais le bénéfice
se réduit progressivement lorsque la taille des groupes est
suffisamment large. Il n'y aura probablement pas de différence
notable entre 80 et 90. Rendu à ce niveau, l'augmentation de cette
valeur dépend du fait que les grands ensembles de <command>SYNC</command>
perturbent les curseurs de <envar>LOG</envar> en consommant de plus
en plus de mémoire et nécessitant plus d'efforts lors des tris.
</para>
<para>
Dans &slony1; version 1.0, <application>slon</application> essaie
toujours de regrouper un maximum de <command>SYNC</command> ensemble,
ce qui <emphasis>n'est pas</emphasis> idéal si la réplication a été
déstabilisée par de grosses mises à jour (<emphasis>par
exemple</emphasis>, une transaction unique qui met à jour des
centaines de milliers de lignes) ou lorsque les
<command>SYNC</command> ont été interrompus sur un nœud origine,
ce qui fait que les suivants sont volumineux. Vous rencontrerez ce
problème : en regroupant des <command>SYNC</command> très
larges, le processus <application>slon</application> peut échouer.
Au redémarrage, il essaie à nouveau de traiter ce large ensemble
de <command>SYNC</command> et il retombe sur le même problème
encore et encore jusqu'à ce qu'un administrateur interrompe tout
cela et change la valeur de l'option <option>-g</option> pour
sortir de cette situation d'<quote>inter-blocage</quote>.
</para>
<para>
Au contraire, avec &slony1; 1.1 et les versions ultérieures, le démon
<application>slon</application> s'adapte en augmentant
<quote>progressivement</quote> le nombre de <command>SYNC</command>
par groupe, de 1 jusqu'à la valeur maximale. Ainsi, si quelques
<command>SYNC</command> posent problème, le démon
<application>slon</application> pourra (s'il est surveillé par
un processus chien de garde) traiter un par un ces évènements
<command>SYNC</command> problématiques, et ainsi éviter
l'intervention d'un administrateur.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-o</option> <replaceable class="parameter">temps de
synchronisation souhaité</replaceable></term>
<listitem>
<para>
La période <quote>maximale</quote> pour un groupe de
<command>SYNC</command>.
</para>
<para>
Si la réplication est en retard, le démon slon va progressivement
augmenter le nombre de <command>SYNC</command> groupés ensemble,
dans le but de ne pas dépasser le temps spécifié par
<envar>desired_sync_time</envar> (pour cela, Slon se base sur le
temps pris par le <emphasis>dernier</emphasis> groupe de
<command>SYNC</command>).
</para>
<para>
La valeur par défaut est 60000ms, c'est-à-dire une minute.
</para>
<para>
Ainsi, vous pouvez prévoir (en tout cas espérer !) que vous
aurez un <command>COMMIT</command> environ toutes les minutes.
</para>
<para>
Cela n'est pas <emphasis>complètement</emphasis> prévisible car il
est possible de demander une <emphasis>très grosse mise à
jour</emphasis> qui fera <quote>exploser</quote> la taille du
<command>SYNC</command>. Dans ce cas-là, l'heuristique sera rétablie
pour le <emphasis>prochain</emphasis> groupe.
</para>
<para>
L'effet final est d'améliorer la façon dont
<productname>Slony-I</productname> gère les variations du trafic.
En commençant avec un événement <command>SYNC</command>, puis
en augmentant progressivement, même si certaines variations seront
assez grandes pour provoquer un crash du processus
<productname>PostgreSQL</productname>, <productname>Slony-I</productname>
redémarrera en traitant un seul <command>SYNC</command> à la fois,
afin que poursuivre le processus de réplication autant que possible.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-c</option> <replaceable class="parameter">cycles de nettoyage</replaceable></term>
<listitem>
<para>
La valeur <envar>vac_frequency</envar> indique la fréquence des
opérations <command>VACUUM</command> lors des cycles de nettoyage.
</para>
<para>
Positionnez cette valeur à zéro pour désactiver les nettoyages
initiés par <application>slon</application>. Si vous utilisez un
mécanisme tel que <application>pg_autovacuum</application> pour
lancer les VACUUM, vous n'aurez probablement pas besoin que slon
initie des VACUUM de lui-même. Sinon, il existe des tables
utilisées par <productname>Slony-I</productname> qui collectent
<emphasis>beaucoup</emphasis> de lignes mortes et qui doivent
être nettoyées fréquemment, en particulier &pglistener;.
</para>
<para>
À partir de &slony1; version 1.1, cela change un peu ; le
processus de nettoyage cherche, d'itération en itération,
l'identifiant de la plus ancienne transaction encore active dans
le système. Si l'identifiant ne change pas entre deux itérations,
alors il existe une vieille transaction en activité, et donc un
<command>VACUUM</command> n'apportera rien de bon. À la place, le
processus de nettoyage déclenche simplement une opération
<command>ANALYZE</command> sur ces tables afin de mettre à jours
les statistiques dans <envar>pg_statistics</envar>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-p</option> <replaceable class="parameter">fichier du PID</replaceable></term>
<listitem>
<para>
La variable <envar>pid_file</envar> contient le nom du fichier dans
lequel le PID (identifiant du processus) du démon
<application>slon</application> est stocké.
</para>
<para>
Cela simplifie la création de scripts de surveillance des processus
<application>slon</application> qui s'exécutent sur un hôte.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-f</option> <replaceable class="parameter">fichier de configuration</replaceable></term>
<listitem>
<para>
Fichier qui contient la configuration <application>slon</application>.
</para>
<para>
La configuration est détaillée plus loin dans le chapitre <link
linkend="runtime-config">Configuration de Slon</link>. Si vous avez
défini un ensemble complexe de paramètre ou si vous ne voulez pas
que les paramètres soient visibles dans les variables d'environnement
(notamment les mots de passe), il est plus pratique de placer une
partie, voire l'ensemble des paramètres dans un fichier de
configuration. Vous pouvez également placer les paramètres communs à
tous les processus slon dans un fichier de configuration partagé et
définir en ligne de commande d'autres paramètres que les informations
de connexions. Vous pouvez aussi créer un fichier de configuration
pour chaque nœud.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-a</option> <replaceable class="parameter">répertoire des archives</replaceable></term>
<listitem>
<para>
L'option <envar>archive_dir</envar> indique le dossier dans lequel
on place la séquence de fichiers archives contenant les événements
<command>SYNC</command> utilisés en mode &logshiplink;.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-x</option> <replaceable class="parameter">commande à
appliquer pour l'archivage des journaux</replaceable></term>
<listitem>
<para>
Le paramètre <envar>command_on_logarchive</envar> indique la commande
qui doit être exécutée à chaque fois qu'un fichier SYNC est
correctement généré.
</para>
<para>
Voir le chapitre <xref linkend="slon-config-command-on-logarchive"/>
pour plus de détails.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-q</option> <replaceable class="parameter">quitter en
fonction d'un fournisseur</replaceable></term>
<listitem>
<para>
L'option <envar>quit_sync_provider</envar> indique quel processus
fournisseur doit être surveilleé afin d'arrêter la réplication
après un événement donné. Ceci doit être utilisé conjointement avec
l'option <option>-r</option> ci-dessous...
</para>
<para>
Cela permet de stopper la réplication sur un processus
<application>slon</application> après un certain point.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-r</option> <replaceable class="parameter">quitte après
un numéro d'événement</replaceable></term>
<listitem>
<para>
Le paramètre <envar>quit_sync_finalsync</envar> indique le numéro
de l'événement après lequel un processus de réplication doit se
terminer. Ceci doit être utilisé conjointement avec l'option
<option>-q</option> ci-dessus...</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-l</option> <replaceable class="parameter"> interval de retard</replaceable></term>
<listitem>
<para>
L'option <envar>lag_interval</envar> spécifie une valeur temporelle
(en anglais) telle que <command>3 minutes</command>, <command>4
hours</command> ou <command>2 days</command> qui indique le temps
de retard que doit avoir un nœud par rapport à son fournisseur.
Cela implique que les événements seront ignorés tant que leur âge
sera inférieur à cet intervalle.
</para>
<warning>
<para>
Il y a un effet secondaire à ce retard ; Les événements qui
demandent que tous les nœuds se synchronisent, notamment
ceux qui sont produits lors d'une opération <xref
linkend="stmtfailover"/> et d'un <xref linkend="stmtmoveset"/>,
devront attendre pendant cet interval de temps.
</para>
<para>
C'est un comportement qui n'est pas idéal dans le cas d'une bascule
après une panne, ou lorsque l'on veut exécuter des scripts DDL
(<xref linkend="stmtddlscript"/> ).
</para>
</warning>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Valeur de retour</title>
<para>
<application>slon</application> renvoie 0 dans le shell s'il s'est terminé
normalement. En cas d'erreur fatale, il exécute la fonction
<function>exit(-1)</function> (qui envoie en général une valeur de retour
de 127 ou 255, suivant votre système d'exploitation).
</para>
</refsect1>
</refentry>