| 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="logshipping"> |
|---|
| 8 |
<title>Log Shipping</title> |
|---|
| 9 |
<indexterm><primary>log shipping</primary></indexterm> |
|---|
| 10 |
|
|---|
| 11 |
<para> Une des nouvelles fonctionnalités de la version 1.1, qui |
|---|
| 12 |
ne fut réellement stable qu'à partir de la version 1.2.11, |
|---|
| 13 |
est la possibilité de regrouper les mises à jour dans des fichiers |
|---|
| 14 |
de logs qui sont stockés dans un répertoire d'attente. |
|---|
| 15 |
</para> |
|---|
| 16 |
|
|---|
| 17 |
<para> Ces fichiers de log peuvent alors être transférés selon la |
|---|
| 18 |
méthode de votre choix vers le <quote>serveur esclave</quote>, |
|---|
| 19 |
que ce soit via FTP, rsync, ou même avec une <quote>clé USB</quote> |
|---|
| 20 |
d' 1GB transportée par avion.</para> |
|---|
| 21 |
|
|---|
| 22 |
<para> Il y a plein de choses sympas à faire avec un tel flux de donnée, |
|---|
| 23 |
en particulier : |
|---|
| 24 |
<itemizedlist> |
|---|
| 25 |
|
|---|
| 26 |
<listitem><para> Répliquer des noeuds qui |
|---|
| 27 |
<emphasis>ne peuvent pas</emphasis> être securisés;</para></listitem> |
|---|
| 28 |
|
|---|
| 29 |
<listitem><para> Répliquer dans des lieux ou il n'est pas possible |
|---|
| 30 |
d'établir des communications bidirectionnelles;</para></listitem> |
|---|
| 31 |
|
|---|
| 32 |
<listitem><para> Utiliser une nouvelle forme de <acronym>PITR</acronym> |
|---|
| 33 |
(Point In Time Recovery) qui filtre les transactions composées uniquement |
|---|
| 34 |
de lectures et celles qui mettent à jour des tables qui ne sont pas |
|---|
| 35 |
intéressantes;</para></listitem> |
|---|
| 36 |
|
|---|
| 37 |
<listitem><para> En cas de désastre, vous pouvez regarder à l'intérieur |
|---|
| 38 |
des logs pour voir le détail des requêtes;</para> |
|---|
| 39 |
|
|---|
| 40 |
<para> Cela rend le log shipping potentiellement utile même si |
|---|
| 41 |
vous n'avez pas réellement l'intention de créer un noeud répliqué; |
|---|
| 42 |
</para></listitem> |
|---|
| 43 |
|
|---|
| 44 |
<listitem><para> C'est un méthode trÚs subtile pour charger |
|---|
| 45 |
des données en vue de tests; |
|---|
| 46 |
</para></listitem> |
|---|
| 47 |
|
|---|
| 48 |
<listitem><para> Nous avons un systÚme <quote>escrow</quote> qui |
|---|
| 49 |
serait incroyablement moins cher avec du log shipping;</para></listitem> |
|---|
| 50 |
|
|---|
| 51 |
<listitem><para> Vous pouvez appliquer des triggers sur un |
|---|
| 52 |
<quote>noeud déconnecté</quote> pour effectuer des traitements |
|---|
| 53 |
supplémentaires sur les données.</para> |
|---|
| 54 |
|
|---|
| 55 |
<para> Par exemple, vous pouvez prendre une base relativement <quote>statique</quote> |
|---|
| 56 |
et la transformer en une table <quote>temporelle</quote> , en utilisant |
|---|
| 57 |
des triggers qui that implémentent les techniques décrites dans |
|---|
| 58 |
<citation>Developing Time-Oriented Database Applications in SQL |
|---|
| 59 |
</citation> de <ulink url="http://www.cs.arizona.edu/people/rts/"> |
|---|
| 60 |
Richard T. Snodgrass</ulink>.</para></listitem> |
|---|
| 61 |
|
|---|
| 62 |
</itemizedlist></para> |
|---|
| 63 |
|
|---|
| 64 |
<qandaset> |
|---|
| 65 |
<qandaentry> |
|---|
| 66 |
|
|---|
| 67 |
<question> <para> Où sont générés les <quote>fichiers de log</quote> d'un |
|---|
| 68 |
ensemble de réplication donné ?</para> |
|---|
| 69 |
</question> |
|---|
| 70 |
|
|---|
| 71 |
<answer> <para> Chaque noeud abonné <link linkend="slon"> slon </link> |
|---|
| 72 |
peut les générer en ajoutant l'option <option>-a</option>.</para> |
|---|
| 73 |
|
|---|
| 74 |
<note><para> Notez que cela implique que pour utiliser le log |
|---|
| 75 |
shipping, vous devez avoir au moins un noeud abonné. </para></note> |
|---|
| 76 |
</answer> |
|---|
| 77 |
|
|---|
| 78 |
</qandaentry> |
|---|
| 79 |
|
|---|
| 80 |
<qandaentry> <question> <para> Que se passe-t-il lors d'un <xref |
|---|
| 81 |
linkend="stmtfailover"/>/ <xref linkend="stmtmoveset"/> |
|---|
| 82 |
se déclenche ?</para></question> |
|---|
| 83 |
|
|---|
| 84 |
<answer><para> Rien de spécial. Tant que le noeud d'archivage rester un abonné |
|---|
| 85 |
il continue à produire des logs.</para></answer> |
|---|
| 86 |
|
|---|
| 87 |
<answer> <warning> <para>Si le noeud d'archivage devient l'origine, il |
|---|
| 88 |
continuera à produire des logs.</para> </warning></answer> |
|---|
| 89 |
</qandaentry> |
|---|
| 90 |
|
|---|
| 91 |
<qandaentry> <question> <para> Que se passe-t-il lorsqu'il n'y a plus assez d'espace |
|---|
| 92 |
pour les fichiers de logs ? </para></question> |
|---|
| 93 |
|
|---|
| 94 |
<answer><para> Le noeud n'accepte plus les événements <command>SYNC</command>s |
|---|
| 95 |
jusqu'à ce que le problÚme soit réglé. La base de donnée qui est dupliquée |
|---|
| 96 |
tombera également en panne. </para></answer> |
|---|
| 97 |
</qandaentry> |
|---|
| 98 |
|
|---|
| 99 |
<qandaentry> |
|---|
| 100 |
<question> <para> Comment réaliser un abonnement ? </para></question> |
|---|
| 101 |
|
|---|
| 102 |
<answer><para> Le script dans <filename>tools</filename> nommé |
|---|
| 103 |
<application>slony1_dump.sh</application> est un script shell qui |
|---|
| 104 |
exporte l'état <quote>actuel</quote> du noeud abonné.</para> |
|---|
| 105 |
|
|---|
| 106 |
<para> Vous devez lancer le <application><link linkend="slon"> slon |
|---|
| 107 |
</link></application> pour le noeud abonné avec log shipping activé. |
|---|
| 108 |
à tout moment, vous pouvez lancer la commande |
|---|
| 109 |
<application>slony1_dump.sh</application>, qui va récupérer l'état |
|---|
| 110 |
de l'abonné sous la forme d'événements <command>SYNC</command>. |
|---|
| 111 |
Une fois que l'export est complet, tous les logs <command>SYNC</command> |
|---|
| 112 |
produits à partir du moment où l'export a <emphasis>démarré</emphasis> |
|---|
| 113 |
seront ajoutés à l'export afin d'obtenir un <quote>noeud abonné |
|---|
| 114 |
au log shipping</quote>. |
|---|
| 115 |
</para></answer> |
|---|
| 116 |
</qandaentry> |
|---|
| 117 |
|
|---|
| 118 |
<qandaentry> <question><para> Quelles sont les limitations du log |
|---|
| 119 |
shipping ? </para> |
|---|
| 120 |
</question> |
|---|
| 121 |
|
|---|
| 122 |
<answer><para> Dans la version initiale, il y a beaucoup de limitations. |
|---|
| 123 |
Heureusement au fur et à mesure des nouvelles versions, certaines de ces |
|---|
| 124 |
limitations ont été corrigées ou supprimées. </para> </answer> |
|---|
| 125 |
|
|---|
| 126 |
<answer><para> La fonctionnalité du log shipping revient à |
|---|
| 127 |
<quote>sniffer</quote> les données appliquées sur un noeud abonné |
|---|
| 128 |
. En conséquence, vous devez avoir au moins un noeud |
|---|
| 129 |
<quote>standard</quote>; vous ne pouvez pas avoir un cluster composé |
|---|
| 130 |
seulement d'une origine et d'un ensemble de <quote>noeuds de log shipping |
|---|
| 131 |
</quote>. </para></answer> |
|---|
| 132 |
|
|---|
| 133 |
<answer><para> Le <quote>noeud de log shipping</quote> traque |
|---|
| 134 |
la totalité du trafic allant vers un abonné. Vous pouvez |
|---|
| 135 |
séparer les choses lorsqu'il y a de multiple ensembles de |
|---|
| 136 |
réplication. </para></answer> |
|---|
| 137 |
|
|---|
| 138 |
<answer><para> Actuellement le <quote>noeud de log shipping </quote> |
|---|
| 139 |
traque uniquement les événements <command>SYNC</command>. |
|---|
| 140 |
Cela devrait être suffisant pour gérer <emphasis>certains</emphasis> |
|---|
| 141 |
changements de la configuration du cluster, mais pas tous. |
|---|
| 142 |
</para> |
|---|
| 143 |
|
|---|
| 144 |
<para> Un bonne partie des types événements <emphasis> sont </emphasis> |
|---|
| 145 |
gérés afin que le log shipping puissent les traités : |
|---|
| 146 |
|
|---|
| 147 |
<itemizedlist> |
|---|
| 148 |
|
|---|
| 149 |
<listitem><para>Bien évidemment, les événements <command>SYNC </command> sont gérés; |
|---|
| 150 |
</para></listitem> |
|---|
| 151 |
|
|---|
| 152 |
<listitem><para>Les <command>DDL_SCRIPT</command> sont gérés.</para></listitem> |
|---|
| 153 |
|
|---|
| 154 |
<listitem><para><command> UNSUBSCRIBE_SET </command></para> |
|---|
| 155 |
|
|---|
| 156 |
<para> Cet événement, tout comme <command>SUBSCRIBE_SET</command> n'est pas |
|---|
| 157 |
géré par le noeud de log shipping. Mais cette commande, par définition, |
|---|
| 158 |
implique que les événements <command>SYNC</command> ne |
|---|
| 159 |
contiennent plus de mises à jour pour l'ensemble de réplication; |
|---|
| 160 |
</para> |
|---|
| 161 |
|
|---|
| 162 |
<para> De la même façon, <command>SET_DROP_TABLE</command>, |
|---|
| 163 |
<command>SET_DROP_SEQUENCE</command>, |
|---|
| 164 |
<command>SET_MOVE_TABLE</command>, |
|---|
| 165 |
<command>SET_MOVE_SEQUENCE</command> <command>DROP_SET</command>, |
|---|
| 166 |
<command>MERGE_SET</command>, seront géré de maniÚre <quote>appropriée |
|---|
| 167 |
</quote>;</para></listitem> |
|---|
| 168 |
|
|---|
| 169 |
<listitem><para><command> SUBSCRIBE_SET </command></para> |
|---|
| 170 |
|
|---|
| 171 |
<para> Malheureusement, des choses <quote>étranges</quote> lorsqu'on |
|---|
| 172 |
gÚre cette commande... Quand un <command>SUBSCRIBE_SET</command> |
|---|
| 173 |
se produit, cela déclenche un évÚnement nommé |
|---|
| 174 |
<command>ENABLE_SUBSCRIPTION</command> |
|---|
| 175 |
qui est levé et traiter uniquement sur le noeud abonné;</para> |
|---|
| 176 |
|
|---|
| 177 |
<para> <command> SUBSCRIBE_SET </command> est vraiment un événement |
|---|
| 178 |
trÚs simple, il se contente de <emphasis>déclarer</emphasis> |
|---|
| 179 |
qu'un noeud s'abonne à un ensemble donné via un fournisseur donné. |
|---|
| 180 |
<emphasis>Il ne copie pas les données !</emphasis> </para> |
|---|
| 181 |
|
|---|
| 182 |
<para> Le coeur du travail de souscription est réalisé par |
|---|
| 183 |
<command>ENABLE_SUBSCRIPTION</command>, qui est un événement |
|---|
| 184 |
déclenché sur le noeud local, et non pas dans la même séquence |
|---|
| 185 |
que les autres événements en provenance des autres noeuds ( notament |
|---|
| 186 |
le fournisseur de données ). </para> |
|---|
| 187 |
|
|---|
| 188 |
<para> Avec la modifications du traitement des logs intervenus dans la version 1.2.11, |
|---|
| 189 |
ceci ne présente plus de problÚmes pour l'utilisateur.</para> |
|---|
| 190 |
|
|---|
| 191 |
</listitem> |
|---|
| 192 |
|
|---|
| 193 |
<listitem><para> Les différents événements impliqués dans la configuration d'un |
|---|
| 194 |
noeud sont inutiles dans le cadre du log shipping : |
|---|
| 195 |
|
|---|
| 196 |
<command>STORE_NODE</command>, |
|---|
| 197 |
<command>ENABLE_NODE</command>, |
|---|
| 198 |
<command>DROP_NODE</command>, |
|---|
| 199 |
<command>STORE_PATH</command>, |
|---|
| 200 |
<command>DROP_PATH</command>, |
|---|
| 201 |
<command>STORE_LISTEN</command>, |
|---|
| 202 |
<command>DROP_LISTEN</command></para></listitem> |
|---|
| 203 |
|
|---|
| 204 |
<listitem><para> Les événements impliqués dans la configuration |
|---|
| 205 |
des ensembles de réplication sont également inutiles : |
|---|
| 206 |
|
|---|
| 207 |
<command>STORE_SET</command>, |
|---|
| 208 |
<command>SET_ADD_TABLE</command>, |
|---|
| 209 |
<command>SET_ADD_SEQUENCE</command>, |
|---|
| 210 |
<command>STORE_TRIGGER</command>, |
|---|
| 211 |
<command>DROP_TRIGGER</command>, |
|---|
| 212 |
<command>TABLE_ADD_KEY</command> |
|---|
| 213 |
</para></listitem> |
|---|
| 214 |
|
|---|
| 215 |
</itemizedlist> |
|---|
| 216 |
</para> |
|---|
| 217 |
</answer> |
|---|
| 218 |
|
|---|
| 219 |
<answer><para> Il serait pratique de transformer un noeud de <quote>log |
|---|
| 220 |
shipping</quote> est un noeud &slony1; complÚtement fonctionnel sur |
|---|
| 221 |
lequel on pourrait basculer. Cela serait utile |
|---|
| 222 |
(par exemple) pour un cluster de 6 noeuds; cela permettrait de |
|---|
| 223 |
commencer par créer noeud abonné puis d'utiliser le log shipping |
|---|
| 224 |
pour construire les 4 autres noeuds en parallÚle. |
|---|
| 225 |
</para> |
|---|
| 226 |
|
|---|
| 227 |
<para> Cette utilisation n'est pas possible, mais on peut ajouter |
|---|
| 228 |
la configuration &slony1; dans un noeud, et le promouvoir |
|---|
| 229 |
en tant que nouveau noeud. |
|---|
| 230 |
Encore une fois, c'est une simple question de programmation |
|---|
| 231 |
(mais ça n'est pas forcément si simple)... </para></answer> |
|---|
| 232 |
</qandaentry> |
|---|
| 233 |
</qandaset> |
|---|
| 234 |
|
|---|
| 235 |
<sect2><title> Conseils d'utilisation </title> |
|---|
| 236 |
|
|---|
| 237 |
<note> <para> Voici quelques notes plus ou moins structurées |
|---|
| 238 |
sur l'utilisation idéale du log shipping...</para> </note> |
|---|
| 239 |
|
|---|
| 240 |
<itemizedlist> |
|---|
| 241 |
|
|---|
| 242 |
<listitem><para> Vous ne <emphasis>devez</emphasis> pas appliquer aveuglément |
|---|
| 243 |
les fichiers <command>SYNC</command> car on en peut pas prendre un |
|---|
| 244 |
fichier <command>SYNC</command> au hasard. |
|---|
| 245 |
Si ce n'est pas un fichier approprié, alors la |
|---|
| 246 |
commande <function> setsyncTracking_offline() </function> |
|---|
| 247 |
échouera et votre session <application> psql</application> |
|---|
| 248 |
recevra la commande <command> ABORT</command>, puis recherchera |
|---|
| 249 |
dans le fichier <command>SYNC</command> Ã la recherche d'un |
|---|
| 250 |
<command>COMMIT</command> ou d'un <command>ROLLBACK</command> afin |
|---|
| 251 |
de continuer vers la prochaine transaction.</para> |
|---|
| 252 |
|
|---|
| 253 |
<para> Mais nous <emphasis> savons </emphasis> que la totalité du |
|---|
| 254 |
contenu du fichier va échouer ! Il est futile de continuer à analyser |
|---|
| 255 |
le reste du fichier.</para> |
|---|
| 256 |
|
|---|
| 257 |
<para> Voici une meilleure idée : |
|---|
| 258 |
|
|---|
| 259 |
<itemizedlist> |
|---|
| 260 |
|
|---|
| 261 |
<listitem><para> Tout d'abord, Lire les premiÚres lignes du fichier, jusqu'à |
|---|
| 262 |
l'appel à la fonction <function> setsyncTracking_offline() </function>. |
|---|
| 263 |
</para></listitem> |
|---|
| 264 |
|
|---|
| 265 |
<listitem><para> Essayez de l'appliquer jusque là .</para></listitem> |
|---|
| 266 |
|
|---|
| 267 |
<listitem><para> Si cela échoue, alors il est futile de continuer; |
|---|
| 268 |
lancez un <command>ROLLBACK</command> sur la transaction, et essayez |
|---|
| 269 |
éventuellement un autre fichier.</para></listitem> |
|---|
| 270 |
|
|---|
| 271 |
<listitem><para> Si l'appel à <function> setsyncTracking_offline() |
|---|
| 272 |
</function> fonctionne, alors vous avez trouver le bon fichier de |
|---|
| 273 |
<command>SYNC</command> et vous pouvez l'appliquer. Vous devrez |
|---|
| 274 |
probablement faire un <command>ROLLBACK</command> sur la transaction, |
|---|
| 275 |
puis utiliser <application>psql</application> pour appliquer |
|---|
| 276 |
la totalité des mises à jours contenues dans le fichier. |
|---|
| 277 |
</para></listitem> |
|---|
| 278 |
|
|---|
| 279 |
</itemizedlist></para> |
|---|
| 280 |
|
|---|
| 281 |
<para> Afin de faciliter la récupération des premiÚres lignes |
|---|
| 282 |
des fichiers sync, le format a été conçu pour qu'une ligne |
|---|
| 283 |
de pointillée indique la fin de <quote>l'en-tête </quote> : |
|---|
| 284 |
|
|---|
| 285 |
<programlisting> |
|---|
| 286 |
-- Slony-I log shipping archive |
|---|
| 287 |
-- Node 11, Event 656 |
|---|
| 288 |
start transaction; |
|---|
| 289 |
|
|---|
| 290 |
select "_T1".setsyncTracking_offline(1, '655', '656', '2007-09-23 18:37:40.206342'); |
|---|
| 291 |
-- end of log archiving header |
|---|
| 292 |
</programlisting></para></listitem> |
|---|
| 293 |
|
|---|
| 294 |
|
|---|
| 295 |
<listitem><para> Notez que l'en-tête inclut le timestamp qui témoigne de la |
|---|
| 296 |
date de l'événement SYNC. |
|---|
| 297 |
<programlisting> |
|---|
| 298 |
-- Slony-I log shipping archive |
|---|
| 299 |
-- Node 11, Event 109 |
|---|
| 300 |
start transaction; |
|---|
| 301 |
|
|---|
| 302 |
select "_T1".setsyncTracking_offline(1, '96', '109', '2007-09-23 19:01:31.267403'); |
|---|
| 303 |
-- end of log archiving header |
|---|
| 304 |
</programlisting></para> |
|---|
| 305 |
|
|---|
| 306 |
<para> Ce timestamp représente la date où le <command>SYNC</command> |
|---|
| 307 |
a été déclenché sur le noeud d'origine.</para> |
|---|
| 308 |
|
|---|
| 309 |
<para> La valeur est stockée dans la table de configuration |
|---|
| 310 |
sl_setsync_offline.</para> |
|---|
| 311 |
|
|---|
| 312 |
<para> Si vous construisez une base dynamique, cela représente probablement |
|---|
| 313 |
le moment ou voudrez appliquer toute les données d'une tansaction de |
|---|
| 314 |
de log shipping. </para> |
|---|
| 315 |
</listitem> |
|---|
| 316 |
|
|---|
| 317 |
<listitem><para> Vous pouvez trouver plus d'information sur |
|---|
| 318 |
comment l'activité du noeud est enregistré dans |
|---|
| 319 |
<xref linkend="logshiplog"/>. </para></listitem> |
|---|
| 320 |
|
|---|
| 321 |
</itemizedlist> |
|---|
| 322 |
|
|---|
| 323 |
<para> à partir de la version 1.2.11, il existe une méthode |
|---|
| 324 |
<emphasis>encore meilleure</emphasis> pour appliquer les logs, car |
|---|
| 325 |
leu rÚgle de nommage est devenu plus compréhensible.</para> |
|---|
| 326 |
|
|---|
| 327 |
<itemizedlist> |
|---|
| 328 |
|
|---|
| 329 |
<listitem><para> Les traces, sur le noeud de log shipping, qui |
|---|
| 330 |
indiquent quel est quel est le log le plus récemment |
|---|
| 331 |
traité, sont stockées dans la table <envar>sl_archive_tracking</envar>. </para> |
|---|
| 332 |
|
|---|
| 333 |
<para> Ainsi, vous pouvez prédire l'identifiant du prochain |
|---|
| 334 |
fichier de log en incrémentant le dernier identifiant de cette |
|---|
| 335 |
table.</para> |
|---|
| 336 |
</listitem> |
|---|
| 337 |
|
|---|
| 338 |
<listitem><para> Il existe néanmoins des variations dans le |
|---|
| 339 |
nommage des fichiers, en fonction du nombre de noeuds |
|---|
| 340 |
qui composent le cluster. Tous les noeuds produisent |
|---|
| 341 |
réguliÚrement des événements <command>SYNC</command>, |
|---|
| 342 |
même si ils ne sont pas le noeud origine, et le systÚme |
|---|
| 343 |
de log shipping génÚre des logs pour ces événements. </para> |
|---|
| 344 |
|
|---|
| 345 |
<para> En conséquence, lorsque l'on cherche le fichier de log suivant, |
|---|
| 346 |
il est nécessaire de chercher de maniÚre suivante : |
|---|
| 347 |
|
|---|
| 348 |
<programlisting> |
|---|
| 349 |
ARCHIVEDIR=/var/spool/slony/archivelogs/node4 |
|---|
| 350 |
SLONYCLUSTER=mon_cluster |
|---|
| 351 |
PGDATABASE=logshipdb |
|---|
| 352 |
PGHOST=logshiphost |
|---|
| 353 |
NEXTQUERY="select at_counter+1 from \"_${SLONYCLUSTER}\".sl_archive_tracking;" |
|---|
| 354 |
nextseq=`psql -d ${PGDATABASE} -h ${PGHOST} -A -t -c "${NEXTQUERY}" |
|---|
| 355 |
filespec=`printf "slony1_log_*_%20d.sql" |
|---|
| 356 |
for file in `find $ARCHIVEDIR -name "${filespec}"; do |
|---|
| 357 |
psql -d ${PGDATABASE} -h ${PGHOST} -f ${file} |
|---|
| 358 |
done |
|---|
| 359 |
</programlisting> |
|---|
| 360 |
</para> |
|---|
| 361 |
</listitem> |
|---|
| 362 |
|
|---|
| 363 |
<listitem><para> </para> </listitem> |
|---|
| 364 |
</itemizedlist> |
|---|
| 365 |
|
|---|
| 366 |
</sect2> |
|---|
| 367 |
|
|---|
| 368 |
<sect2><title> <application> find-triggers-to-deactivate.sh |
|---|
| 369 |
</application> </title> |
|---|
| 370 |
|
|---|
| 371 |
<indexterm><primary> Désactivation des triggers </primary> </indexterm> |
|---|
| 372 |
|
|---|
| 373 |
<para> Le <ulink |
|---|
| 374 |
url="http://www.slony.info/bugzilla/show_bug.cgi?id=19"> bug |
|---|
| 375 |
#19</ulink> indique que le dump d'un schéma peut contenir des |
|---|
| 376 |
triggers et des rÚgles que l'on ne souhaite pas activer sur un |
|---|
| 377 |
noeud de log shipping.</para> |
|---|
| 378 |
|
|---|
| 379 |
<para> L'outil <filename> tools/find-triggers-to-deactivate.sh |
|---|
| 380 |
</filename> a été créé pour assister l'utilisateur dans cette tache. |
|---|
| 381 |
Il peut être lancé sur un noeud qui sera utilisé comme schéma source, |
|---|
| 382 |
et il liste les rÚgles et les triggers présents sur ce noeud qui devraient |
|---|
| 383 |
être désactivés.</para> |
|---|
| 384 |
|
|---|
| 385 |
<para> Cela comprend le triggers <function>logtrigger</function> |
|---|
| 386 |
et <function>denyaccess</function> qui sont normalement exclut |
|---|
| 387 |
du schéma extrait avec pgdump. Il est toutefois de la responsabilité |
|---|
| 388 |
de l'administrateur de vérifier que des triggers comme ceux-ci |
|---|
| 389 |
sont bien retirés du réplicat du log shipping. |
|---|
| 390 |
</para> |
|---|
| 391 |
|
|---|
| 392 |
</sect2> |
|---|
| 393 |
|
|---|
| 394 |
<sect2> <title> L'outil <application>slony_logshipper </application></title> |
|---|
| 395 |
|
|---|
| 396 |
|
|---|
| 397 |
<para> à partir de la version 1.2.12, &slony1; a un outil conçu pour |
|---|
| 398 |
aider à appliquer les logs, nommé <application>slony_logshipper</application>. |
|---|
| 399 |
Il fonctionne avec trois types de paramÚtres : |
|---|
| 400 |
</para> |
|---|
| 401 |
|
|---|
| 402 |
<itemizedlist> |
|---|
| 403 |
<listitem><para> des options : </para> |
|---|
| 404 |
<itemizedlist> |
|---|
| 405 |
<listitem><para><option>h</option> </para> <para> affiche cette aide et se termine </para> </listitem> |
|---|
| 406 |
<listitem><para><option>v</option> </para> <para> affiche la version et se termine </para> </listitem> |
|---|
| 407 |
<listitem><para><option>q</option> </para> <para> mode silencieux </para> </listitem> |
|---|
| 408 |
<listitem><para><option>l</option> </para> <para> ordonne au démon de rouvrir le fichier </para> </listitem> |
|---|
| 409 |
<listitem><para><option>r</option> </para> <para> ordonne au démon de continuer aprÚs une erreur </para> </listitem> |
|---|
| 410 |
<listitem><para><option>t</option> </para> <para> ordonne au démon d'entrer en mode d'arrêt intelligent ("smart shutdown") </para> </listitem> |
|---|
| 411 |
<listitem><para><option>T</option> </para> <para> ordonne au démon d'entrer en mode d'arrêt immédiat </para> </listitem> |
|---|
| 412 |
<listitem><para><option>c</option> </para> <para> détruit les sémaphores existantes et la file d'attente des messages (utiliser avec précaution) </para> </listitem> |
|---|
| 413 |
<listitem><para><option>f</option> </para> <para> rester au premier plan (ne pas fonctionner en mode démon) </para> </listitem> |
|---|
| 414 |
<listitem><para><option>w</option> </para> <para> entrer immédiatement en mode d'arrêt intelligent</para> </listitem> |
|---|
| 415 |
</itemizedlist> |
|---|
| 416 |
</listitem> |
|---|
| 417 |
<listitem><para> un fichier de configuration spécifique </para> |
|---|
| 418 |
<para> Ce fichier est composé des paramÚtres suivants :</para> |
|---|
| 419 |
<itemizedlist> |
|---|
| 420 |
<listitem><para> <command>logfile = './offline_logs/logshipper.log';</command></para> |
|---|
| 421 |
<para> L'endroit où le log shipper laissera ses traces d'exécutions.</para> </listitem> |
|---|
| 422 |
<listitem><para> <command>cluster name = 'T1';</command></para> <para> le nom du cluster </para> </listitem> |
|---|
| 423 |
<listitem><para> <command>destination database = 'dbname=slony_test3';</command></para> <para> Le paramÚtre conninfo |
|---|
| 424 |
optionnel pour se connecter à la base destination. Si ce paramÚtre est fourni, |
|---|
| 425 |
le log shipper se connectera à cette base et y appliquera les logs. </para> </listitem> |
|---|
| 426 |
<listitem><para> <command>archive dir = './offline_logs';</command></para> <para> Le répertoire d'archive |
|---|
| 427 |
est obligatoire lorsqu'on est en mode <quote>connecté à une database</quote> afin de pouvoir |
|---|
| 428 |
scanner noeud à la recherche d'archives manquantes (ou non appliquées). </para> </listitem> |
|---|
| 429 |
<listitem><para> <command>destination dir = './offline_result';</command></para> <para> Si ce paramÚtre est défini, |
|---|
| 430 |
le log shipper écrira les résultats du traitement des données à l'intérieur de fichiers |
|---|
| 431 |
de log placés dans ce répertoire.</para> </listitem> |
|---|
| 432 |
<listitem><para> <command>max archives = 3600;</command></para> <para> Ce paramÚtre lutte |
|---|
| 433 |
contre d'éventuelles fuites mémoire; le démon entrera en mode d'arrêt intelligent( <quote>smart shutdown</quote> ) |
|---|
| 434 |
automatiquement aprÚs avoir traiter ce nombre d'archives. </para> </listitem> |
|---|
| 435 |
<listitem><para> <command>ignore table "public"."history";</command></para> <para> On peut exclure |
|---|
| 436 |
certaines tables du systÚme de log shipping</para> </listitem> |
|---|
| 437 |
<listitem><para> <command>ignore namespace "public";</command></para> <para> On peut exclure |
|---|
| 438 |
un espace de noms du systÚme de réplication </para> </listitem> |
|---|
| 439 |
<listitem><para> <command>rename namespace "public"."history" to "site_001"."history";</command></para> <para> |
|---|
| 440 |
On peut renommer des tables spécifiques.</para> </listitem> |
|---|
| 441 |
<listitem><para> <command>rename namespace "public" to "site_001";</command></para> <para> |
|---|
| 442 |
On peut renommer un espace de noms.</para> </listitem> |
|---|
| 443 |
<listitem><para> <command>post processing command = 'gzip -9 $inarchive';</command></para> <para> |
|---|
| 444 |
Les commandes de pré-traitement et post-traitement sont exécutées via la fonction <function>system(3)</function>. </para> </listitem> |
|---|
| 445 |
</itemizedlist> |
|---|
| 446 |
<para> Un <quote>@</quote> placé devant le nom de la commande permet d'ignorer un code de retour. Sinon, tout code |
|---|
| 447 |
de retour différent de zéro sera traité comme une erreur et provoquera l'arrêt du processus. </para> |
|---|
| 448 |
|
|---|
| 449 |
<para> Par ailleurs les commandes de pré-traitement et de post-traitement ont accÚs à deux variables spéciales : </para> |
|---|
| 450 |
<itemizedlist> |
|---|
| 451 |
<listitem><para> <envar>$inarchive</envar> - indique le nom du fichier d'archive en entrée </para> </listitem> |
|---|
| 452 |
<listitem><para> <envar>$outnarchive</envar> - indique le nom du fichier d'archive en sortie </para> </listitem> |
|---|
| 453 |
</itemizedlist> |
|---|
| 454 |
</listitem> |
|---|
| 455 |
|
|---|
| 456 |
<listitem><para> <command>error command = ' ( echo |
|---|
| 457 |
"archive=$inarchive" echo "error messages:" echo "$errortext" ) | mail |
|---|
| 458 |
-s "Slony log shipping failed" postgres@localhost ';</command></para> |
|---|
| 459 |
|
|---|
| 460 |
<para> Le commande d'erreur indique quelle commande lancé lorsqu'une erreur est rencontrée. |
|---|
| 461 |
Toutes l'archivage réalisée depuis le dernier archive traité avec succÚs est disponible |
|---|
| 462 |
dans la variable <envar>$errortext</envar>. </para> |
|---|
| 463 |
|
|---|
| 464 |
<para> Dans l'exemple donné, un courriel est envoyé à l'administrateur |
|---|
| 465 |
lorsqu'une erreur est rencontrée.</para> </listitem> |
|---|
| 466 |
</itemizedlist> |
|---|
| 467 |
|
|---|
| 468 |
<itemizedlist> |
|---|
| 469 |
<listitem><para> Noms des fichiers d'archive</para> |
|---|
| 470 |
|
|---|
| 471 |
<para> Chaque nom de fichier est ajouté à la file d'attente des messages SystemV |
|---|
| 472 |
afin qu'un processus <application>slony_logshipper</application> le traite.</para> |
|---|
| 473 |
|
|---|
| 474 |
</listitem> |
|---|
| 475 |
|
|---|
| 476 |
</itemizedlist> |
|---|
| 477 |
|
|---|
| 478 |
</sect2> |
|---|
| 479 |
</sect1> |
|---|