| 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="concepts"> |
|---|
| 8 |
<title>Les concepts</title> |
|---|
| 9 |
|
|---|
| 10 |
<indexterm><primary>concepts et terminologie</primary></indexterm> |
|---|
| 11 |
|
|---|
| 12 |
<para>Afin de mettre en place une réplication &slony1;, il est nécessaire de comprendre les |
|---|
| 13 |
principales abstractions utilisées : </para> |
|---|
| 14 |
|
|---|
| 15 |
<itemizedlist> |
|---|
| 16 |
<listitem><para>Cluster,</para></listitem> |
|---|
| 17 |
<listitem><para>Noeud ("node"),</para></listitem> |
|---|
| 18 |
<listitem><para>Ensemble de réplication ("replication set"),</para></listitem> |
|---|
| 19 |
<listitem><para>Origine ("Origin"), Fournisseurs ("Providers") et Abonnés ("Subscribers"),</para></listitem> |
|---|
| 20 |
<listitem><para>Les démons slon,</para></listitem> |
|---|
| 21 |
<listitem><para>La commande slonik</para></listitem> |
|---|
| 22 |
</itemizedlist> |
|---|
| 23 |
|
|---|
| 24 |
<para> Il est également nécessaire de connaître quelques mots de russe :</para> |
|---|
| 25 |
<itemizedlist> |
|---|
| 26 |
<listitem><para>slon signifie <quote>éléphant</quote> en russe,</para></listitem> |
|---|
| 27 |
<listitem><para>slony est le pluriel de slon, et désigne ainsi un groupe d'éléphants</para></listitem> |
|---|
| 28 |
<listitem><para>slonik désigne un <quote>petit éléphant</quote></para></listitem> |
|---|
| 29 |
</itemizedlist> |
|---|
| 30 |
|
|---|
| 31 |
<para> L'utilisation de ces termes dans &slony1; est un <quote>coup de chapeau</quote> |
|---|
| 32 |
à Vadim Mikheev, qui est l'auteur du prototype <application>rserv</application> |
|---|
| 33 |
qui inspira une partie des algorithmes utilisé dans &slony1;.</para> |
|---|
| 34 |
|
|---|
| 35 |
<sect2> |
|---|
| 36 |
<title>Cluster</title> |
|---|
| 37 |
<indexterm> |
|---|
| 38 |
<primary>cluster</primary> |
|---|
| 39 |
</indexterm> |
|---|
| 40 |
|
|---|
| 41 |
<para>Selon &slony1;, un <quote>cluster</quote> est ensemble nommé d'instances de bases |
|---|
| 42 |
de données &postgres;; Une réplication a lieu entre ces bases.</para> |
|---|
| 43 |
|
|---|
| 44 |
<para>Le nom du cluster est spécifié dans chaque script Slonik via la directive :</para> |
|---|
| 45 |
<programlisting> |
|---|
| 46 |
cluster name = 'quelque_chose'; |
|---|
| 47 |
</programlisting> |
|---|
| 48 |
|
|---|
| 49 |
<para>Si le nom du cluster est <envar>plop</envar>, alors &slony1; |
|---|
| 50 |
créera, dans chaque instance du cluster, le schéma <envar>_plop</envar>.</para> |
|---|
| 51 |
</sect2> |
|---|
| 52 |
<sect2><title>Noeud</title> |
|---|
| 53 |
<indexterm> |
|---|
| 54 |
<primary>noeud</primary> |
|---|
| 55 |
</indexterm> |
|---|
| 56 |
|
|---|
| 57 |
<para>Un noeud &slony1; est un base &postgres; nommée qui participe à la réplication.</para> |
|---|
| 58 |
|
|---|
| 59 |
<para>Le nom du noeud est défini au début de chaque script Slonik, avec la directive :</para> |
|---|
| 60 |
<programlisting> |
|---|
| 61 |
NODE 1 ADMIN CONNINFO = 'dbname=testdb host=server1 user=slony'; |
|---|
| 62 |
</programlisting> |
|---|
| 63 |
|
|---|
| 64 |
<para>La ligne <xref linkend="admconninfo"/> précise les informations |
|---|
| 65 |
de connexion qui seront utilisées par la fonction libpq |
|---|
| 66 |
<function>PQconnectdb()</function>.</para> |
|---|
| 67 |
|
|---|
| 68 |
<para>Ainsi un cluster &slony1; se compose :</para> |
|---|
| 69 |
<itemizedlist> |
|---|
| 70 |
<listitem><para> d'un nom de cluster</para></listitem> |
|---|
| 71 |
<listitem><para> d'un ensemble de noeuds &slony1;, qui disposent chacun d'un schéma |
|---|
| 72 |
portant le nom du cluster</para></listitem> |
|---|
| 73 |
</itemizedlist> |
|---|
| 74 |
</sect2> |
|---|
| 75 |
<sect2><title>Ensemble de réplication</title> |
|---|
| 76 |
<indexterm> |
|---|
| 77 |
<primary>Ensemble de réplication</primary> |
|---|
| 78 |
</indexterm> |
|---|
| 79 |
|
|---|
| 80 |
<para>Un ensemble de réplication est défini comme un ensemble de tables et de séquences qui |
|---|
| 81 |
doivent être répliquées entre plusieurs noeuds dans un cluster &slony1;.</para> |
|---|
| 82 |
|
|---|
| 83 |
<para>Vous pouvez avoir plusieurs sets, et le <quote>flux</quote> de réplication |
|---|
| 84 |
n'est pas nécessaire identique pour tous les ensembles.</para> |
|---|
| 85 |
</sect2> |
|---|
| 86 |
|
|---|
| 87 |
<sect2><title> Origine, Fournisseurs et Abonnés</title> |
|---|
| 88 |
<indexterm> |
|---|
| 89 |
<primary>Noeud d'origine</primary> |
|---|
| 90 |
</indexterm> |
|---|
| 91 |
<indexterm> |
|---|
| 92 |
<primary>Noeud fournisseur</primary> |
|---|
| 93 |
</indexterm> |
|---|
| 94 |
|
|---|
| 95 |
<para>Chaque ensemble de réplication a un noeud d'origine, qui est le <emphasis>seul</emphasis> endroit |
|---|
| 96 |
où les applications sont autorisées à modifier les données répliquées. On peut aussi |
|---|
| 97 |
rencontrer le terme <quote>noeud maître</quote>; Il s'agit de noeud principal qui |
|---|
| 98 |
fournit les données. |
|---|
| 99 |
</para> |
|---|
| 100 |
|
|---|
| 101 |
<indexterm> |
|---|
| 102 |
<primary>Noeud Abonné</primary> |
|---|
| 103 |
</indexterm> |
|---|
| 104 |
|
|---|
| 105 |
<para>Les autres noeuds du cluster s'abonne à l'ensemble de réplication, |
|---|
| 106 |
ce qui indique qu'ils veulent recevoir les données. |
|---|
| 107 |
</para> |
|---|
| 108 |
|
|---|
| 109 |
<para>Le noeud d'origine ne sera jamais considéré comme un |
|---|
| 110 |
<quote>abonné</quote> (On ignore ici le cas ou le cluster est restructuré |
|---|
| 111 |
et où l'origine est explicitement déplacée sur un autre noeud). |
|---|
| 112 |
Mais &slony1; supporte la notion d'abonnements en cascade, c'est à dire |
|---|
| 113 |
qu'un noeud qui est abonné à un ensemble de réplication, peut également se |
|---|
| 114 |
comporter comme un <quote>fournisseur</quote> du même ensemble de réplication |
|---|
| 115 |
pour d'autres noeuds du cluster.</para> |
|---|
| 116 |
</sect2> |
|---|
| 117 |
|
|---|
| 118 |
<sect2><title>Le démon slon</title> |
|---|
| 119 |
|
|---|
| 120 |
<indexterm><primary>démon slon</primary></indexterm> |
|---|
| 121 |
|
|---|
| 122 |
<para>Pour chaque noeud du cluster, il y a un processus <xref |
|---|
| 123 |
linkend="slon"/> qui gÚre l'activité de réplication pour le noeud. |
|---|
| 124 |
</para> |
|---|
| 125 |
|
|---|
| 126 |
<para> <xref linkend="slon"/> est un programme implémenté en C qui traite les |
|---|
| 127 |
évÚnements de réplication. Il y a deux principales sortes d'événements : |
|---|
| 128 |
</para> |
|---|
| 129 |
|
|---|
| 130 |
<itemizedlist> |
|---|
| 131 |
|
|---|
| 132 |
<listitem><para>Les évÚnements de configuration</para> |
|---|
| 133 |
|
|---|
| 134 |
<para> Ils se produisent en général lorsqu'un script <xref linkend="slonik"/> est exécuté, |
|---|
| 135 |
et qu'il modifie la configuration du cluster. </para> |
|---|
| 136 |
</listitem> |
|---|
| 137 |
|
|---|
| 138 |
<listitem><para> Les événements <command>SYNC</command></para> |
|---|
| 139 |
|
|---|
| 140 |
<para> Les mises à jour des tables répliquées sont regroupées dans des événements <command>SYNC</command>s; |
|---|
| 141 |
Ces groupes de transactions sont appliquées ensemble sur les noeuds abonnés. |
|---|
| 142 |
</para> |
|---|
| 143 |
</listitem> |
|---|
| 144 |
</itemizedlist> |
|---|
| 145 |
</sect2> |
|---|
| 146 |
|
|---|
| 147 |
<sect2><title>La commande slonik</title> |
|---|
| 148 |
|
|---|
| 149 |
<indexterm><primary>La commande slonik</primary></indexterm> |
|---|
| 150 |
|
|---|
| 151 |
<para> La commande <xref linkend="slonik"/> traite des scripts |
|---|
| 152 |
écrits dans un <quote>langage spécial</quote> qui est utilisé pour |
|---|
| 153 |
soumettre des événements de configuration du cluster &slony1; cluster. |
|---|
| 154 |
Cela comprend des actions telles que l'ajout et la suppression de noeuds, |
|---|
| 155 |
la modifications des voies de communications, l'ajout ou la suppression d'abonnements. |
|---|
| 156 |
</para> |
|---|
| 157 |
</sect2> |
|---|
| 158 |
</sect1> |
|---|