root/traduc/trunk/slony/failover.xml

Revision 1173, 17.3 kB (checked in by gleu, 3 weeks ago)

Modifications pour permettre la génération du manuel.
Patch de Christophe Bouchet, avec quelques modifications supplémentaires de ma
part.
Cependant, il reste encore du travail pour avoir une génération parfaite.

Line 
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="failover">
8   <title>Effectuer une bascule d'urgence avec &slony1;</title>
9   <indexterm><primary>bascule d'urgence</primary>
10              <secondary>reprise sur panne</secondary>
11   </indexterm>
12
13   <sect2><title>Avant-propos</title>
14
15     <para>&slony1; est un systÚme de réplication asynchrone.  À cause de cela,
16       il est presque certain qu'au moment ou le noeud origine d'un ensemble de réplication
17       tombe en panne, la derniÚre transaction <quote>committée</quote> sur
18       l'origine ne soit pas encore propagée aux abonnés. Les systÚmes qui tombent
19       en panne souvent soumis à une forte charge; c'est une des corollaires de la
20       loi de Murphy. Ainsi le but principal est d'<emphasis>éviter</emphasis> que le serveur principal
21       tombe en panne. La meilleur façon d'éviter cela est d'effectuer une
22       maintenance fréquente.</para>
23
24     <para> Ouvrir le capot d'un serveur à chaud n'est pas ce qu'on peut
25       une façon <quote>professionelle</quote> d'assurer la maintenance d'un systÚme.
26       En général, les utilisateurs qui ont besoin de réplication pour
27       leur sauvegarde ou leur plan de reprise sur panne, ont également des critÚres
28       trÚs stricts en matiÚre de  <quote> temps d'arrêt du systÚme</quote>.
29       Pour répondre à ces critÚres, &slony1; ne se contente de fournir des
30       méthodes de reprise sur panne, il intÚgre également la notion de
31       transfert d'origine.</para>
32
33     <para> On suppose dans cette partie que le lecteur est familier avec l'utilitaire  <xref linkend="slonik"/>
34       et qu'il sait comment mettre en place une systÚme de réplication &slony1; composé de deux noeuds.
35     </para>
36   </sect2>
37
38   <sect2><title>Bascule contrÃŽlée</title>
39
40     <indexterm>
41      <primary>bascule contrÃŽlée</primary>
42     </indexterm>
43
44     <para> Imaginons un noeud <quote>origine</quote>, appelé noeud1, avec un
45       <quote>abonné</quote> appelé noeud2 (l'esclave).  Une application web, placée
46       sur un troisiÚme serveur, accÚde à la base de données sur noeud1.
47       Les deux bases sont actives et fonctionnelles, la réplication est
48       est à peu prÚs synchronisée. On contrÃŽle la bascule avec la commande
49       <xref linkend="stmtmoveset"/>.</para>
50
51     <itemizedlist>
52 <listitem><para> Au moment ou nous écrivons ces lignes, basculer
53         vers un autre serveur nécessite que l'application se reconnecte
54         à la nouvelle base de donnée. Donc pour éviter toute complication,
55         nous éteignons le serveur web. Les utilisateurs qui ont installé
56         <application>pg_pool</application> pour gérer les connexions peuvent
57         simplement éteindre le pool.</para>
58        
59         <para> Les actions à mener dépendent beaucoup de la configuration des applications qui utilisent
60         la base de données. En général, les applications qui étaient connectées à
61         l'ancienne base doivent détruire leurs connexions et en établir de nouvelles
62         vers la base qui vient d'être promue dans le rÃŽle du  <quote>/maître/</quote> rÃŽle.
63         Il y a différentes façon de configurer cela, et donc différentes façon d'effectuer
64         la bascule :     
65         <itemizedlist>
66           <listitem><para> L'application stocke le nom de la base de donnée dans un fichier.</para>
67             <para> Dans ce cas, la reconfiguration nécessite de changer la valeur dans ce fichier, d'arrêter
68             puis de relancer l'application pour qu'elle pointe vers le nouvel emplacement des données.</para>
69           </listitem>
70          
71           <listitem><para> Une utilisation pertinente de DNS consiste à créer
72             <ulink url="http://www.iana.org/assignments/dns-parameters"> champs DNS </ulink>
73             CNAME qui permet à l'application d'utiliser un nom pour référencer le noeud
74             qui joue le rÃŽle du noeud <quote>maître</quote>.</para>
75            
76             <para> Dans ce cas, la reconfiguration nécessite de changer le CNAME
77             pour point et vers le nouveau serveur, de plus il faut probablement relancer
78             l'application pour rafraîchir les connexions à la base.</para>
79           </listitem>
80          
81           <listitem><para> si vous utilisez <application>pg_pool</application> ou
82             un <quote>gestionnaire de connexion</quote> similaire, alors la reconfiguration
83             implique de modifier le paramÚtre de cet outil, à part cela  la procédure est similaire
84             à l'exemple DNS/CNAME ci-dessus.  </para>
85           </listitem>
86         </itemizedlist></para>
87        
88            
89
90       <para> Le nécessité de redémarrer l'application qui se connecte à la base dépend 
91       de la maniÚre dont elle a été conçu et des mécanismes de gestion d'erreurs de
92       connexion qui ont été implémentés; si à la suite d'une erreur elle tente
93       d'ouvrir à nouveau un connexion, alors il n'est pas nécessaire de la relancer.</para>
94 </listitem>
95       <listitem><para> Un petit script <xref linkend="slonik"/> exécute les commandes suivantes :
96         <programlisting>
97           lock set (id = 1, origin = 1);
98           wait for event (origin = 1, confirmed = 2);
99           move set (id = 1, old origin = 1, new origin = 2);
100           wait for event (origin = 1, confirmed = 2);
101         </programlisting></para>
102         <para> AprÚs ces commandes, l'origine ( le rÃŽle du maître) de l'ensemble de réplication 1
103         est transféré sur le noeud 2. En fait elle n'est pas simplement transférée; le noeud1 devient
104         un abonné parfaitement synchronisé et actif. En clair, les deux noeuds ont échangé
105         leurs rÃŽles respectifs.</para>
106       </listitem>
107      
108       <listitem><para> AprÚs la reconfiguration de l'application web (ou
109         de <application><link linkend="pgpool"> pgpool </link></application>) pour
110         qu'elle se connecte à la base du noeud 2, le serveur web est redémarré et
111         reprend son activité normale.</para>
112      
113         <para> Lorsqu'on utilise un script shell, pour stopper l'application,
114         lancer le script <application>slonik</application>, déplacer les fichiers de configuration
115         et relancer l'ensemble, toute la procédure prend en général moins de 10
116         secondes.</para>
117       </listitem>
118        
119     </itemizedlist>
120    
121     <para> Vous pouvez désormais éteindre le serveur qui héberge le noeud 1 et
122       effectuer les opérations de maintenance requise. Lorsque le démon <xref
123       linkend="slon"/> du noeud 1 est redémarré, il reprend la réplication,
124       et rattrape son retard. Une fois synchronisé, on peut exécuter la procédure
125       à nouveau pour restaurer la configuration originale.</para>
126
127     <para> Ceci est la meilleure méthode pour ce genre d'opération de maintenance;
128       Elle s'effectue rapidement, sous le contrÃŽle d'un administrateur, et elle
129       n'implique aucune perte de données.</para>
130
131   </sect2>
132   <sect2><title>Bascule d'urgence</title>
133
134   <indexterm>
135    <primary>Bascule suite à une panne du systÚme</primary>
136   </indexterm>
137
138   <para> Lorsque de graves problÚmes apparaissent sur le serveur
139   <quote>origine</quote>, il est parfois nécessaire d'effectuer une
140   bascule ( <xref linkend="stmtfailover"/> ) vers le serveur de sauvegarde.
141   C'est cas de figure qui n'a rien de souhaitable, car les transactions
142   <quote>committées</quote> sur le serveur mais pas sur les abonnés, seront
143   perdues. Certaines de ces transactions auront peut-être été annoncées
144   à l'utilisateur final comme <quote>validées</quote>. En conséquence, les
145   bascules d'urgence doivent être considérées comme un
146   <emphasis>dernier recours</emphasis>.  Le serveur origine
147   qui subit <quote>l'avarie</quote> peut être maintenu assez longtemps, il est
148   <emphasis>nettement</emphasis>
149   préférable d'effectuer une bascule contrÃŽlée.</para>
150
151   <para> &slony1; ne fournit pas de moyen de détection des pannes du systÚme.
152     Abandonner des transactions <quote>committées</quote> est une décision
153     commerciale qui ne peut pas être prise par un systÚme de gestion de base de données.
154     Si vous voulez placer les commandes ci-dessous dans un script exécuté
155     automatiquement par un systÚme de surveillance, et bien .... ce sont
156     <emphasis>vos</emphasis> données, et <emphasis>votre</emphasis> politique
157     de bascule d'urgence. </para>
158
159   <itemizedlist>
160
161   <listitem>
162   <para>La commande <xref linkend="slonik"/>
163   <programlisting>
164   failover (id = 1, backup node = 2);
165   </programlisting>
166   </para>
167
168   <para>  ordonne au noeud 2 de se considérer comme le propriétaire
169     (l'origine) de tous les sets que le noeud 1 possédait. Si il
170     existe des noeuds supplémentaire dans le cluster  &slony1;
171     Tous les noeuds abonnés au noeud 1 sont avertis du changement.
172     <application>Slonik</application> va aussi envoyer une requête
173     à chaque abonné pour déterminer quel noeud à le plus haut niveau
174     de synchronisation (<emphasis>c'est à dire</emphasis> - la derniÚre
175     transaction <quote>committée</quote>) pour chaque ensemble de réplication.
176     et la configuration sera changé de façon à ce que le noeud 2 applique
177     d'abord ces transactions finales, avant d'autoriser l'accÚs en écriture
178     sur les tables.</para>
179
180   <para> De plus, tous les noeuds qui étaient abonnés directement au noeud 1
181     considéreront désormais le noeud 2 comme leur fournisseur de données
182     pour cet ensemble de replication. Cela signifie qu'une fois que la
183     commande de bascule d'urgence est complétée, plus aucun noeud du cluster ne
184     reçoit d'information de la part du noeud 1.</para>
185
186   </listitem>
187
188   <listitem>
189   <para> Reconfigurer et relancer l'application ( ou
190   <application>pgpool</application>) pour qu'elle se reconnecte
191   au noeud 2.</para>
192   </listitem>
193
194   <listitem> <para> Purger le noeud abandonné </para>
195
196   <para> Vous découvrirez, aprÚs la bascule, qu'il existe encore
197     beaucoup de références au noeud 1 dans la table <xref linkend="table.sl-node"/>,
198     ainsi que ses tables associées telle que <xref linkend="table.sl-confirm"/>;
199     puisque des données sont toujours présentes dans <xref linkend="table.sl-log-1"/>,
200     &slony1; ne peut pas purger immédiatement le noeud. </para>
201
202   <para> Une fois que la bascule sera complÚte et que le noeud 2 accepte
203     les opérations d'écriture sur les tables répliquées, il faut supprimer
204     toutes informations de configuration rémanentes avec la commande
205      <xref linkend="stmtdropnode"/> :
206
207   <programlisting>
208   drop node (id = 1, event node = 2);
209   </programlisting>
210   </para>
211
212   <para> Supposons que la panne résulte d'un problÚme matériel catastrophique
213     sur le noeud 1, il est possible qu'il ne <quote>reste</quote> plus
214     rien sur le noeud 1. Si la panne n'est pas <quote>totale</quote>,
215     ce qui est souvent le cas lors d'une coupure réseau, vous découvrirez
216     que le noeud 1  <quote>imagine</quote> toujours que rien n'a changé
217     et qu'il est dans le même état qu'avant la panne. Reportez-vous à la
218     section <xref linkend="rebuildnode1"/> pour plus de détails sur ce
219     que cela implique.</para>
220
221   </listitem>
222   </itemizedlist>
223
224   </sect2>
225
226   <sect2><title> Automatisation de la commande <command> FAIL OVER </command> </title>
227
228   <indexterm><primary>automatisation des bascules d'urgence</primary></indexterm>
229
230   <para> Si vous choisissez d'automatiser la commande <command>FAIL OVER </command>,
231     il est important de le faire <emphasis>avec soin</emphasis>. Vous
232     devez être sur que le noeud en panne est réellement en panne, et vous
233     être capable de vous assurer que le noeud en panne ne redémarre pas,
234     ce qui entraînerait un conflit entre deux noeuds capables
235     de jouer le rÃŽle du <quote>maître</quote>. </para>
236
237   <note> <para> Le fait de <quote>tirer une balle dans la
238         tête du serveur en panne</quote> ne pose pas directement
239   de problÚme à la réplication ou à &slony1;; &slony1; supporte
240   cela de maniÚre assez gravieuse, car une fois qu'une est marqué
241   comme étant en panne, les autres noeuds <quote>l'oublier</quote>
242   et l'ignorer. Le problÚme se situe plutÃŽt au niveau de
243   <emphasis>votre application</emphasis>.
244   Supposons que le noeud en panne soit capable de répondre
245   aux requêtes de votre application, <emphasis>cela</emphasis>
246   va certainement poser un problÚme qui n'a rien à voir avec &slony1;.
247   Le problÚme est que deux bases de données sont en mesure de répondre
248   en tant que <quote>maître</quote>. </para> </note>
249
250   <para> Lorsqu'une bascule d'urgence est effectuée, il faut un
251     mécanisme pour dégager de force le noeud en panne hors du réseau
252     afin d'éviter toute confusion au niveau des applications.
253     Cela peut être fait via une interface SNMP qui effectue
254     une partie des opérations suivantes :
255
256   <itemizedlist>
257
258   <listitem><para> Éteindre l'alimentation du serveur en panne. </para>
259
260   <para> Si l'on en fait attention, le serveur peut réapparaître dans le
261     systÚme de réplication lorsque les administrateurs le rallume. </para>
262
263   </listitem>
264
265   <listitem><para> Modifier de rÚgles de pare-feu ou d'autres configuration
266       pour exclure du réseau l'adresse IP du serveur en panne. </para>
267
268   <para> Si le serveur a de multiples interfaces, et donc de multiple adresses IP,
269     cette approche permet de supprimer/désactiver les adresses utilisées l'application,
270     tout en conservant les adresses <quote>administratives</quote> afin
271     que le serveur reste accessible par les administrateurs systÚmes.
272   </para> </listitem>
273
274   </itemizedlist>
275   </para>
276   </sect2>
277
278   <sect2 id="rebuildnode1"><title>AprÚs la bascule d'urgence, reconfiguration
279   de l'ancienne origine</title>
280
281   <indexterm><primary>reconstruction aprÚs une bascule d'urgence</primary></indexterm>
282
283   <para> Ce qui arrive au noeud en panne dépend beaucoup de la nature de la catastrophe
284     qui a conduit à la bascule d'urgence vers un autre noeud. Si le noeud
285     a été abandonné à cause de la destruction physique des disques de stockage,
286     il n'y a plus grand-chose à faire. D'un autre coté, si un noeud a été abandonné
287     à cause d'une coupure réseau, qui n'a pas perturbé le fonctionnement normal
288     du noeud <quote>fournisseur</quote>. Toutefois une fois que les communications
289     sont restaurées, le fait est que le commande <command>FAIL OVER</command>
290     rend obligatoire l'abandon du noeud qui était en panne.</para>
291
292   <para> AprÚs ce genre de bascule d'urgence, les données stockées sur le
293     noeud 1 seront rapidement et de plus en plus désynchronisées.
294     par rapport aux autres noeuds. Elles doivent être considérées comme
295     corrompues. Ainsi le seul moyen pour que le noeud 1 retourne dans
296     le cluster de réplication et qu'il redevienne le noeud origine est de
297     le reconstruire à partir de zéro comme un abonné, de le laisser rattraper
298     son retard, puis d'effectuer la procédure de bascule contrÃŽlée.
299     </para>
300
301   <para> Une bonne raison de <emphasis>ne pas</emphasis> faire cela
302     automatiquement est que d'importante mises à jour ( d'un point de
303     vue <emphasis>commercial</emphasis> ) ont pu être
304   <quote>committée</quote> sur le systÚme en panne.
305   Vous souhaiterez probablement analyser les derniÚres transactions que
306   le noeud a réalisé avant de tomber en panne, afin de voir si certaines
307   doivent être ré-appliquer sur le cluster <quote>actif</quote>.
308   Par exemple, si quelqu'un réalisait des opérations bancaires impactant
309   des comptes clients au moment de la panne, il est souhaitable de
310   ne pas perdre cette information.</para>
311
312   <warning> <para> On a observé certains résultats étranges lorsqu'un
313       noeud <quote>tombe en panne</quote> à cause d'une coupure réseau persistante,
314       par opposition aux pannes du systÚme de stockage. Dans de tel scénarios,
315       le noeud <quote>en panne</quote> dispose d'une base de données en
316       parfait état de marche; le fait est qu'ayant été coupé des autres noeuds,
317       il <quote>crie en silence</quote>. </para>
318
319   <para> Lorsque la connexion réseau est réparée, ce noeud peut réapparaître
320     et conformément <emphasis>sa</emphasis> configuration, il va communiquer avec les
321     autres noeuds du cluster &slony1;. </para>
322
323   <para> En <emphasis>fait</emphasis>, la confusion se trouve uniquement sur
324     ce noeud. Les autres noeud du cluster ne sont pas du tout perturbés;
325     ils savent que ce noeud est  <quote>mort</quote>, et qu'ils doivent
326     l'ignorer. Mais il est impossible de savoir cela en regardent le noeud
327     qui a était <quote>en panne</quote>.
328   </para>
329
330   <para> Ceci nous ramÚne au fait que &slony1; n'est pas un outil de surveillance
331     de réseau. Vous devez avoir des méthodes claires pour signaler aux applications et
332     aux utilisateurs quels bases de données doivent être utilisées. En l'absence
333     de telles méthodes, la réplication ne fera qu'empirer le potentiel de confusion,
334     et les bascules d'urgence seront un énorme potentiel de confusion.
335   </para>
336   </warning>
337
338   <para> Si la base de données est trÚs volumineuse, la construction du noeud 1
339     peut prendre plusieurs heures; ceci est une autre raison de considérer
340     les bascules d'urgence comme un <quote>dernier recours</quote> non souhaitable.
341   </para>
342
343   </sect2>
344
345 </sect1>
Note: See TracBrowser for help on using the browser.