root/traduc/trunk/slony/intro.xml

Revision 1118, 16.5 kB (checked in by daamien, 4 months ago)

Slony : corrections de qq coquilles

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="introduction">
8 <title>Introduction à &slony1;</title>
9
10 <indexterm><primary> introduction à &slony1; </primary></indexterm>
11
12 <sect2> <title>Qu'est ce que &slony1; ?</title>
13
14 <para>&slony1; est systÚme de réplication entre <quote>un maître et de multiple esclaves</quote>
15 qui supporte les cascades et la promotion d'un esclave en maître. 
16 Le schéma directeur du développement de &slony1; est la création
17 d'un systÚme maître-esclave qui inclue les fonctionnalités nécessaire
18 pour répliquer de grandes bases de données avec un nombre raisonnable
19 d'esclaves. <quote>Raisonnable,</quote> dans ce contexte, signifie
20 une douzaine de serveurs.  Si le nombre de serveurs évolue au-delà de
21 cette limite, le coût des communications augmentent de maniÚre prohibitive,
22 et le bénéfice d'avoir de multiple serveurs s'amenuise.</para>
23
24 <para> Voir la section <xref linkend="slonylistenercosts"/> pour une
25   analyse plus détaillées des coûts associés à l'augmentation du
26   nombre de noeuds.</para>
27
28 <para> &slony1; est un systÚme conçu pour les datacenters et sites de
29   sauvegardes, où le fonctionnement des opérations est que tous les
30   noeuds sont disponibles en permanence, et où tous les noeuds peuvent
31   être sécurisés. Si vous avez des noeuds qui risquent réguliÚrement d'être
32   coupés du réseau, ou si la sécurité de vos noeuds ne peut pas
33   être garantie,  &slony1; n'est probablement pas la solution de réplication
34   idéale pour vous.</para>
35
36 <para> Voici notamment quelques exemples de cas où &slony1; ne sera probablement
37   pas adapté :
38
39 <itemizedlist>
40 <listitem><para> Les sites dont la connectivité est <quote>instable</quote>
41 </para></listitem>
42 <listitem><para> La réplication entre des noeuds qui ne sont pas toujours interconnectés</para></listitem>
43
44 <listitem><para> Répliquer une base de tarification à partir d'un serveur central vers
45     l'équipe commerciale qui s'y connecte périodiquement pour en extraire les mise à jour.
46   </para></listitem>
47
48 <listitem><para> Les sites où les changements de configuration sont faits de
49     maniÚre hasardeuse.</para></listitem>
50
51 <listitem><para> Un situation <quote>d'hébergement web</quote> où les
52     utilisateurs peuvent de maniÚre indépendante et arbitraire changer les
53     schémas des données.
54     </para>
55   </listitem>
56   </itemizedlist>
57 </para>
58 <para> Il existe une extension de <link linkend="logshipping"> log shipping par fichier</link>
59   qui permet de regrouper les mises à jour dans des fichiers.
60   Ainsi, les fichiers de mises à jours peuvent être distribués
61   par différents moyens sans avoir à attendre d'accusé de réception
62   entre les noeud fournisseur et les noeuds qui sont abonnés au
63   <quote>log shipping</quote>. Le noeuds abonnés au <quote>Log
64 shipping</quote> n'augmente pas les coûts de communication être
65 les noeuds &slony1;.</para>
66
67 <para> Mais &slony1;, ayant une seule origine par ensemble de données répliqué,
68   n'est pas adapté pour effectuer de la réplication <emphasis>réellement</emphasis> asynchrone
69   et multi-directionnelle. Pour celles et ceux qui recherche une
70   <quote>réplication asynchrone multi-maîtres avec résolution des conflits</quote>
71   telle que ce que fournit <productname>Lotus
72 <trademark>Notes</trademark></productname> ou les protocoles de <quote>synchronisation</quote>
73 présents sur les systÚmes PalmOS, il est nécessaire de se tourner vers d'autres logiciels.
74 </para>
75
76 <para> Il existe également d'autres modÚles de réplication qui ne sont pas sans avantages,
77   mais qui permettent des scénarios de réplication <emphasis>différents</emphasis>
78   de ce que &slony1; propose.</para>
79
80 </sect2>
81
82 <sect2><title>Pourquoi proposer encore un autre systÚme de réplication ?</title>
83
84 <para>&slony1; est né de l'idée de créer un systÚme de réplication qui ne soient
85   pas lié à une version spécifique de &postgres;, pour qu'il puisse être lancé
86   et arrêté sur une base existante sans besoin d'effectuer un cycle d'export/import
87   des données.</para>
88
89 </sect2>
90
91 <sect2><title> Ce que &slony1; n'est pas</title>
92
93 <itemizedlist>
94 <listitem><para>&slony1; n'est pas un systÚme de gestion de réseau.</para></listitem>
95
96 <listitem><para> &slony1; n'a aucune fonctionnalité permettant de détecter
97     la perte d'un noeud, ni de transformer automatiquement un noeud en maître
98     ou en noeud origine.</para>
99
100 <para> Il est toutefait possible que vous ayez besoin de ce type de mécanisme;
101   cela vous demandera de combiner des outils réseau qui évaluent
102  <emphasis>selon vos critÚres</emphasis> quels noeuds vous considérez comme
103 <quote>actifs</quote> et quels noeuds vous considérez comme <quote>morts</quote>,
104 ainsi qu'une politique locale pour déterminer ce qu'il faut faire dans telle ou telle circonstance.
105 &slony1; ne vous impose aucune politique.</para></listitem>
106
107 <listitem><para>&slony1; n'est pas un systÚme de réplication multi-maîtres;
108     ce n'est pas un gestionnaire de connexions, et il ne vous apportera pas
109     le café et les croissants le matin.</para></listitem>
110
111 </itemizedlist>
112
113 <para>Ceci étant dit, il existe des outils à votre disposition pour
114   simplifier certaines de ces opérations, et il existe un projet en cours
115   de développement, <productname>Slony-II</productname>, pour fournir
116   des mécanismes <quote>multi-maîtres</quote>. Mais cela constitue
117   un projet différent et séparé, implémenté de façon trÚs différente
118   de &slony1;, et attentes à propos de &slony1; ne doivent pas se baser
119   sur l'espoir placé dans de futurs projets.</para></sect2>
120
121 <sect2><title> Pourquoi &slony1; ne fait pas de bascule automatique en cas de panne («fail over») ?
122 </title>
123
124 <para>Déterminer si un noeud est en  <quote>échec</quote> est de la responsabilité
125   d'un logiciel de surveillance de réseau, pas de &slony1;. La configuration,
126   les mécanismes de bascule et les politiques de reprise sur panne sont
127   différent selon les sites. Par exemple, la surveillance avec des NICs redondants
128   et les mécanismes de haute-disponibilité intelligents qui garantissent
129   un changement d'adresse réseau à la volée sans conflit et une isolation
130   du noeud <quote>en échec</quote>, dépendent de la configuration du réseau,
131   des choix matériels et de la combinaison entre les logiciels et les appareils
132   utilisés. Tout cela appartient clairement au domaine de la gestion de réseau,
133   pas à celui de  &slony1;.</para>
134
135 <para> De plus, choisir comment se comporter selon
136 <quote>l'état</quote> du cluster concerne la politique commerciale locale,
137 en particulier si on considÚre qu'une <link
138 linkend="stmtfailover"><command>bascule en cas de panne</command></link> ( « fail over » ) nécessite
139 d'isoler le noeud en échec. Si &slony1; imposait une politique de bascule en cas de panne
140 aux utilisateurs, cela entrerait parfois en conflit avec des
141 intérêts commerciaux et &slony1; serait parfois une solution inadaptée.</para>
142
143 <para>En conséquence, laissons &slony1; faire ce qu'il fait de mieux : fournir un service de
144   réplication de bases de données.</para></sect2>
145
146 <sect2><title> Limitations actuelles</title>
147
148 <indexterm><primary>limitations de &slony1;</primary></indexterm>
149
150 <para>&slony1; ne propage pas les changements du schéma de données,
151   et ne réplique non plus les objets volumineux ( «large objects» )
152   Il y a une raison unique et commune à ces limitations :
153   &slony1; collecte les mises à jours en utilisant des triggers, et
154   ni les changements de schéma, ni les opérations sur les objets volumineux,
155   ni les requêtes <command>TRUNCATE</command> ne sont capables de
156   déclencher des triggers pour informer &slony1; lorsque ce genre
157   de modification a lieu. Ainsi les seuls objets que &slony1; peut répliquer
158   sont les tables et les séquences.  </para>
159
160 <para> Notons que <emphasis>l'utilisation</emphasis> de triggers implique
161   quelques <emphasis>retoucher</emphasis> supplémentaires sur ces triggers.
162 Sur le noeud <quote>origine</quote> pour chaque table répliquée, on ajoute un trigger
163 supplémentaire qui lance la procédure stockée  <xref
164 linkend="function.logtrigger"/>. 
165 Sur chaque noeud abonné, les tables sont complétées avec un trigger qui lance
166 la fonction  <xref
167 linkend="function.denyaccess"/>; cette fonction empêche toute mise à jour
168 sur les tables répliquées à l'exception de celles effectuées par
169 le processus <xref linkend="slon"/>.
170 De plus, toutes les <emphasis>autres</emphasis> triggers et rÚgles
171 sur les tables répliquées sont <emphasis>supprimés</emphasis> sur
172 les noeuds abonnés; Ceci est réalisé en faisant pointant ces tables,
173 dans le catalogue systÚme, vers les index des clefs primaires
174 plutÎt que sur la table elle-même.
175 Cela s'apparente à une <quote>corruption</quote> du dictionnaire de données,
176 et cela explique pourquoi on ne peut pas utiliser directement
177  <application>pg_dump</application> pour exporter le schéma sur les
178  noeuds abonnés. </para>
179
180 <para>Il est possible de propager d'autres types de modifications des bases
181   avec &slony1;, notamment les ordres DDL, si vous les effectuer via la fonction
182   de <application>slonik</application> nommée <xref
183 linkend="stmtddlscript"/>.  Ceci ne peut pas se faire
184 <quote>automatiquement</quote>; en tant qu'administrateur de base de données,
185 vous devez superviser les scripts SQL DDL et les soumettre via  <xref
186 linkend="stmtddlscript"/> car il existe un certain nombre de
187 piÚges à éviter concernant les <link
188 linkend="ddlchanges">.</link> </para>
189
190 <para>Si vous ne pouvez pas superviser ces modifications, vous devrez peut-être
191   envisager l'utilisation du mécanisme <acronym>PITR</acronym> (Point In
192 Time Recovery) de &postgres; (version 8.x), avec lequel les journaux
193 <acronym>WAL</acronym> sont répliqués sur des noeuds distants.
194 Malheureusement cette solution à deux limitations majeures :
195
196 <itemizedlist>
197        
198 <listitem><para> Le mécanisme PITR replique <emphasis>tous</emphasis> les changements de
199 <emphasis>toutes</emphasis> les bases de données; vous ne pouvez pas
200 exclure les données qui ne sont pas intéressantes;</para></listitem>
201
202 <listitem><para> Un réplicat PITR reste endormi jusqu'à ce que les journaux
203     soient appliqués et que la base soit relancée. Vous ne pouvez pas
204     utiliser la base et appliquer les mises à jour simultanément.
205     Cela revient à avoir un <quote>serveur de secours</quote> que
206     vous ne pouvez utiliser sans stopper la réplication.</para></listitem>
207
208 </itemizedlist></para>
209 </sect2>
210
211 <sect2><title>ModÚles de réplication</title>
212
213 <indexterm><primary>modÚles de réplication</primary></indexterm>
214
215 <para>%Il beaucoup de modÚles de réplication différents; il est
216   qu'un systÚme de réplication puisse répondre à toutes les attentes
217   de tous les utilisateurs.</para>
218
219 <para> &slony1; implémente un modÚle particulier, la réplication asynchrone,
220   en utilisant des triggers pour collecter les mises à jour sur les tables,
221   sur une <quote>origine</quote> unique, puis réplique ces mises à jour
222   sur de multiple <quote>abonnés</quote>, y compris les abonnés en cascade.</para>
223
224 <para> Il existe de de nombreaux autres modÚles de réplication
225   qui sont <emphasis> différent </emphasis> de celui-ci; il est
226   important de souligner que d'autres approches sont possibles.
227   &slony1; n'est certainement pas la seule approche, et pour certaines
228   applications, ce n'est <emphasis> pas </emphasis> la meilleur approche. </para>
229
230 <itemizedlist>
231 <listitem><para> Réplication synchrone entre une origine unique et plusieurs abonnés</para>
232
233 <para> Dans un systÚme synchrone, les mises à jour ne peuvent pas être committées
234   sur l'origine tant qu'elles n'ont pas été acceptées par les noeuds abonnés.
235   Ceci renforce la sécurité en évitant les risques de répudiation, car les mises
236   à jour ne sont pas effectuées sans avoir été confirmées ailleurs. Malheureusement,
237   la nécessité d'appliquer simultanément les changements sur de multiple emplacement
238   constitue un frein sur les performances. </para>
239
240 <para> Cette approche est similaire au modÚle basé sur le commit en deux phases ( NdT : « two phase commit » )
241   implémenté dans le protocole de gestion de transaction XA.</para>
242 </listitem>
243
244 <listitem><para> Réplication synchrone entre plusieurs origines et plusieurs abonnés </para>
245
246 <para> Ceci est le modÚle implémenté dans l'hypothétique systÚme
247 <productname>Slony-II</productname>.  Les systÚmes de réplication synchrones
248 <quote>souffrent</quote> de problÚmes de performances, car les mises à jour doivent
249 être acceptées par tous les noeuds avant d'être appliquées.</para>
250
251 <para> En pratique, il est inutile de faire fonctionner un systÚme de réplication
252   synchrone sur un réseau longue distance (WAN).</para>
253 </listitem>
254
255 <listitem><para> Réplication asynchrone multi-maîtres avec résolution/prévention des conflits</para>
256
257 <para> Le systÚme de réplication le plus répandu utilisant ce modÚle est probablement
258   le systÚme <productname>PalmOS HotSync</productname>.
259 <trademark>Lotus Notes</trademark> fournit également un systÚme de réplication
260 qui fonctionne de la même maniÚre.</para>
261
262 <para> Le <quote>problÚme</quote> caractéristique avec ce
263 style de réplication est que des conflits peuvent apparaître
264 lorsque des utilisateurs mettent à jour le même enregistrement
265 de différente maniÚre sur différents noeuds.</para>
266
267 <para> Dans le cas de <productname>HotSync</productname>, si un conflit
268   est provoqué par la mise à jour simultanée d'un même enregistrement,
269   la <quote>résolution</quote> se résume à créer un deuxiÚme enregistrement
270   pour témoigner des deux mises à jours, puis laisser l'utilisateur résoudre
271   le conflit à la main. </para>
272
273 <para> Certains systÚmes de réplication multi-maîtres asynchrones essaient
274   de résoudre les conflits en trouvant de moyens pour appliquer partiellement
275   les mises à jour. Par exemple, dans le cas de la mise à jour d'un adresse,
276   si un autre utilisateur tente de mettre à jour le nom de la rue, alors le
277   systÚme de résolution des conflits essaie d'appliquer les mises à jour
278   dans un ordre non-conflictuel. On peut considérer cette méthode comme
279   une forme de <quote>partitionnement de table</quote> où l'on considÚre la
280   base de données comme une table constituée de plusieurs <quote>sous-tables</quote>. </para>
281
282 <para> Les systÚmes de résolution de conflit nécessaire presque toujours
283   une bonne connaissance du domaine de l'application, ce qui implique
284   qu'ils ne peuvent résoudre des conflits automatiquement uniquement si
285   vous leur indiquez une politique de résolution. S'ils rencontrent
286   un conflit et qu'il n'existe pas de politique définie, la réplication
287   s'arrête jusqu'à ce que quelqu'un résolve le conflit à la main.</para>
288 </listitem>
289
290 </itemizedlist>
291
292 </sect2>
293 </sect1>
294
295 <sect1 id="slonylistenercosts"><title> Coûts de communications avec &slony1;</title>
296
297 <para>Le coût de communications augmente de façon quadratique dans plusieurs
298 directions lorsque le nombre de noeuds de réplication du cluster
299 grandit.  Notons les relations suivantes :
300
301 <itemizedlist>
302
303 <listitem><para> Il est nécessaire que les entrées de la table <xref
304 linkend="table.sl-listen"/> autorise toutes les connexions entre tous les noeuds.
305 Dans le pluspart des cas, cela n'est pas trÚs volumineux, mais cela signifie tout
306 de même qu'il faut définir n(n-1) voies de communications.
307 </para></listitem>
308
309 <listitem><para> Chaque événement SYNC appliqué doit être annoncé à
310     tous les noeuds participants à la réplication de l'ensemble de
311     données, afin que chaque noeud sache qu'il est possible de
312     purger les données des tables  <xref linkend="table.sl-log-1"/> et <xref
313 linkend="table.sl-log-2"/>, car n'importe quel noeud <quote>fournisseur</quote>
314     peut potentiellement devenir un <quote>maître</quote> à tout moment.
315     On peut s'attendre à que les messages SYNC ne soient propagés que sur
316     n/2 noeuds pour atteindre leur destination; ce qui implique que
317     chaque SYNC est transmis n(n/2) fois.  A nouveau, cela montre
318     que la croissance des coûts de communication est quadratique selon
319     le nombre de noeuds dans le cluster.</para></listitem>
320
321 </itemizedlist></para>
322
323 <para>Tout ceci prouve qu'il n'est pas judicieux de bâtir un grand réseau de communication
324   pour supporter un systÚme de réplication contenant beaucoup de noeuds.
325   Jusqu'à une demi-douzaine de noeuds cela semble raisonnable; à chaque fois que
326   le nombre de noeuds double, les temps de communications quadruplent.</para>
327 </sect1>
Note: See TracBrowser for help on using the browser.