| 13 | | <sect2><title>Foreword</title> |
|---|
| 14 | | |
|---|
| 15 | | <para>&slony1; is an asynchronous replication system. Because of |
|---|
| 16 | | that, it is almost certain that at the moment the current origin of a |
|---|
| 17 | | set fails, the final transactions committed at the origin will have |
|---|
| 18 | | not yet propagated to the subscribers. Systems are particularly |
|---|
| 19 | | likely to fail under heavy load; that is one of the corollaries of |
|---|
| 20 | | Murphy's Law. Therefore the principal goal is to |
|---|
| 21 | | <emphasis>prevent</emphasis> the main server from failing. The best |
|---|
| 22 | | way to do that is frequent maintenance.</para> |
|---|
| 23 | | |
|---|
| 24 | | <para> Opening the case of a running server is not exactly what we |
|---|
| 25 | | should consider a <quote>professional</quote> way to do system |
|---|
| 26 | | maintenance. And interestingly, those users who found it valuable to |
|---|
| 27 | | use replication for backup and failover purposes are the very ones |
|---|
| 28 | | that have the lowest tolerance for terms like <quote>system |
|---|
| 29 | | downtime.</quote> To help support these requirements, &slony1; not |
|---|
| 30 | | only offers failover capabilities, but also the notion of controlled |
|---|
| 31 | | origin transfer.</para> |
|---|
| 32 | | |
|---|
| 33 | | <para> It is assumed in this document that the reader is familiar with |
|---|
| 34 | | the <xref linkend="slonik"/> utility and knows at least how to set up a |
|---|
| 35 | | simple 2 node replication system with &slony1;.</para></sect2> |
|---|
| 36 | | |
|---|
| 37 | | <sect2><title> Controlled Switchover</title> |
|---|
| | 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></sect2> |
|---|
| | 36 | |
|---|
| | 37 | <sect2><title>Bascule contrÎlée</title> |
|---|
| 52 | | <listitem><para> At the time of this writing switchover to another |
|---|
| 53 | | server requires the application to reconnect to the new database. So |
|---|
| 54 | | in order to avoid any complications, we simply shut down the web |
|---|
| 55 | | server. Users who use <application>pg_pool</application> for the |
|---|
| 56 | | applications database connections merely have to shut down the |
|---|
| 57 | | pool.</para> |
|---|
| 58 | | |
|---|
| 59 | | <para> What needs to be done, here, is highly dependent on the way |
|---|
| 60 | | that the application(s) that use the database are configured. The |
|---|
| 61 | | general point is thus: Applications that were connected to the old |
|---|
| 62 | | database must drop those connections and establish new connections to |
|---|
| 63 | | the database that has been promoted to the <quote>/master/</quote> role. There |
|---|
| 64 | | are a number of ways that this may be configured, and therefore, a |
|---|
| 65 | | number of possible methods for accomplishing the change: |
|---|
| | 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 : |
|---|
| 113 | | <para> After these commands, the origin (master role) of data set 1 |
|---|
| 114 | | has been transferred to node2. And it is not simply transferred; it |
|---|
| 115 | | is done in a fashion such that node1 becomes a fully synchronized |
|---|
| 116 | | subscriber, actively replicating the set. So the two nodes have |
|---|
| 117 | | switched roles completely.</para></listitem> |
|---|
| 118 | | |
|---|
| 119 | | <listitem><para> After reconfiguring the web application (or |
|---|
| 120 | | <application><link linkend="pgpool"> pgpool </link></application>) to |
|---|
| 121 | | connect to the database on node2, the web server is restarted and |
|---|
| 122 | | resumes normal operation.</para> |
|---|
| 123 | | |
|---|
| 124 | | <para> Done in one shell script, that does the application shutdown, |
|---|
| 125 | | <application>slonik</application>, move config files and startup all |
|---|
| 126 | | together, this entire procedure is likely to take less than 10 |
|---|
| 127 | | seconds.</para></listitem> |
|---|
| | 111 | <para> AprÚs ces commandes, l'origine ( le rÎle du maître) de l'ensemble de réplication 1 |
|---|
| | 112 | est transféré sur le noeud 2. En fait elle n'est pas simplement transférée; le noeud1 devient |
|---|
| | 113 | un abonné parfaitement synchronisé et actif. En clair, les deux noeuds ont échangé |
|---|
| | 114 | leurs rÃŽles respectifs.</para></listitem> |
|---|
| | 115 | |
|---|
| | 116 | <listitem><para> AprÚs la reconfiguration de l'application web (ou |
|---|
| | 117 | de <application><link linkend="pgpool"> pgpool </link></application>) pour |
|---|
| | 118 | qu'elle se connecte à la base du noeud 2, le serveur web est redémarré et |
|---|
| | 119 | reprend son activité normale.</para> |
|---|
| | 120 | |
|---|
| | 121 | <para> Lorsqu'on utilise un script shell, pour stopper l'application, |
|---|
| | 122 | lancer le script <application>slonik</application>, déplacer les fichiers de configuration |
|---|
| | 123 | et relancer l'ensemble, toute la procédure prend en général moins de 10 |
|---|
| | 124 | secondes.</para></listitem> |
|---|
| 149 | | <para> If some more serious problem occurs on the |
|---|
| 150 | | <quote>origin</quote> server, it may be necessary to <xref |
|---|
| 151 | | linkend="stmtfailover"/> to a backup server. This is a highly |
|---|
| 152 | | undesirable circumstance, as transactions <quote>committed</quote> on |
|---|
| 153 | | the origin, but not applied to the subscribers, will be lost. You may |
|---|
| 154 | | have reported these transactions as <quote>successful</quote> to |
|---|
| 155 | | outside users. As a result, failover should be considered a |
|---|
| 156 | | <emphasis>last resort</emphasis>. If the <quote>injured</quote> |
|---|
| 157 | | origin server can be brought up to the point where it can limp along |
|---|
| 158 | | long enough to do a controlled switchover, that is |
|---|
| 159 | | <emphasis>greatly</emphasis> preferable.</para> |
|---|
| 160 | | |
|---|
| 161 | | <para> &slony1; does not provide any automatic detection for failed |
|---|
| 162 | | systems. Abandoning committed transactions is a business decision |
|---|
| 163 | | that cannot be made by a database system. If someone wants to put the |
|---|
| 164 | | commands below into a script executed automatically from the network |
|---|
| 165 | | monitoring system, well ... it's <emphasis>your</emphasis> data, and |
|---|
| 166 | | it's <emphasis>your</emphasis> failover policy. </para> |
|---|
| | 145 | <para> Lorsque de graves problÚmes apparaissent sur le serveur |
|---|
| | 146 | <quote>origine</quote>, il est parfois nécessaire d'effectuer une |
|---|
| | 147 | bascule ( <xref linkend="stmtfailover"/> ) vers le serveur de sauvegarde. |
|---|
| | 148 | C'est cas de figure qui n'a rien de souhaitable, car les transactions |
|---|
| | 149 | <quote>committées</quote> sur le serveur mais pas sur les abonnés, seront |
|---|
| | 150 | perdues. Certaines de ces transactions auront peut-être été annoncées |
|---|
| | 151 | à l'utilisateur final comme <quote>validées</quote>. En conséquence, les |
|---|
| | 152 | bascules d'urgence doivent être considérées comme un |
|---|
| | 153 | <emphasis>dernier recours</emphasis>. Le serveur origine |
|---|
| | 154 | qui subit <quote>l'avarie</quote> peut être maintenu assez longtemps, il est |
|---|
| | 155 | <emphasis>nettement</emphasis> |
|---|
| | 156 | préférable d'effectuer une bascule contrÎlée.</para> |
|---|
| | 157 | |
|---|
| | 158 | <para> &slony1; ne fournit pas de moyen de détection des pannes du systÚme. |
|---|
| | 159 | Abandonner des transactions <quote>committées</quote> est une décision |
|---|
| | 160 | commerciale qui ne peut pas être prise par un systÚme de gestion de base de données. |
|---|
| | 161 | Si vous voulez placer les commandes ci-dessous dans un script exécuté |
|---|
| | 162 | automatiquement par un systÚme de surveillance, et bien .... ce sont |
|---|
| | 163 | <emphasis>vos</emphasis> données, et <emphasis>votre</emphasis> politique |
|---|
| | 164 | de bascule d'urgence. </para> |
|---|
| 177 | | <para> causes node2 to assume the ownership (origin) of all sets that |
|---|
| 178 | | have node1 as their current origin. If there should happen to be |
|---|
| 179 | | additional nodes in the &slony1; cluster, all direct subscribers of |
|---|
| 180 | | node1 are instructed that this is happening. |
|---|
| 181 | | <application>Slonik</application> will also query all direct |
|---|
| 182 | | subscribers in order to determine out which node has the highest |
|---|
| 183 | | replication status (<emphasis>e.g.</emphasis> - the latest committed |
|---|
| 184 | | transaction) for each set, and the configuration will be changed in a |
|---|
| 185 | | way that node2 first applies those final before actually allowing |
|---|
| 186 | | write access to the tables.</para> |
|---|
| 187 | | |
|---|
| 188 | | <para> In addition, all nodes that subscribed directly to node1 will |
|---|
| 189 | | now use node2 as data provider for the set. This means that after the |
|---|
| 190 | | failover command succeeded, no node in the entire replication setup |
|---|
| 191 | | will receive anything from node1 any more.</para> |
|---|
| | 175 | <para> ordonne au noeud 2 de se considérer comme le propriétaire |
|---|
| | 176 | (l'origine) de tous les sets que le noeud 1 possédait. Si il |
|---|
| | 177 | existe des noeuds supplémentaire dans le cluster &slony1; |
|---|
| | 178 | Tous les noeuds abonnés au noeud 1 sont avertis du changement. |
|---|
| | 179 | <application>Slonik</application> va aussi envoyer une requête |
|---|
| | 180 | à chaque abonné pour déterminer quel noeud à le plus haut niveau |
|---|
| | 181 | de synchronisation (<emphasis>c'est à dire</emphasis> - la derniÚre |
|---|
| | 182 | transaction <quote>committée</quote>) pour chaque ensemble de réplication. |
|---|
| | 183 | et la configuration sera changé de façon à ce que le noeud 2 applique |
|---|
| | 184 | d'abord ces transactions finales, avant d'autoriser l'accÚs en écriture |
|---|
| | 185 | sur les tables.</para> |
|---|
| | 186 | |
|---|
| | 187 | <para> De plus, tous les noeuds qui étaient abonnés directement au noeud 1 |
|---|
| | 188 | considéreront désormais le noeud 2 comme leur fournisseur de données |
|---|
| | 189 | pour cet ensemble de replication. Cela signifie qu'une fois que la |
|---|
| | 190 | commande de bascule d'urgence est complétée, plus aucun noeud du cluster ne |
|---|
| | 191 | reçoit d'information de la part du noeud 1.</para> |
|---|
| 196 | | <para> Reconfigure and restart the application (or |
|---|
| 197 | | <application>pgpool</application>) to cause it to reconnect to |
|---|
| 198 | | node2.</para> |
|---|
| 199 | | </listitem> |
|---|
| 200 | | |
|---|
| 201 | | <listitem> <para> Purge out the abandoned node </para> |
|---|
| 202 | | |
|---|
| 203 | | <para> You will find, after the failover, that there are still a full |
|---|
| 204 | | set of references to node 1 in <xref linkend="table.sl-node"/>, as well |
|---|
| 205 | | as in referring tables such as <xref linkend="table.sl-confirm"/>; |
|---|
| 206 | | since data in <xref linkend="table.sl-log-1"/> is still present, |
|---|
| 207 | | &slony1; cannot immediately purge out the node. </para> |
|---|
| 208 | | |
|---|
| 209 | | <para> After the failover is complete and node2 accepts |
|---|
| 210 | | write operations against the tables, remove all remnants of node1's |
|---|
| 211 | | configuration information with the <xref linkend="stmtdropnode"/> |
|---|
| 212 | | command: |
|---|
| | 196 | <para> Reconfigurer et relancer l'application ( ou |
|---|
| | 197 | <application>pgpool</application>) pour qu'elle se reconnecte |
|---|
| | 198 | au noeud 2.</para> |
|---|
| | 199 | </listitem> |
|---|
| | 200 | |
|---|
| | 201 | <listitem> <para> Purger le noeud abandonné </para> |
|---|
| | 202 | |
|---|
| | 203 | <para> Vous découvrirez, aprÚs la bascule, qu'il existe encore |
|---|
| | 204 | beaucoup de références au noeud 1 dans la table <xref linkend="table.sl-node"/>, |
|---|
| | 205 | ainsi que ses tables associées telle que <xref linkend="table.sl-confirm"/>; |
|---|
| | 206 | puisque des données sont toujours présentes dans <xref linkend="table.sl-log-1"/>, |
|---|
| | 207 | &slony1; ne peut pas purger immédiatement le noeud. </para> |
|---|
| | 208 | |
|---|
| | 209 | <para> Une fois que la bascule sera complÚte et que le noeud 2 accepte |
|---|
| | 210 | les opérations d'écriture sur les tables répliquées, il faut supprimer |
|---|
| | 211 | toutes informations de configuration rémanentes avec la commande |
|---|
| | 212 | <xref linkend="stmtdropnode"/> : |
|---|
| 233 | | <sect2><title> Automating <command> FAIL OVER </command> </title> |
|---|
| 234 | | |
|---|
| 235 | | <indexterm><primary>automating failover</primary></indexterm> |
|---|
| 236 | | |
|---|
| 237 | | <para> If you do choose to automate <command>FAIL OVER </command>, it |
|---|
| 238 | | is important to do so <emphasis>carefully.</emphasis> You need to have |
|---|
| 239 | | good assurance that the failed node is well and truly failed, and you |
|---|
| 240 | | need to be able to assure that the failed node will not accidentally |
|---|
| 241 | | return into service, thereby allowing there to be two nodes out there |
|---|
| 242 | | able to respond in a <quote>master</quote> role. </para> |
|---|
| 243 | | |
|---|
| 244 | | <note> <para> The problem here requiring that you <quote>shoot the |
|---|
| 245 | | failed node in the head</quote> is not fundamentally about replication |
|---|
| 246 | | or &slony1;; &slony1; handles this all reasonably gracefully, as once |
|---|
| 247 | | the node is marked as failed, the other nodes will <quote>shun</quote> |
|---|
| 248 | | it, effectively ignoring it. The problem is instead with |
|---|
| 249 | | <emphasis>your application.</emphasis> Supposing the failed node can |
|---|
| 250 | | come back up sufficiently that it can respond to application requests, |
|---|
| 251 | | <emphasis>that</emphasis> is likely to be a problem, and one that |
|---|
| 252 | | hasn't anything to do with &slony1;. The trouble is if there are two |
|---|
| 253 | | databases that can respond as if they are <quote>master</quote> |
|---|
| 254 | | systems. </para> </note> |
|---|
| 255 | | |
|---|
| 256 | | <para> When failover occurs, there therefore needs to be a mechanism |
|---|
| 257 | | to forcibly knock the failed node off the network in order to prevent |
|---|
| 258 | | applications from getting confused. This could take place via having |
|---|
| 259 | | an SNMP interface that does some combination of the following: |
|---|
| | 233 | <sect2><title> Automatisation de la commande <command> FAIL OVER </command> </title> |
|---|
| | 234 | |
|---|
| | 235 | <indexterm><primary>automatisation des bascules d'urgence</primary></indexterm> |
|---|
| | 236 | |
|---|
| | 237 | <para> Si vous choisissez d'automatiser la commande <command>FAIL OVER </command>, |
|---|
| | 238 | il est important de le faire <emphasis>avec soin</emphasis>. Vous |
|---|
| | 239 | devez être sur que le noeud en panne est réellement en panne, et vous |
|---|
| | 240 | être capable de vous assurer que le noeud en panne ne redémarre pas, |
|---|
| | 241 | ce qui entraînerait un conflit entre deux noeuds capables |
|---|
| | 242 | de jouer le rÎle du <quote>maître</quote>. </para> |
|---|
| | 243 | |
|---|
| | 244 | <note> <para> Le fait de <quote>tirer une balle dans la |
|---|
| | 245 | tête du serveur en panne</quote> ne pose pas directement |
|---|
| | 246 | de problÚme à la réplication ou à &slony1;; &slony1; supporte |
|---|
| | 247 | cela de maniÚre assez gravieuse, car une fois qu'une est marqué |
|---|
| | 248 | comme étant en panne, les autres noeuds <quote>l'oublier</quote> |
|---|
| | 249 | et l'ignorer. Le problÚme se situe plutÎt au niveau de |
|---|
| | 250 | <emphasis>votre application</emphasis>. |
|---|
| | 251 | Supposons que le noeud en panne soit capable de répondre |
|---|
| | 252 | aux requêtes de votre application, <emphasis>cela</emphasis> |
|---|
| | 253 | va certainement poser un problÚme qui n'a rien à voir avec &slony1;. |
|---|
| | 254 | Le problÚme est que deux bases de données sont en mesure de répondre |
|---|
| | 255 | en tant que <quote>maître</quote>. </para> </note> |
|---|
| | 256 | |
|---|
| | 257 | <para> Lorsqu'une bascule d'urgence est effectuée, il faut un |
|---|
| | 258 | mécanisme pour dégager de force le noeud en panne hors du réseau |
|---|
| | 259 | afin d'éviter toute confusion au niveau des applications. |
|---|
| | 260 | Cela peut être fait via une interface SNMP qui effectue |
|---|
| | 261 | une partie des opérations suivantes : |
|---|
| 263 | | <listitem><para> Turns off power on the failed server. </para> |
|---|
| 264 | | |
|---|
| 265 | | <para> If care is not taken, the server may reappear when system |
|---|
| 266 | | administrators power it up. </para> |
|---|
| 267 | | |
|---|
| 268 | | </listitem> |
|---|
| 269 | | |
|---|
| 270 | | <listitem><para> Modify firewall rules or other network configuration |
|---|
| 271 | | to drop the failed server's IP address from the network. </para> |
|---|
| 272 | | |
|---|
| 273 | | <para> If the server has multiple network interfaces, and therefore |
|---|
| 274 | | multiple IP addresses, this approach allows the |
|---|
| 275 | | <quote>application</quote> addresses to be dropped/deactivated, but |
|---|
| 276 | | leave <quote>administrative</quote> addresses open so that the server |
|---|
| 277 | | would remain accessible to system administrators. </para> </listitem> |
|---|
| | 265 | <listitem><para> Ãteindre l'alimentation du serveur en panne. </para> |
|---|
| | 266 | |
|---|
| | 267 | <para> Si l'on en fait attention, le serveur peut réapparaître dans le |
|---|
| | 268 | systÚme de réplication lorsque les administrateurs le rallume. </para> |
|---|
| | 269 | |
|---|
| | 270 | </listitem> |
|---|
| | 271 | |
|---|
| | 272 | <listitem><para> Modifier de rÚgles de pare-feu ou d'autres configuration |
|---|
| | 273 | pour exclure du réseau l'adresse IP du serveur en panne. </para> |
|---|
| | 274 | |
|---|
| | 275 | <para> Si le serveur a de multiples interfaces, et donc de multiple adresses IP, |
|---|
| | 276 | cette approche permet de supprimer/désactiver les adresses utilisées l'application, |
|---|
| | 277 | tout en conservant les adresses <quote>administratives</quote> afin |
|---|
| | 278 | que le serveur reste accessible par les administrateurs systÚmes. |
|---|
| | 279 | </para> </listitem> |
|---|
| 283 | | <sect2 id="rebuildnode1"><title>After Failover, Reconfiguring |
|---|
| 284 | | Former Origin</title> |
|---|
| 285 | | |
|---|
| 286 | | <indexterm><primary>rebuilding after failover</primary></indexterm> |
|---|
| 287 | | |
|---|
| 288 | | <para> What happens to the failed node will depend somewhat on the |
|---|
| 289 | | nature of the catastrophe that lead to needing to fail over to another |
|---|
| 290 | | node. If the node had to be abandoned because of physical destruction |
|---|
| 291 | | of its disk storage, there will likely not be anything of interest |
|---|
| 292 | | left. On the other hand, a node might be abandoned due to the failure |
|---|
| 293 | | of a network connection, in which case the former |
|---|
| 294 | | <quote>provider</quote> can appear be functioning perfectly well. |
|---|
| 295 | | Nonetheless, once communications are restored, the fact of the |
|---|
| 296 | | <command>FAIL OVER</command> makes it mandatory that the failed node |
|---|
| 297 | | be abandoned. </para> |
|---|
| 298 | | |
|---|
| 299 | | <para> After the above failover, the data stored on node 1 will |
|---|
| 300 | | rapidly become increasingly out of sync with the rest of the nodes, |
|---|
| 301 | | and must be treated as corrupt. Therefore, the only way to get node 1 |
|---|
| 302 | | back and transfer the origin role back to it is to rebuild it from |
|---|
| 303 | | scratch as a subscriber, let it catch up, and then follow the |
|---|
| 304 | | switchover procedure.</para> |
|---|
| 305 | | |
|---|
| 306 | | <para> A good reason <emphasis>not</emphasis> to do this automatically |
|---|
| 307 | | is the fact that important updates (from a |
|---|
| 308 | | <emphasis>business</emphasis> perspective) may have been |
|---|
| 309 | | <command>commit</command>ted on the failing system. You probably want |
|---|
| 310 | | to analyze the last few transactions that made it into the failed node |
|---|
| 311 | | to see if some of them need to be reapplied on the <quote>live</quote> |
|---|
| 312 | | cluster. For instance, if someone was entering bank deposits |
|---|
| 313 | | affecting customer accounts at the time of failure, you wouldn't want |
|---|
| 314 | | to lose that information.</para> |
|---|
| 315 | | |
|---|
| 316 | | <warning> <para> It has been observed that there can be some very |
|---|
| 317 | | confusing results if a node is <quote>failed</quote> due to a |
|---|
| 318 | | persistent network outage as opposed to failure of data storage. In |
|---|
| 319 | | such a scenario, the <quote>failed</quote> node has a database in |
|---|
| 320 | | perfectly fine form; it is just that since it was cut off, it |
|---|
| 321 | | <quote>screams in silence.</quote> </para> |
|---|
| 322 | | |
|---|
| 323 | | <para> If the network connection is repaired, that node could |
|---|
| 324 | | reappear, and as far as <emphasis>its</emphasis> configuration is |
|---|
| 325 | | concerned, all is well, and it should communicate with the rest of its |
|---|
| 326 | | &slony1; cluster. </para> |
|---|
| 327 | | |
|---|
| 328 | | <para> In <emphasis>fact</emphasis>, the only confusion taking place |
|---|
| 329 | | is on that node. The other nodes in the cluster are not confused at |
|---|
| 330 | | all; they know that this node is <quote>dead,</quote> and that they |
|---|
| 331 | | should ignore it. But there is not a way to know this by looking at |
|---|
| 332 | | the <quote>failed</quote> node. |
|---|
| | 285 | <sect2 id="rebuildnode1"><title>AprÚs la bascule d'urgence, reconfiguration |
|---|
| | 286 | de l'ancienne origine</title> |
|---|
| | 287 | |
|---|
| | 288 | <indexterm><primary>reconstruction aprÚs une bascule d'urgence</primary></indexterm> |
|---|
| | 289 | |
|---|
| | 290 | <para> Ce qui arrive au noeud en panne dépend beaucoup de la nature de la catastrophe |
|---|
| | 291 | qui a conduit à la bascule d'urgence vers un autre noeud. Si le noeud |
|---|
| | 292 | a été abandonné à cause de la destruction physique des disques de stockage, |
|---|
| | 293 | il n'y a plus grand-chose à faire. D'un autre coté, si un noeud a été abandonné |
|---|
| | 294 | à cause d'une coupure réseau, qui n'a pas perturbé le fonctionnement normal |
|---|
| | 295 | du noeud <quote>fournisseur</quote>. Toutefois une fois que les communications |
|---|
| | 296 | sont restaurées, le fait est que le commande <command>FAIL OVER</command> |
|---|
| | 297 | rend obligatoire l'abandon du noeud qui était en panne.</para> |
|---|
| | 298 | |
|---|
| | 299 | <para> AprÚs ce genre de bascule d'urgence, les données stockées sur le |
|---|
| | 300 | noeud 1 seront rapidement et de plus en plus désynchronisées. |
|---|
| | 301 | par rapport aux autres noeuds. Elles doivent être considérées comme |
|---|
| | 302 | corrompues. Ainsi le seul moyen pour que le noeud 1 retourne dans |
|---|
| | 303 | le cluster de réplication et qu'il redevienne le noeud origine est de |
|---|
| | 304 | le reconstruire à partir de zéro comme un abonné, de le laisser rattraper |
|---|
| | 305 | son retard, puis d'effectuer la procédure de bascule contrÎlée. |
|---|
| | 306 | </para> |
|---|
| | 307 | |
|---|
| | 308 | <para> Une bonne raison de <emphasis>ne pas</emphasis> faire cela |
|---|
| | 309 | automatiquement est que d'importante mises à jour ( d'un point de |
|---|
| | 310 | vue <emphasis>commercial</emphasis> ) ont pu être |
|---|
| | 311 | <quote>committée</quote> sur le systÚme en panne. |
|---|
| | 312 | Vous souhaiterez probablement analyser les derniÚres transactions que |
|---|
| | 313 | le noeud a réalisé avant de tomber en panne, afin de voir si certaines |
|---|
| | 314 | doivent être ré-appliquer sur le cluster <quote>actif</quote>. |
|---|
| | 315 | Par exemple, si quelqu'un réalisait des opérations bancaires impactant |
|---|
| | 316 | des comptes clients au moment de la panne, il est souhaitable de |
|---|
| | 317 | ne pas perdre cette information.</para> |
|---|
| | 318 | |
|---|
| | 319 | <warning> <para> On a observé certains résultats étranges lorsqu'un |
|---|
| | 320 | noeud <quote>tombe en panne</quote> à cause d'une coupure réseau persistante, |
|---|
| | 321 | par opposition aux pannes du systÚme de stockage. Dans de tel scénarios, |
|---|
| | 322 | le noeud <quote>en panne</quote> dispose d'une base de données en |
|---|
| | 323 | parfait état de marche; le fait est qu'ayant été coupé des autres noeuds, |
|---|
| | 324 | il <quote>crie en silence</quote>. </para> |
|---|
| | 325 | |
|---|
| | 326 | <para> Lorsque la connexion réseau est réparée, ce noeud peut réapparaître |
|---|
| | 327 | et conformément <emphasis>sa</emphasis> configuration, il va communiquer avec les |
|---|
| | 328 | autres noeuds du cluster &slony1;. </para> |
|---|
| | 329 | |
|---|
| | 330 | <para> En <emphasis>fait</emphasis>, la confusion se trouve uniquement sur |
|---|
| | 331 | ce noeud. Les autres noeud du cluster ne sont pas du tout perturbés; |
|---|
| | 332 | ils savent que ce noeud est <quote>mort</quote>, et qu'ils doivent |
|---|
| | 333 | l'ignorer. Mais il est impossible de savoir cela en regardent le noeud |
|---|
| | 334 | qui a était <quote>en panne</quote>. |
|---|