| 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="addthings"> |
|---|
| 8 |
<title>Ajouter des objets à la réplication</title> |
|---|
| 9 |
|
|---|
| 10 |
<indexterm><primary>ajouter des objets à la réplication</primary></indexterm> |
|---|
| 11 |
|
|---|
| 12 |
<para>Vous découvrirez peut-être que vous avez oubliez des choses que |
|---|
| 13 |
vous vouliez répliquer.</para> |
|---|
| 14 |
|
|---|
| 15 |
<para>En général, on peut trÚs aisément y remédier. Cette section propose |
|---|
| 16 |
une <quote>tour d'horizon</quote> des moyens pour répondre à la |
|---|
| 17 |
question <quote>Comment réaliser la tache <emphasis>X</emphasis> avec &slony1;?</quote>, pour différente valeur de <emphasis>X</emphasis>.</para> |
|---|
| 18 |
|
|---|
| 19 |
<para>On ne peut pas utiliser directement les commandes |
|---|
| 20 |
<xref linkend="slonik"/> <xref linkend="stmtsetaddtable"/> |
|---|
| 21 |
ou <xref linkend="stmtsetaddsequence"/> pour ajouter des |
|---|
| 22 |
tables et des séquences à un ensemble de réplication en |
|---|
| 23 |
cours de fonctionnement; on doit au contraire créer un nouvel |
|---|
| 24 |
ensemble de réplication. Un fois que ce nouvel ensemble est répliqué |
|---|
| 25 |
à l'identique ( c'est à dire les fournisseurs et abonnés sont |
|---|
| 26 |
<emphasis>entiÚrement identiques</emphasis> à ceux de l'ensemble que |
|---|
| 27 |
l'on veut compléter), les deux ensembles peuvent être fusionnés |
|---|
| 28 |
avec la commande <xref |
|---|
| 29 |
linkend="stmtmergeset"/>.</para> |
|---|
| 30 |
|
|---|
| 31 |
<para>Jusqu'Ã la version 1.0.2 (incluse), il existait des risques |
|---|
| 32 |
potentiels si <xref linkend="stmtmergeset"/> était lancée alors |
|---|
| 33 |
que d'autres événements de type abonnement étaient en attente; |
|---|
| 34 |
des confusions pouvaient se produire sur les noeuds ayant ces |
|---|
| 35 |
événements en attente. |
|---|
| 36 |
|
|---|
| 37 |
Ce problÚme fut résolu avec la version 1.0.5. Jusqu'à la version 1.2.1, |
|---|
| 38 |
il existait toujours un problÚme avec <xref linkend="stmtmergeset"/>, |
|---|
| 39 |
si la commande était lancée avant que tous les abonnements soient complets, |
|---|
| 40 |
des <quote>perturbations</quote> pouvaient apparaître sur les noeuds |
|---|
| 41 |
où l'activité d'abonnement n'était pas terminée. </para> |
|---|
| 42 |
|
|---|
| 43 |
<para> Notez que si vous ajoutez des noeuds, vous devez également ajouter |
|---|
| 44 |
les déclarations <xref linkend="stmtstorepath"/> pour indiquer comment |
|---|
| 45 |
les noeuds communiquent entre eux, et les déclarations <xref linkend="stmtstorelisten"/> |
|---|
| 46 |
pour configurer le <quote>réseau de communications</quote> correspondant. |
|---|
| 47 |
Voir le chapitre <xref linkend="listenpaths"/> pour plus de détails. |
|---|
| 48 |
</para> |
|---|
| 49 |
|
|---|
| 50 |
<para>Il est conseillé d'être trÚs prudent lorsque l'on ajoute des noeuds et des |
|---|
| 51 |
voies de communications. Par exemple, soumettre de multiples demandes |
|---|
| 52 |
d'abonnements à un ensemble donné dans un script <xref linkend="slonik"/> |
|---|
| 53 |
finit mal, en général. Si il est <emphasis>vraiment</emphasis> nécessaire |
|---|
| 54 |
d'automatiser cette étape, il est préférable de soumettre des requêtes |
|---|
| 55 |
<xref linkend="stmtwaitevent"/> entre chaque requête d'abonnement pour |
|---|
| 56 |
que le script <xref linkend="slonik"/> attende qu'un abonnement soit |
|---|
| 57 |
complet avant de lancer le suivant..</para> |
|---|
| 58 |
|
|---|
| 59 |
<para>Mais en général, il est plus facile de gérer les reconfigurations |
|---|
| 60 |
complexes en s'assurant qu'un changement a été parfaitement réussi avant |
|---|
| 61 |
de passer au suivant. Il est beaucoup plus simple de corriger un problÚme |
|---|
| 62 |
unique que de réparer les dégâts provoqués par l'interaction erronée de cinq commandes |
|---|
| 63 |
successives.</para> |
|---|
| 64 |
|
|---|
| 65 |
<para> Voici un ensemble de <quote>recettes</quote> pour réaliser |
|---|
| 66 |
différentes modifications sur la configuration de la réplication :</para> |
|---|
| 67 |
|
|---|
| 68 |
<sect2><title> Ajouter une table dans le cluster de réplication </title> |
|---|
| 69 |
|
|---|
| 70 |
<indexterm><primary> ajouter une table dans le cluster de réplication </primary></indexterm> |
|---|
| 71 |
|
|---|
| 72 |
<para> &slony1; ne vous permet pas d'ajouter une table dans un ensemble de |
|---|
| 73 |
qui est déjà en cours de réplication. En principe, c'est certainement |
|---|
| 74 |
<emphasis>possible</emphasis>; mais cela implique l'événement SET_ADD_TABLE |
|---|
| 75 |
produise le code adéquat à partir de l'événement SUBSCRIBE_SET invoqué |
|---|
| 76 |
pour analyser la table. Cela compliquerait de maniÚre significative et regrettable |
|---|
| 77 |
la logique de tous ces composants, donc ce n'est pas permis. </para> |
|---|
| 78 |
|
|---|
| 79 |
<para>En contrepartie, vous devez procéder de la maniÚre suivante :</para> |
|---|
| 80 |
|
|---|
| 81 |
<itemizedlist> |
|---|
| 82 |
<listitem><para> Ajouter la nouvelle table sur chaque noeud. </para> |
|---|
| 83 |
|
|---|
| 84 |
<para> En principe, le script <xref linkend="stmtddlscript"/> peut être |
|---|
| 85 |
utilisé pour cela, mais en réalité ce provoque des <link linkend="locking"> |
|---|
| 86 |
problÚmes d'inter-blocages </link> et cela nécessite la modification de |
|---|
| 87 |
<emphasis>toutes</emphasis> les tables dans l'ensemble de réplication |
|---|
| 88 |
existant, sur <emphasis>tous</emphasis> les noeuds, ce qui fait que |
|---|
| 89 |
<xref linkend="stmtddlscript"/> est une approche peu attrayante sur un |
|---|
| 90 |
serveur chargé. Ceci brise la rÚgle de &slony1; qui dit qu' <quote>il n'est pas |
|---|
| 91 |
nécessaire d'interrompre l'activité normale pour ajouter la réplication.</quote> |
|---|
| 92 |
</para> |
|---|
| 93 |
|
|---|
| 94 |
<para> A contrario, vous pouvez ajouter la table via |
|---|
| 95 |
<application>psql</application> sur chaque noeud. |
|---|
| 96 |
|
|---|
| 97 |
</para> </listitem> |
|---|
| 98 |
|
|---|
| 99 |
<listitem><para> Créer un nouvel ensemble de réplication avec <xref linkend="stmtcreateset"/> |
|---|
| 100 |
</para></listitem> |
|---|
| 101 |
<listitem><para> |
|---|
| 102 |
Ajouter la table dans le nouvel ensemble avec <xref linkend="stmtsetaddtable"/> |
|---|
| 103 |
</para></listitem> |
|---|
| 104 |
|
|---|
| 105 |
<listitem><para> Demander l'abonnement de ce nouvel ensemble avec <xref |
|---|
| 106 |
linkend="stmtsubscribeset"/>. Si il existe plusieurs noeuds, vous devez |
|---|
| 107 |
utiliser <xref linkend="stmtsubscribeset"/> une fois pour chaque noeud |
|---|
| 108 |
que vous voulez abonner. </para></listitem> |
|---|
| 109 |
|
|---|
| 110 |
<listitem><para> Si vous voulez savoir de maniÚre déterministe, si |
|---|
| 111 |
un abonnement est complet, vous devez soumettre pour chaque abonnement |
|---|
| 112 |
un script slonik qui ressemble à cela : |
|---|
| 113 |
|
|---|
| 114 |
<screen> |
|---|
| 115 |
SUBSCRIBE SET (ID=1, PROVIDER=1, RECEIVER=2); |
|---|
| 116 |
WAIT FOR EVENT (ORIGIN=2, CONFIRMED = 1); |
|---|
| 117 |
SYNC(ID = 1); |
|---|
| 118 |
WAIT FOR EVENT (ORIGIN=1, CONFIRMED=2); |
|---|
| 119 |
</screen></para> |
|---|
| 120 |
</listitem> |
|---|
| 121 |
|
|---|
| 122 |
<listitem><para> Une fois que les abonnements sont configurés |
|---|
| 123 |
de maniÚre à ce que les abonnements du nouvel ensemble soit identiques |
|---|
| 124 |
à ceux de l'ancien ensemble, vous pouvez fusionner le nouveau et l'ancien |
|---|
| 125 |
avec la commande <xref |
|---|
| 126 |
linkend="stmtmergeset"/> </para></listitem> |
|---|
| 127 |
</itemizedlist> |
|---|
| 128 |
</sect2> |
|---|
| 129 |
|
|---|
| 130 |
<sect2><title> Comment ajouter une colonne dans une table répliquée </title> |
|---|
| 131 |
|
|---|
| 132 |
<indexterm><primary> ajouter des colonnes dans une table </primary></indexterm> |
|---|
| 133 |
|
|---|
| 134 |
<para> Cette réponse est la même que pour la question <quote>Comment |
|---|
| 135 |
renommer des colonnes dans une table répliquée ?</quote>, et plus généralement |
|---|
| 136 |
au autres questions du type <quote>Comment modifier la définition |
|---|
| 137 |
de tables répliquées ?</quote></para> |
|---|
| 138 |
|
|---|
| 139 |
<para>Si vous changez la <quote>forme</quote> d'une table répliquée, vous devez le |
|---|
| 140 |
faire au même instant dans le <quote>flux de transaction</quote> sur tous les noeuds |
|---|
| 141 |
qui sont abonnés à l'ensemble qui contient la table.</para> |
|---|
| 142 |
|
|---|
| 143 |
<para> Ainsi, la méthode pour consiste à construire un script SQL |
|---|
| 144 |
composé des changements DDL et de le soumettre à tous les noeuds |
|---|
| 145 |
via la commande Slonik <xref linkend="stmtddlscript"/>.</para> |
|---|
| 146 |
|
|---|
| 147 |
<para> Il existe une alternative, si vous avec installé les <link linkend="altperl"> |
|---|
| 148 |
scripts altperl</link>, vous pouvez utiliser <command>slonik_execute_script</command> |
|---|
| 149 |
pour cela : </para> |
|---|
| 150 |
|
|---|
| 151 |
<para> <command> slonik_execute_script [options] numero_de_l_ensemble |
|---|
| 152 |
full_path_to_sql_script_file </command></para> |
|---|
| 153 |
|
|---|
| 154 |
<para> Tapez la commande <command>slonik_execute_script -h</command> pour |
|---|
| 155 |
plus d'information; notez que ce script utilise <xref linkend="stmtddlscript"/>. |
|---|
| 156 |
</para> |
|---|
| 157 |
|
|---|
| 158 |
<para> Il y a de nombreux <quote>points délicats</quote> à noter...</para> |
|---|
| 159 |
|
|---|
| 160 |
<itemizedlist> |
|---|
| 161 |
<listitem><para> Vous <emphasis>ne devez absolument jamais</emphasis> inclure |
|---|
| 162 |
des commandes de contrÃŽle de transaction, notamment <command>BEGIN</command> |
|---|
| 163 |
et <command>COMMIT</command>, à l'intérieur de ces scripts. &slony1; |
|---|
| 164 |
encapsule les scripts DDL avec une paire <command>BEGIN</command>/<command>COMMIT</command> |
|---|
| 165 |
; ajouter de opérateur de contrÎle de transaction supplémentaire |
|---|
| 166 |
implique que des parties des ordres DDL seront <quote>committés</quote> |
|---|
| 167 |
en dehors du contrÃŽle de &slony1; </para></listitem> |
|---|
| 168 |
|
|---|
| 169 |
<listitem><para> Avant la version 1.2, il était nécessaire d'être |
|---|
| 170 |
extrêmement restrictif sur ce qu'on envoyait au script |
|---|
| 171 |
<xref linkend="stmtddlscript"/>. </para> |
|---|
| 172 |
|
|---|
| 173 |
<para> Il était interdit de placer du texte <command>'entre quotes'</command> |
|---|
| 174 |
dans le script, car cela l'empêchait d'être stocké et transmis correctement |
|---|
| 175 |
. A partir de la version 1.2, les quotes sont correctement prises en compte. </para> |
|---|
| 176 |
|
|---|
| 177 |
<para> Si vous soumettez une séries d'ordre DDL, les derniers |
|---|
| 178 |
ne peuvent pas faire référence aux objets créés par les premiers, |
|---|
| 179 |
car tous les ordres sont soumis dans un requête unique, |
|---|
| 180 |
dont le plan d'exécution est basé sur l'état de la base de donnée |
|---|
| 181 |
au <emphasis>début</emphasis>, avant que les modifications ne soient |
|---|
| 182 |
effectuées. à partir de la version 1.2, il y a 12 ordres SQL, chacun est soumis |
|---|
| 183 |
individuellement, ainsi la commande <command> alter table x add column c1 |
|---|
| 184 |
integer; </command> peut désormais être suivie par <command> alter table x |
|---|
| 185 |
alter column c1 set not null; </command>.</para></listitem> |
|---|
| 186 |
|
|---|
| 187 |
</itemizedlist> |
|---|
| 188 |
</sect2> |
|---|
| 189 |
|
|---|
| 190 |
<sect2><title> Comment supprimer la réplication sur un noeud</title> |
|---|
| 191 |
|
|---|
| 192 |
<para> Vous devez supprimer les différents composants &slony1; |
|---|
| 193 |
connectés à la base.</para> |
|---|
| 194 |
|
|---|
| 195 |
<para> Considérons, un instant, que nous faisons cela pour un noeud. |
|---|
| 196 |
Si vous avez de multiples noeuds, vous devrez répéter ces étapes |
|---|
| 197 |
autant de fois que nécessaire.</para> |
|---|
| 198 |
|
|---|
| 199 |
<para> Les composants à retirer : </para> |
|---|
| 200 |
<itemizedlist> |
|---|
| 201 |
|
|---|
| 202 |
<listitem><para>Triggers de logs / Triggers de blocage de mises à jour |
|---|
| 203 |
|
|---|
| 204 |
</para></listitem> |
|---|
| 205 |
<listitem><para> Le schéma <quote>cluster</quote> contenant les tables &slony1; |
|---|
| 206 |
qui indiquent l'état du noeud et diverses procédures stockées |
|---|
| 207 |
</para></listitem> |
|---|
| 208 |
<listitem><para> Le processus &lslon; qui gÚre le noeud </para></listitem> |
|---|
| 209 |
<listitem><para> Accessoirement, les scripts SQL, les scripts pl/pgsql, |
|---|
| 210 |
et les binaires &slony1; qui font partie de la compilation de &postgres;. |
|---|
| 211 |
(Bien sûr, cela complique la tache si vous souhaitez redémarrer la réplication; |
|---|
| 212 |
il est peu probable que vous ayez besoin de supprimer ces fichiers...) |
|---|
| 213 |
</para></listitem> |
|---|
| 214 |
</itemizedlist> |
|---|
| 215 |
|
|---|
| 216 |
<para> Comment effectuer facilement la suppression</para> |
|---|
| 217 |
<itemizedlist> |
|---|
| 218 |
|
|---|
| 219 |
<listitem><para> Vous pouvez utiliser la commande Slonik <xref linkend="stmtdropnode"/> |
|---|
| 220 |
pour supprimer un noeud du cluster. Ceci provoquera la suppression |
|---|
| 221 |
des triggers et tout ce qui se trouve dans schéma cluster. |
|---|
| 222 |
Le processus <xref linkend="slon"/> sera automatiquement mourir.</para></listitem> |
|---|
| 223 |
|
|---|
| 224 |
<listitem><para> Dans le cas d'un noeud en échec ( lorsque vous avez utilisé |
|---|
| 225 |
la commande <xref linkend="stmtfailover"/> pour basculer sur un autre noeud |
|---|
| 226 |
), vous devrez peut-être utiliser <xref linkend="stmtuninstallnode"/> |
|---|
| 227 |
pour supprimer les triggers, le schéma et les fonctions.</para> |
|---|
| 228 |
|
|---|
| 229 |
<para> Si le noeud est en échec à cause d'une panne matérielle dramatique |
|---|
| 230 |
(<emphasis>par exemple</emphasis> si vos disques ont pris feu), |
|---|
| 231 |
il est possible qu'il n'y ait plus de traces de la base de données sur le noeud; |
|---|
| 232 |
En général, la base ne survive que lorsque la panne matérielle est un |
|---|
| 233 |
problÚme de réseau qui n'endommage pas les données mais qui vous oblige à |
|---|
| 234 |
supprimer le noeud à cause de coupures réseau persistantes. |
|---|
| 235 |
</para></listitem> |
|---|
| 236 |
|
|---|
| 237 |
<listitem><para> Si les opérations ci-dessus se sont particuliÚrement |
|---|
| 238 |
mal passée. vous pouvez lancer la commande SQL |
|---|
| 239 |
<command>DROP SCHEMA "Nom_du_cluster" CASCADE;</command>, |
|---|
| 240 |
qui supprime toutes les fonctions, les tables et les triggers de |
|---|
| 241 |
&slony1;. En général, c'est une opération moins pratique que |
|---|
| 242 |
<xref linkend="stmtuninstallnode"/>, car cette commande |
|---|
| 243 |
ne se contente pas de supprimer le schéma et son contenu, elle |
|---|
| 244 |
supprime également toutes les colonnes ajoutées avec la |
|---|
| 245 |
commande <xref linkend= "stmttableaddkey"/>. |
|---|
| 246 |
</para> |
|---|
| 247 |
|
|---|
| 248 |
<note><para> Dans &slony1; version 2.0, <xref linkend= |
|---|
| 249 |
"stmttableaddkey"/> <emphasis>n'est plus supporté</emphasis>, et |
|---|
| 250 |
donc <xref linkend="stmtuninstallnode"/> correspond simplement |
|---|
| 251 |
à <command>DROP SCHEMA "nom_du_cluster" CASCADE;</command>. </para> |
|---|
| 252 |
</note></listitem> |
|---|
| 253 |
</itemizedlist> |
|---|
| 254 |
</sect2> |
|---|
| 255 |
|
|---|
| 256 |
<sect2><title> Ajouter un noeud dans le cluster de réplication</title> |
|---|
| 257 |
|
|---|
| 258 |
<para>Les choses ne sont pas fondamentalement différentes entre l'ajout |
|---|
| 259 |
d'un noeud flambant neuf et la restauration d'un noeud qu'on supprimé, puis reconstruit |
|---|
| 260 |
. Dans les deux cas, vous ajouter un noeud dans le cluster de réplication. |
|---|
| 261 |
</para> |
|---|
| 262 |
|
|---|
| 263 |
<para>Les étapes nécessaires sont ... </para> |
|---|
| 264 |
<itemizedlist> |
|---|
| 265 |
|
|---|
| 266 |
<listitem><para> Déterminer le numéro du noeud et les DSNs adéquates |
|---|
| 267 |
pour le noeuds. Utilisez la commande &postgres; <command>createdb</command> |
|---|
| 268 |
pour créer la base; ajoutez les définitions des tables que vous voulez |
|---|
| 269 |
répliquer, car &slony1; ne propage pas automatiquement cette information. |
|---|
| 270 |
</para> |
|---|
| 271 |
|
|---|
| 272 |
<para> Si vous ne disposez pas d'un script SQL parfaitement propre pour ajouter |
|---|
| 273 |
les tables, alors vous pouvez utiliser l'outil <link linkend="extractschema"> |
|---|
| 274 |
<command> slony1_extract_schema.sh</command> </link> situé dans le répertoire |
|---|
| 275 |
<filename>tools</filename> afin d'obtenir le schéma utilisateur sans les |
|---|
| 276 |
<quote>morceaux</quote> de &slony1;. </para> |
|---|
| 277 |
</listitem> |
|---|
| 278 |
|
|---|
| 279 |
<listitem><para> Si le noeud était un noeud en échec, vous devez lancer |
|---|
| 280 |
la commande <xref linkend="slonik"/> <xref linkend="stmtdropnode"/> |
|---|
| 281 |
afin de vous débarrasser de ses vestiges dans le cluster et de supprimer |
|---|
| 282 |
le schéma que &slony1; a créé. |
|---|
| 283 |
</para></listitem> |
|---|
| 284 |
|
|---|
| 285 |
<listitem><para> Lancer la commande slonik <xref linkend="stmtstorenode"/> |
|---|
| 286 |
pour établir le nouveau noeud. |
|---|
| 287 |
</para></listitem> |
|---|
| 288 |
|
|---|
| 289 |
<listitem><para> à cet instant, vous pouvez lancer le démon &lslon; sur le nouveau |
|---|
| 290 |
noeud. Il ne connaîtra rien des autres noeuds, donc les logs de ce noeud seront |
|---|
| 291 |
particuliÚrement calmes. |
|---|
| 292 |
</para></listitem> |
|---|
| 293 |
|
|---|
| 294 |
<listitem><para> Lancer la commande slonik <xref linkend="stmtstorepath"/> |
|---|
| 295 |
pour indiquer comment les processus <xref linkend="slon"/> doivent |
|---|
| 296 |
communiquer avec le nouveau noeud. |
|---|
| 297 |
Dans la version 1.1 et suivante, cette commande génÚre automatiquement |
|---|
| 298 |
des lignes de la table des <link linkend="listenpaths">voies d'écoute</link>; |
|---|
| 299 |
Dans les versions précédentes vous devez utiliser <xref linkend="stmtstorelisten"/> |
|---|
| 300 |
pour les générer manuellement. |
|---|
| 301 |
</para></listitem> |
|---|
| 302 |
|
|---|
| 303 |
<listitem><para> A cet instant, lancer le script |
|---|
| 304 |
<command>test_slony_state-dbi.pl</command> est une excellente idée. |
|---|
| 305 |
Ce script parcours le cluster le tout entier et pointe les anomalies |
|---|
| 306 |
qu'il trouve. Il peut notamment identifier une grande variété de |
|---|
| 307 |
problÚmes de communication.</para> </listitem> |
|---|
| 308 |
|
|---|
| 309 |
<listitem><para> Lancer commande slonik |
|---|
| 310 |
<xref linkend="stmtsubscribeset"/> pour abonner le noeud à l'ensemble de réplication. |
|---|
| 311 |
</para></listitem> |
|---|
| 312 |
|
|---|
| 313 |
</itemizedlist> |
|---|
| 314 |
</sect2> |
|---|
| 315 |
|
|---|
| 316 |
<sect2><title> Comment remanier les abonnements ?</title> |
|---|
| 317 |
|
|---|
| 318 |
<para> Par exemple, on souhaite que le noeud 3 reçoivent les données |
|---|
| 319 |
en provenance du noeud 1, alors qu'actuellement il reçoit les données du noeud 2. </para> |
|---|
| 320 |
|
|---|
| 321 |
<para> Il ne s'agit pas d'un cas d'utilisation de la commande <xref linkend="stmtmoveset"/>; |
|---|
| 322 |
car on ne souhaite pas déplacer l'origine, mais simplement remanier les abonnés. |
|---|
| 323 |
</para> |
|---|
| 324 |
|
|---|
| 325 |
<para> Pour cela, on peut simplement soumettre des requêtes <xref |
|---|
| 326 |
linkend="stmtsubscribeset"/> pour <emphasis>modifier</emphasis> |
|---|
| 327 |
les abonnements. Ces abonnements ne seront pas redémarrés à partir de zéro, |
|---|
| 328 |
mais simplement reconfigurés. |
|---|
| 329 |
</para></sect2> |
|---|
| 330 |
|
|---|
| 331 |
<sect2><title> Comment utiliser le <link linkend="logshipping">Log Shipping</link> ?</title> |
|---|
| 332 |
<para> Cette question est largement débattue dans la section <link linkend="logshipping"> Log Shipping </link>... </para> |
|---|
| 333 |
</sect2> |
|---|
| 334 |
|
|---|
| 335 |
<sect2><title> Comment savoir si la réplication fonctionne ?</title> |
|---|
| 336 |
|
|---|
| 337 |
<para> La preuve ultime est le fait que les données ajoutées sur l'origine |
|---|
| 338 |
soit présentes sur les abonnés. Il suffit <quote>simplement de lancer une |
|---|
| 339 |
requête</quote> pour le savoir.</para> |
|---|
| 340 |
|
|---|
| 341 |
<para> Cependant, il existe quelques autres méthode pour examiner l'état de la réplication : </para> |
|---|
| 342 |
<itemizedlist> |
|---|
| 343 |
<listitem><para> Regarder les logs des processus &lslon;.</para> |
|---|
| 344 |
|
|---|
| 345 |
<para> Ils ne vous diront pas grand chose, même à une niveau de debug |
|---|
| 346 |
élevé sur le noeud origine; Au niveau 2 de debug, vous devriez voir |
|---|
| 347 |
sur les abonnés les événements SYNCs qui sont en cours de traitement. |
|---|
| 348 |
à partir de la version 1.2, les informations sur le traitement des |
|---|
| 349 |
SYNCs incluent le nombres de tables traitées, ainsi que le nombre |
|---|
| 350 |
de tuples insérés, supprimés et mis à jour.</para> </listitem> |
|---|
| 351 |
|
|---|
| 352 |
<listitem><para> Regarder dans la vue <command> sl_status </command>, sur |
|---|
| 353 |
le noeud origine. </para> |
|---|
| 354 |
|
|---|
| 355 |
<para> Cette vue indique quel est le retard des différents noeuds abonnés. |
|---|
| 356 |
Cette information n'est pertinente que sur un noeud origine.</para> </listitem> |
|---|
| 357 |
|
|---|
| 358 |
<listitem><para> Lancer le script |
|---|
| 359 |
script <command>test_slony_state-dbi.pl</command> qui se trouve dans le répertoire |
|---|
| 360 |
<filename>tools</filename>. Ce script parcours le cluster tout entier et pointe les |
|---|
| 361 |
anomalies qu'il détecte, ainsi que des informations sur le statut de chaque noeud. |
|---|
| 362 |
</para> </listitem> |
|---|
| 363 |
|
|---|
| 364 |
</itemizedlist> |
|---|
| 365 |
|
|---|
| 366 |
</sect2> |
|---|
| 367 |
|
|---|
| 368 |
<sect2><title>Comment mettre à jour la version de &slony1; ? </title> |
|---|
| 369 |
|
|---|
| 370 |
<para> La réponse se trouve <link linkend="slonyupgrade"> ici </link> </para> </sect2> |
|---|
| 371 |
|
|---|
| 372 |
<sect2><title> Que se passe-t-il lors d'une bascule d'urgence ?</title> |
|---|
| 373 |
|
|---|
| 374 |
<para> Une partie de la réponse se trouve dans la section <xref linkend="failover"/> |
|---|
| 375 |
mais il reste beaucoup de choses à écrire sur le sujet...</para> </sect2> |
|---|
| 376 |
|
|---|
| 377 |
<sect2><title> Comment <quote>déplacer le maître</quote> vers un autre noeud ? </title> |
|---|
| 378 |
|
|---|
| 379 |
<para> Tout d'abord il faut choisir un noeud qui est connecté à l'ancienne origine |
|---|
| 380 |
(sinon il n'est pas évident de conserver les connexions lors du changement). </para> |
|---|
| 381 |
|
|---|
| 382 |
<para> DeuxiÚmement, vous devez lancer un script &lslonik; avec la commande |
|---|
| 383 |
<xref linkend="stmtlockset"/> pour verrouiller l'ensemble de réplication sur |
|---|
| 384 |
le noeud origine. Notez qu'Ã cet instant votre application risque de ne plus fonctionner, |
|---|
| 385 |
car cette opération pose des triggers sur l'origine qui rejetent toutes les mises |
|---|
| 386 |
à jour. </para> |
|---|
| 387 |
|
|---|
| 388 |
<para> Maintenant, lancez la requête &lslonik; <xref linkend="stmtmoveset"/>. |
|---|
| 389 |
Il parfaitement raisonnable de soumettre les deux requêtes à l'intérieur |
|---|
| 390 |
d'un même script &lslonik;. |
|---|
| 391 |
|
|---|
| 392 |
Désormais, l'origine est basculée vers le nouveau noeud origine. Si le nouveau noeud a quelques |
|---|
| 393 |
événement de retard, il faudra un peu de temps pour que tout se mette en place. </para> </sect2> |
|---|
| 394 |
|
|---|
| 395 |
<sect2> <title> Comment réaliser <quote>synchronisation complÚte</quote> sur une table? </title> |
|---|
| 396 |
|
|---|
| 397 |
<para> Pour &slony1;, la notion de <command>SYNC</command> est toujours quelque chose |
|---|
| 398 |
d'<emphasis>incrémental</emphasis>; un <command>SYNC</command> représente |
|---|
| 399 |
un ensemble de mises à jour qui furent <quote>committée</quote> pendant |
|---|
| 400 |
durée d'un événement <command>SYNC</command> donné sur le noeud origine. |
|---|
| 401 |
Si des mises à jour qui ont altérées l'ensemble du contenu d'une |
|---|
| 402 |
table sont <quote>committées</quote> au cours d'un |
|---|
| 403 |
<command>SYNC</command> unique, alors cela affectera l'ensemble |
|---|
| 404 |
du contenu de la table. Mais du point de vue de &slony1;, ce changement est |
|---|
| 405 |
<quote>incrémental</quote> même si la modification concerne |
|---|
| 406 |
<quote>la table toute entiÚre</quote>.</para> |
|---|
| 407 |
|
|---|
| 408 |
<para> La seule fois où &slony1; <quote>synchronise</quote> le contenu |
|---|
| 409 |
d'une table est lors de la mise en place de l'abonnement, à ce moment-là |
|---|
| 410 |
il utilise la commande <command>COPY</command> pour rapatrier la totalité |
|---|
| 411 |
du contenu de la table à partir du noeud fournisseur.</para> |
|---|
| 412 |
|
|---|
| 413 |
<para> Puisque les tables abonnées sont protégées contre les modifications |
|---|
| 414 |
réalisées par un autre utilisateur que &slony1;, il est impossible |
|---|
| 415 |
(mis à part d'horribles bogues) que les tables soient désynchronisées. |
|---|
| 416 |
Si c'est le cas, alors il y a vraiment un gros problÚme dans &slony1;. </para> |
|---|
| 417 |
|
|---|
| 418 |
<para> Si une corruption trÚs grave se produit, la réponse est de retirer la table |
|---|
| 419 |
hors de la réplication, puis de créer un nouvel ensemble de réplication et de l'ajouter |
|---|
| 420 |
à nouveau. </para> |
|---|
| 421 |
</sect2> |
|---|
| 422 |
</sect1> |
|---|