| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|---|
| 2 |
<!-- DerniÚre modifications |
|---|
| 3 |
le $Date$ |
|---|
| 4 |
par $Author$ |
|---|
| 5 |
révision $Revision$ --> |
|---|
| 6 |
|
|---|
| 7 |
<qandaset> |
|---|
| 8 |
<indexterm><primary>Foire Aux Questions de &slony1;</primary></indexterm> |
|---|
| 9 |
|
|---|
| 10 |
<qandadiv id="faqcompiling"><title> &slony1; FAQ: Monter et Installer &slony1; </title> |
|---|
| 11 |
|
|---|
| 12 |
<qandaentry> |
|---|
| 13 |
|
|---|
| 14 |
<question><para> J'utilise <productname> Frotznik Freenix |
|---|
| 15 |
4.5</productname>, avec son systÚme de gestion de paquetages <acronym>FFPM</acronym> (Frotznik Freenix Package Manager). Il existe des paquets |
|---|
| 16 |
<acronym>FFPM</acronym> pour &postgres; 7.4.7, que j'utilise actuellement |
|---|
| 17 |
comme base de données, mais il n'y a pas encore de paquetages &slony1;. |
|---|
| 18 |
Comment puis-je rajouter &slony1; Ã cette distribution ? </para> |
|---|
| 19 |
</question> |
|---|
| 20 |
|
|---|
| 21 |
|
|---|
| 22 |
<answer><para> <productname>Frotznik Freenix</productname> c'est nouveau pour moi, |
|---|
| 23 |
alors il est un peu dangereux, de donner une réponse définitive, concise et rapide. </para> |
|---|
| 24 |
|
|---|
| 25 |
<para> Les réponses différent légÚrement selon les diverses combinaisons de versions entre |
|---|
| 26 |
&postgres; et &slony1; Il est légérement plus facile, avec les versions récentes, de faire face à ce genre de questions qu'avec les versions plus anciennes. En général, vous devez presque certainement recompiler &slony1; depuis les sources; selon les versions |
|---|
| 27 |
des deux composants &slony1; et &postgres;, vous |
|---|
| 28 |
<emphasis>devez</emphasis> également recompiler &postgres; à partir de zéro. |
|---|
| 29 |
(Savoir si vous devez <emphasis> utilisez </emphasis> la version compilée de &postgres; |
|---|
| 30 |
est un autre problÚme; en général ce n'est pas le cas...) </para> |
|---|
| 31 |
|
|---|
| 32 |
<itemizedlist> |
|---|
| 33 |
|
|---|
| 34 |
<listitem><para> &slony1; la version 1.0.5 et ultérieur nécessite d'avoir une version complÚtement configurées des sources de &postgres;, afin de recompiler |
|---|
| 35 |
&slony1;.</para> |
|---|
| 36 |
|
|---|
| 37 |
<!-- TODO --> |
|---|
| 38 |
|
|---|
| 39 |
<para> <emphasis>Si tout va bien </emphasis> vous pouvez refaire la configuration, |
|---|
| 40 |
ceci contre la configuration utilisée nativement par la paquetage d'origine, en utilisant la |
|---|
| 41 |
version de &postgres; en utilisant la commande |
|---|
| 42 |
<command> pg_config --configure</command>. </para> </listitem> |
|---|
| 43 |
|
|---|
| 44 |
<listitem> <para> &slony1; La version 1.1 simplifie considérablement les choses; |
|---|
| 45 |
dans la mesure où vous êtes dispensé d'avoir la version totale de &postgres; en sources, mais qui, |
|---|
| 46 |
au lieu de cela, se réfÚre à l'endroit où &postgres; ses librairies, |
|---|
| 47 |
les binaires, la configuration, ainsi que <command> les fichiers #include </command> sont déjà installés. |
|---|
| 48 |
</para> </listitem> |
|---|
| 49 |
|
|---|
| 50 |
<listitem><para> &postgres; 8.0 et supérieur est généralement plus facile voire idéal |
|---|
| 51 |
car comprenant déjà une <quote>installation par défaut</quote> incluant la totalité des fichiers d'inclusion |
|---|
| 52 |
<command> #include </command>. </para> |
|---|
| 53 |
|
|---|
| 54 |
<para> Si vous utilisez les versions antérieur de&postgres;, vous êtes sensé avoir trouvé |
|---|
| 55 |
toutes les sources et de les installer, si le paquetage d'installation ne l'a pas fait pour vous <quote> sur le serveur, |
|---|
| 56 |
les fichiers d'inclusions<command>#include</command></quote>, peuvent être réinstaller via la commande |
|---|
| 57 |
<command> make install-all-headers </command>.</para> |
|---|
| 58 |
</listitem> |
|---|
| 59 |
|
|---|
| 60 |
</itemizedlist> |
|---|
| 61 |
|
|---|
| 62 |
<para> En effet, le <quote>cas dérangeant </quote> est un scénario où |
|---|
| 63 |
vous utilisez une version de &slony1; antérieur à 1.1 avec une |
|---|
| 64 |
<quote>vieille</quote> version de &postgres;, dans ce cas vous pouvez comptez devoir compiler &postgres; |
|---|
| 65 |
à partir de zéro afin d'avoir tout les pré requis de &slony1; Recompile sera un passage obligé même si |
|---|
| 66 |
vous utilisez un version<quote>paquetée</quote> de &postgres;.</para> |
|---|
| 67 |
|
|---|
| 68 |
<para> Si vous employez une version récente de &postgres; et une version récente de &slony1;, |
|---|
| 69 |
alors les dependences peuvent être assez petits, et vous ne pouvez pas avoir besoin |
|---|
| 70 |
complémentaire des sources &postgres;. Ces dispositions devraient soulager la mise en production de |
|---|
| 71 |
paquetage de &slony1; de sorte que vous pourriez même pouvoir espérer éviter la compilations |
|---|
| 72 |
de &slony1;.</para> |
|---|
| 73 |
|
|---|
| 74 |
</answer> |
|---|
| 75 |
|
|---|
| 76 |
<answer><para> </para> </answer> |
|---|
| 77 |
|
|---|
| 78 |
</qandaentry> |
|---|
| 79 |
|
|---|
| 80 |
<qandaentry id="missingheaders"> |
|---|
| 81 |
<question><para> J'essaie d'installer &slony1; 1.1 et j'obtiens le message d'erreur suivant: |
|---|
| 82 |
<screen> |
|---|
| 83 |
configure: error: Headers for libpqserver are not found in the includeserverdir. |
|---|
| 84 |
This is the path to postgres.h. Please specify the includeserverdir with |
|---|
| 85 |
--with-pgincludeserverdir=<dir> |
|---|
| 86 |
</screen> |
|---|
| 87 |
</para></question> |
|---|
| 88 |
|
|---|
| 89 |
<answer><para> Vous exécutez certainement une version &postgres; 7.4 |
|---|
| 90 |
ou ultérieur, où les en-têtes de serveur ne sont pas installé par défaut, |
|---|
| 91 |
il vous suffi dans ce cas de lancer juste |
|---|
| 92 |
une commande <command>make install</command> de &postgres;.</para> |
|---|
| 93 |
|
|---|
| 94 |
<para> Vous avez besoin d'installer les en-têtes de serveur lors d'installation de &postgres; |
|---|
| 95 |
via la commande <command>make install-all-headers</command>. |
|---|
| 96 |
|
|---|
| 97 |
</para> </answer> </qandaentry> |
|---|
| 98 |
|
|---|
| 99 |
<qandaentry id="threadsafety"> |
|---|
| 100 |
|
|---|
| 101 |
<question><para> &slony1; semble se compiler correctement; maintenant, lorsque j'exécute un |
|---|
| 102 |
&lslon;, certain évÚnement démarrent autour, mais la réplication ne se met pas |
|---|
| 103 |
route.</para> |
|---|
| 104 |
|
|---|
| 105 |
<para> Slony logs might look like the following: |
|---|
| 106 |
|
|---|
| 107 |
<screen> |
|---|
| 108 |
DEBUG1 remoteListenThread_1: connected to 'host=host004 dbname=pgbenchrep user=postgres port=5432' |
|---|
| 109 |
ERROR remoteListenThread_1: "select ev_origin, ev_seqno, ev_timestamp, |
|---|
| 110 |
ev_minxid, ev_maxxid, ev_xip, |
|---|
| 111 |
ev_type, |
|---|
| 112 |
ev_data1, ev_data2, |
|---|
| 113 |
ev_data3, ev_data4, |
|---|
| 114 |
ev_data5, ev_data6, |
|---|
| 115 |
ev_data7, ev_data8 from "_pgbenchtest".sl_event e |
|---|
| 116 |
where (e.ev_origin = '1' and e.ev_seqno > '1') order by e.ev_origin, e.ev_seqno" - could not receive data from server: Operation now in progress |
|---|
| 117 |
</screen> |
|---|
| 118 |
</para> |
|---|
| 119 |
|
|---|
| 120 |
<para> Parfois il peut se manifester de maniÚres suivante ... |
|---|
| 121 |
|
|---|
| 122 |
<screen> |
|---|
| 123 |
ERROR remoteListenThread_2: "select ev_origin, ev_seqno, ev_timestamp, |
|---|
| 124 |
ev_minxid, ev_maxxid, ev_xip, ev_type, ev_data1, ev_data2, |
|---|
| 125 |
ev_data3, ev_data4, ev_data5, ev_data6, ev_data7, ev_data8 |
|---|
| 126 |
from "_sl_p2t2".sl_event e where (e.ev_origin = '2' and e.ev_seqno > |
|---|
| 127 |
'0') order by e.ev_origin, e.ev_seqno" - could not receive data from |
|---|
| 128 |
server: Error 0 |
|---|
| 129 |
</screen> |
|---|
| 130 |
</para> |
|---|
| 131 |
</question> |
|---|
| 132 |
|
|---|
| 133 |
<answer><para>Sur AIX et Solaris (et probablement sur d'autre OS), les deux |
|---|
| 134 |
&slony1; <emphasis>et &postgres;</emphasis> doivent être compilés avec l' |
|---|
| 135 |
<option>--enable-thread-safety</option> option. Le message ci-dessus arrive lorsque la compilation |
|---|
| 136 |
de &postgres; n'a pas fait appel à cette option.</para> |
|---|
| 137 |
|
|---|
| 138 |
<para>Le disfonctionnement ici vient du fait que le libc (threadsafe) et libpq |
|---|
| 139 |
(non-threadsafe) utilisent des emplacement de mémoire différente pour le code erreur, ainsi en |
|---|
| 140 |
laissant la requête échouer.</para> |
|---|
| 141 |
|
|---|
| 142 |
<para>Des problÚmes de ce genre sur AIX et sur Solaris, surviennent avec des régularités surprenantes. |
|---|
| 143 |
; l'erreur devrais prendre quelque choses ressemblant à un code <quote>objet ou à un code d'audit</quote> qui sont compilé |
|---|
| 144 |
make sure that <emphasis>ALL</emphasis> of the necessary components have been |
|---|
| 145 |
et linké avec l'option <option>--enable-thread-safety</option>.</para> |
|---|
| 146 |
|
|---|
| 147 |
<para>Pour le moment, je me concentre sur le problÚme de |
|---|
| 148 |
<envar>LD_LIBRARY_PATH</envar> si c'est défini, sur Solaris, pour pointer sur les |
|---|
| 149 |
librairies depuis une version ancienne de &postgres; afin de recompiler. Cela signifie que même si |
|---|
| 150 |
la base <emphasis>a été</emphasis> compilée avec l' |
|---|
| 151 |
<option>--enable-thread-safety</option>, et que |
|---|
| 152 |
<application>slon</application> a été recompilé à nouveau, avec l'édition de lien dynamique de |
|---|
| 153 |
<application>slon</application> pointant sur un |
|---|
| 154 |
<quote>ancienne mauvaise version de thread-unsafe,</quote> et alors slon n'a pas fonctionné. Ceci n'était pas clair |
|---|
| 155 |
que c'était le cas, jusqu'à ce que je rexécute <command>ldd</command> |
|---|
| 156 |
à nouveau <application>slon</application>.</para> </answer> |
|---|
| 157 |
|
|---|
| 158 |
<answer><para> A noter que la version 7.4.2 de libpq, sur Solaris exige, un nouveau patch |
|---|
| 159 |
de <link linkend="threadpatch"> </link> ; Le requis est également demandé pour &postgres; version 8.0. |
|---|
| 160 |
</para> |
|---|
| 161 |
</answer> |
|---|
| 162 |
</qandaentry> |
|---|
| 163 |
|
|---|
| 164 |
<qandaentry id="pg81funs"> |
|---|
| 165 |
|
|---|
| 166 |
<question> <para> Je suis en train de migrer sur une nouvelle version de &slony1; |
|---|
| 167 |
et je me débat avec un problÚme de<xref |
|---|
| 168 |
linkend="stmtupdatefunctions"/>. Lors d'exécution de<xref |
|---|
| 169 |
linkend="stmtupdatefunctions"/>, mon |
|---|
| 170 |
<application>postmaster</application> plante dessus avec un Signal 11. |
|---|
| 171 |
Le fichier log ne contient aucune erreur, relatives à |
|---|
| 172 |
&postgres; les logs indiquent que, yes indeed, the postmaster fell |
|---|
| 173 |
over.</para> |
|---|
| 174 |
|
|---|
| 175 |
<para> En scrutant le fichier core avec un débuguer, on constate que |
|---|
| 176 |
l'incident survient lors de la validation d'une transaction. </para> |
|---|
| 177 |
|
|---|
| 178 |
<para> Pour infos je suis sur &postgres; 8.1.[0-3]. </para> |
|---|
| 179 |
</question> |
|---|
| 180 |
|
|---|
| 181 |
<answer> <para> Désagréablement l'ancienne versions de &postgres; 8.1 avait un problÚme |
|---|
| 182 |
où lorsque vous aviez besoin de redéfinir une fonction (comme , say, |
|---|
| 183 |
<function>upgradeSchema(text)</function>), et que aprÚs, dans la même session de transaction |
|---|
| 184 |
, vous exécutiez la même fonction, le |
|---|
| 185 |
<application>postmaster</application> tombait en erreur, et que la |
|---|
| 186 |
transaction ne pouvait se valider. </para> |
|---|
| 187 |
|
|---|
| 188 |
<para> La commande &lslonik; <xref linkend="stmtupdatefunctions"/> |
|---|
| 189 |
fonctionne de cette maniÚre; dans la même transaction, essayez ceci: |
|---|
| 190 |
|
|---|
| 191 |
<itemizedlist> |
|---|
| 192 |
<listitem><para> Charger les nouvelles fonctions (depuis <filename>slony1_funcs.sql</filename>), notamment comprenant <function>upgradeSchema(text)</function>. |
|---|
| 193 |
</para> </listitem> |
|---|
| 194 |
<listitem><para> Lancer <function>upgradeSchema(text)</function> pour effectuer la migration nécessaire des schémas de la base. </para> </listitem> |
|---|
| 195 |
<listitem><para> Notifier au pro cesses &lslon; le fait de changement de la configuration.</para> </listitem> |
|---|
| 196 |
</itemizedlist> |
|---|
| 197 |
</para> |
|---|
| 198 |
|
|---|
| 199 |
<para> Malheureusement, en &postgres; 8.1.0, 8.1.1, 8.1.2, et 8.1.3, |
|---|
| 200 |
ceci est conflictuel avec un bug où l'utilisation et la modification d'une fonction plpgsql au sein de la même transaction |
|---|
| 201 |
lié à un plantage. </para> |
|---|
| 202 |
|
|---|
| 203 |
<para> Plusieurs contournements sont à envisager. </para> |
|---|
| 204 |
|
|---|
| 205 |
</answer> |
|---|
| 206 |
|
|---|
| 207 |
<answer> <para> La réponse privilégiée serais de dire migrer &postgres; en |
|---|
| 208 |
version 8.1.4 ou supérieur. Les changements mineurs du noyau n'entraîne pas de |
|---|
| 209 |
reconstruction de la base; ceci devrait simplement exiger d'installer un noyau 8.1.x |
|---|
| 210 |
en redémarrant les <application>postmaster</application> avec cette nouvelle version. </para> |
|---|
| 211 |
</answer> |
|---|
| 212 |
|
|---|
| 213 |
<answer><para> Si cette solution ne convient pas, il est possible d'effectuer une série de transaction <quote>à la main</quote>, |
|---|
| 214 |
l'équivalent de ce que &lslonik; aurait fait pour cette migration. </para> |
|---|
| 215 |
|
|---|
| 216 |
<itemizedlist> |
|---|
| 217 |
<listitem><para> Prendre <filename>slony1_funcs.sql</filename> et faire trois remplacement dans ce fichier: </para> |
|---|
| 218 |
|
|---|
| 219 |
<itemizedlist> |
|---|
| 220 |
<listitem><para> Remplacer <quote>@CLUSTERNAME@</quote>avec le nom du cluster</para> </listitem> |
|---|
| 221 |
<listitem><para> Remplacer <quote>@MODULEVERSION@</quote> avec la version littérale de &slony1; comme <quote>1.2.10</quote> </para> </listitem> |
|---|
| 222 |
<listitem><para> Remplacer <quote>@NAMESPACE@</quote> avec <quote>double-quoted</quote> nom du cluster, comme "_MyCluster" </para> </listitem> |
|---|
| 223 |
</itemizedlist> |
|---|
| 224 |
</listitem> |
|---|
| 225 |
<listitem><para> Recharger cet<quote>remis à niveau</quote> de jeux de fonctions dans la base.</para> </listitem> |
|---|
| 226 |
<listitem><para> Exécuter la fonction stockée via <command>select <function>upgradeSchema('1.2.7')</function>; </command>, |
|---|
| 227 |
en supposant que la précédente version de &slony1; en cours était celle de 1.2.7. </para> </listitem> |
|---|
| 228 |
<listitem><para> Rechargement total des processes &lslon; sera probablement une sage décision aprÚs ce genre de <quote>chirurgie.</quote> </para> </listitem> |
|---|
| 229 |
</itemizedlist> |
|---|
| 230 |
</answer> |
|---|
| 231 |
</qandaentry> |
|---|
| 232 |
|
|---|
| 233 |
<qandaentry> |
|---|
| 234 |
<question> <para> ProblÚme d'installation sur Fedora/x86-64 </para> |
|---|
| 235 |
|
|---|
| 236 |
<para> Lorsqu'on essaie de configurer &slony1; sur systÚme Fedora x86-64, |
|---|
| 237 |
où <application>yum</application> a été utilisé pour une installation du paquetage |
|---|
| 238 |
<filename>postgresql-libs.x86_64</filename>, le message suivant se manifeste : |
|---|
| 239 |
|
|---|
| 240 |
<screen> |
|---|
| 241 |
configure: error: Your version of libpq doesn't have PQunescapeBytea |
|---|
| 242 |
this means that your version of PostgreSQL is lower than 7.3 |
|---|
| 243 |
and thus not supported by Slony-I. |
|---|
| 244 |
</screen></para> |
|---|
| 245 |
|
|---|
| 246 |
<para> Ceci arrive avec &postgres; 8.2.5, ce qui est certainement un peu plus récent que |
|---|
| 247 |
7.3. </para> |
|---|
| 248 |
</question> |
|---|
| 249 |
|
|---|
| 250 |
<answer> <para> <application>configure</application> est à la recherche de ce directif |
|---|
| 251 |
en compilant un petit programme requis, pour lequel il est appelé, et |
|---|
| 252 |
vérifie la compilation se passe bien. Avec la ligne de commande <command>gcc</command> |
|---|
| 253 |
il utilise <command>-lpq</command> pour chercher la librairie. </para> |
|---|
| 254 |
|
|---|
| 255 |
|
|---|
| 256 |
<para> Malheureusement, ce paquetage fait défaut depuis le lien symbolique, de |
|---|
| 257 |
<filename>/usr/lib64/libpq.so</filename> Ã |
|---|
| 258 |
<filename>libpq.so.5.0</filename>; c'est pourquoi il plante sur libpq. |
|---|
| 259 |
Le <emphasis>vrai</emphasis> problÚme c'est que le compilateur n'arrive pas à trouver une |
|---|
| 260 |
librairie pour l'édition de lien, et non pas que libpq est absent et qui a manqué à l'appel. |
|---|
| 261 |
</para> |
|---|
| 262 |
|
|---|
| 263 |
<para> Eventuellement il faudra remonter ces informations vers ceux qui gÚrent le paquetage |
|---|
| 264 |
<filename>postgresql-libs.x86_64</filename>. </para> |
|---|
| 265 |
</answer> |
|---|
| 266 |
|
|---|
| 267 |
<answer> <para> Notez que ce même symptÎme peut être révélateur des problÚmes semblables de ce genre |
|---|
| 268 |
de configuration systÚme. Les mauvais liens symboliques, les mauvaises permissions, le mauvais comportement |
|---|
| 269 |
de la part de votre compilateur C, tout peuvent potentiellement mener à ce même message d'erreur. </para> |
|---|
| 270 |
|
|---|
| 271 |
<para> Ainsi si vous rencontrez cette erreur, vous aurez besoin de regarder le fichier log généré, |
|---|
| 272 |
<filename>config.log</filename>. Cherchez par la bas, et regarder quel est le souci <emphasis>récemment</emphasis> rencontré. |
|---|
| 273 |
Ceci sera bénéfique, pour trouver la racine de l'épineux problÚme.</para> |
|---|
| 274 |
</answer> |
|---|
| 275 |
|
|---|
| 276 |
</qandaentry> |
|---|
| 277 |
|
|---|
| 278 |
</qandadiv> |
|---|
| 279 |
|
|---|
| 280 |
<qandadiv id="faqconnections"> <title> &slony1; FAQ: ProblÚmes relatifs aux connections</title> |
|---|
| 281 |
<qandaentry> |
|---|
| 282 |
|
|---|
| 283 |
<question><para>Je cherche le nom de<envar>_clustername</envar>, et |
|---|
| 284 |
il est introuvable.</para></question> |
|---|
| 285 |
|
|---|
| 286 |
<answer><para> Si le DNS sont erronés, alors l'instance &lslon; |
|---|
| 287 |
ne pourra pas se connecter aux noeuds.</para> |
|---|
| 288 |
|
|---|
| 289 |
<para>Ceci mÚne aux fait que les noeuds seront introuvables.</para> |
|---|
| 290 |
|
|---|
| 291 |
<para>Revérifier la configuration des connexions. D'ailleurs depuis <xref |
|---|
| 292 |
linkend="slon"/> le linkage avec libpq, vous devrez avoir le mot de passe généré |
|---|
| 293 |
dans <filename> $HOME/.pgpass</filename>, partiellement reporté dans bonne/mauvais authentification ici.</para> |
|---|
| 294 |
</answer> |
|---|
| 295 |
</qandaentry> |
|---|
| 296 |
|
|---|
| 297 |
<qandaentry id="morethansuper"> |
|---|
| 298 |
<question> <para> J'ai crée un compte <quote>super utilisateur</quote>, |
|---|
| 299 |
<command>slony</command>, pour exécuter les activités de réplications. Comme suggéré, |
|---|
| 300 |
je l'ai configuré comme super user, avec l'interrogation suivante : |
|---|
| 301 |
<command> |
|---|
| 302 |
update pg_shadow set usesuper = 't' where usename in ('slony', |
|---|
| 303 |
'molly', 'dumpy'); |
|---|
| 304 |
</command> |
|---|
| 305 |
(Cette même commande permet d'autoriser autres utilisateurs d'exécuter vacuums et |
|---|
| 306 |
sauvegarde).</para> |
|---|
| 307 |
|
|---|
| 308 |
<para> Malheureusement, je suis tombé en erreur, à chaque fois où je voulais souscrire à un nouveau ensemble.</para> |
|---|
| 309 |
|
|---|
| 310 |
<programlisting> |
|---|
| 311 |
DEBUG1 copy_set 28661 |
|---|
| 312 |
DEBUG1 remoteWorkerThread_1: connected to provider DB |
|---|
| 313 |
DEBUG2 remoteWorkerThread_78: forward confirm 1,594436 received by 78 |
|---|
| 314 |
DEBUG2 remoteWorkerThread_1: copy table public.billing_discount |
|---|
| 315 |
ERROR remoteWorkerThread_1: "select "_mycluster".setAddTable_int(28661, 51, 'public.billing_discount', 'billing_discount_pkey', 'Table public.billing_discount with candidate primary key billing_discount_pkey'); " PGRES_FATAL_ERROR ERROR: permission denied for relation pg_class |
|---|
| 316 |
CONTEXT: PL/pgSQL function "altertableforreplication" line 23 at select into variables |
|---|
| 317 |
PL/pgSQL function "setaddtable_int" line 76 at perform |
|---|
| 318 |
WARN remoteWorkerThread_1: data copy for set 28661 failed - sleep 60 seconds |
|---|
| 319 |
</programlisting> |
|---|
| 320 |
|
|---|
| 321 |
<para> Celà a continué de se planter, à plusieurs reprise, juqsqu'à ce que |
|---|
| 322 |
<application>slon</application> se connecte comme |
|---|
| 323 |
<command>postgres</command> le faisait.</para> |
|---|
| 324 |
</question> |
|---|
| 325 |
|
|---|
| 326 |
<answer><para> Le problÚme est assez évident en soi; la permission sur la table de systÚme est ignorée, <envar>pg_class</envar>.</para></answer> |
|---|
| 327 |
|
|---|
| 328 |
<answer><para> La <quote>solution</quote> est la suivante:</para> |
|---|
| 329 |
<programlisting> |
|---|
| 330 |
update pg_shadow set usesuper = 't', usecatupd='t' where usename = 'slony'; |
|---|
| 331 |
</programlisting> |
|---|
| 332 |
</answer> |
|---|
| 333 |
|
|---|
| 334 |
<answer><para> En version 8.1 et supérieur, vous avez aussi besoin de:</para> |
|---|
| 335 |
<programlisting> |
|---|
| 336 |
update pg_authid set rolcatupdate = 't', rolsuper='t' where rolname = 'slony'; |
|---|
| 337 |
</programlisting> |
|---|
| 338 |
</answer> |
|---|
| 339 |
</qandaentry> |
|---|
| 340 |
|
|---|
| 341 |
<qandaentry> |
|---|
| 342 |
<question><para> Au moment d'enregistrer un esclave,dans le log, j'obtiens le message |
|---|
| 343 |
suivant : |
|---|
| 344 |
|
|---|
| 345 |
<screen> |
|---|
| 346 |
DEBUG1 copy_set 1 |
|---|
| 347 |
DEBUG1 remoteWorkerThread_1: connected to provider DB |
|---|
| 348 |
WARN remoteWorkerThread_1: transactions earlier than XID 127314958 are still in progress |
|---|
| 349 |
WARN remoteWorkerThread_1: data copy for set 1 failed - sleep 60 seconds |
|---|
| 350 |
</screen></para></question> |
|---|
| 351 |
|
|---|
| 352 |
<answer> <para> Il y a évidemment un certain nombre de vieilles transactions bloquantes, |
|---|
| 353 |
de &slony1; restant depuis le traitement des synchros. Vous devriez jeter un coup d'oeil |
|---|
| 354 |
à pg_locks to see what's up:</para> |
|---|
| 355 |
|
|---|
| 356 |
<screen> |
|---|
| 357 |
sampledb=# select * from pg_locks where transaction is not null order by transaction; |
|---|
| 358 |
relation | database | transaction | pid | mode | granted |
|---|
| 359 |
----------+----------+-------------+---------+---------------+--------- |
|---|
| 360 |
| | 127314921 | 2605100 | ExclusiveLock | t |
|---|
| 361 |
| | 127326504 | 5660904 | ExclusiveLock | t |
|---|
| 362 |
(2 rows) |
|---|
| 363 |
</screen> |
|---|
| 364 |
|
|---|
| 365 |
<para>See? 127314921 est en effet plus vieux que 127314958, et il est toujours en cours d'exécution.</para> |
|---|
| 366 |
|
|---|
| 367 |
<para> Un long traitement G/LA, s'emballe durant une interrogation |
|---|
| 368 |
<application>RT3</application>, avec |
|---|
| 369 |
<application>pg_dump</application>, toute les transaction semblent s'exécuter pour une période interminable. |
|---|
| 370 |
Jusqu'à ce que elles soient complétées ou bien interrompu, on verra alors le message d'erreur suivant: |
|---|
| 371 |
<quote> data copy |
|---|
| 372 |
for set 1 failed - sleep 60 seconds </quote>.</para> |
|---|
| 373 |
|
|---|
| 374 |
|
|---|
| 375 |
<para>D'ailleurs, s'il y a plus d'une base de données sur le cluster du &postgres; |
|---|
| 376 |
, et que la charge se déporte sur une autre base, ce qui mÚne à procéder aux<quote>transactions plus tÎt que XID |
|---|
| 377 |
quoi que</quote> s'avérant encore en marche. Le fait est que la base de donnée dissociée |
|---|
| 378 |
sur le cluster n'est pas pertinente; &slony1; attendra |
|---|
| 379 |
jusqu'Ã ce que ces vieilles transactions se terminent.</para> |
|---|
| 380 |
</answer> |
|---|
| 381 |
</qandaentry> |
|---|
| 382 |
|
|---|
| 383 |
|
|---|
| 384 |
<qandaentry> |
|---|
| 385 |
<question><para>Même chose que ce qui précÚde. Ce que j'ai oublié de mentionner, aussi bien, |
|---|
| 386 |
était que j'essayais d'ajouter |
|---|
| 387 |
<emphasis>DEUX</emphasis> abonnés, concurremment.</para></question> |
|---|
| 388 |
|
|---|
| 389 |
<answer><para> Cela ne peut marcher: &slony1; ne peut employer la commande |
|---|
| 390 |
<command>COPY</command> de maniÚre concurrente. voir |
|---|
| 391 |
<filename>src/slon/remote_worker.c</filename>, la fonction |
|---|
| 392 |
<function>copy_set()</function></para> |
|---|
| 393 |
|
|---|
| 394 |
<screen> |
|---|
| 395 |
$ ps -aef | egrep '[2]605100' |
|---|
| 396 |
postgres 2605100 205018 0 18:53:43 pts/3 3:13 postgres: postgres sampledb localhost COPY |
|---|
| 397 |
</screen> |
|---|
| 398 |
|
|---|
| 399 |
<para>Ceci s'avÚre justement être une transaction de <command>COPY</command> |
|---|
| 400 |
impliqué en installant l'abonnement pour un des noeuds. Tout a l'air bien; |
|---|
| 401 |
le systÚme s'occupe de configurer le premier abonné; il ne veut pas démarrer sur le second |
|---|
| 402 |
tant que le premier n'a pas fini son enregistrement. |
|---|
| 403 |
Cela représente une cause possible.</para> |
|---|
| 404 |
|
|---|
| 405 |
<para>Ceci a (peut-être malheureusement)comme conséquence que vous ne pouvez pas peupler |
|---|
| 406 |
deux esclaves concurremment pour un simple fournisseur. Vous devez souscrire un et un seul abonné à la fois, |
|---|
| 407 |
une fois qu'il a accompli l'abonnement,(copyant le contenu des table et autre) peut s'occuper de débuter l'enregistrement |
|---|
| 408 |
du deuxiÚme.</para></answer> |
|---|
| 409 |
</qandaentry> |
|---|
| 410 |
|
|---|
| 411 |
<qandaentry id="missingoids"> <question> <para> Nous somme souciés par quelques choses |
|---|
| 412 |
car ne pouvant envisager de désinstaller entiÚrement une réplication du cluster slony |
|---|
| 413 |
entre un maître et un esclave.</para> |
|---|
| 414 |
|
|---|
| 415 |
<warning> <para><emphasis>ASSUREZ-VOUS QUE VOUS ARRÃTEZ L'EXECUTION DE VOS APPLICATIONS |
|---|
| 416 |
SUR VOTRE BASE DE DONNEES MAITRE, LORS DE L'ELIMINATION D'UN MEMBRE DU |
|---|
| 417 |
CLUSTER</emphasis>, or at least re-cycle all your open connections |
|---|
| 418 |
after the event! </para></warning> |
|---|
| 419 |
|
|---|
| 420 |
<para> Les connexions <quote>se renouvellent</quote> ou se rapportent à OIDs qui sont |
|---|
| 421 |
tuées lors du lancement du script de désinstallation. Et vous obtiendrez |
|---|
| 422 |
un bon nombre d'erreurs en conséquence |
|---|
| 423 |
|
|---|
| 424 |
</para> |
|---|
| 425 |
|
|---|
| 426 |
</question> |
|---|
| 427 |
|
|---|
| 428 |
<answer><para> Il y a deux sections notables de |
|---|
| 429 |
&postgres; qui sont la mise en cache des plans d'interrogation et les OIDs:</para> |
|---|
| 430 |
<itemizedlist> |
|---|
| 431 |
<listitem><para> Préparer la requête</para></listitem> |
|---|
| 432 |
<listitem><para> Les fonctions pl/pgSQL </para></listitem> |
|---|
| 433 |
</itemizedlist> |
|---|
| 434 |
|
|---|
| 435 |
<para> En particulier le problÚme n'est pas que sous &slony1; en un; |
|---|
| 436 |
se produirait quand de telles modifications importantes sont apportées aux fondements de base |
|---|
| 437 |
de données. Il n'est pas imaginable que cela mÚne à perdre des données, mais de se voir confronté |
|---|
| 438 |
à une vague d'erreur relatives à OID. |
|---|
| 439 |
</para></answer> |
|---|
| 440 |
|
|---|
| 441 |
<answer><para> Le problÚme arrive lorsque vous utilisez une sorte de |
|---|
| 442 |
<quote>pool de connexion</quote> qui essaie de les reconnecter à la fin. |
|---|
| 443 |
Si vous remettez l'application en route aprÚs ceci, des nouvelles connexions |
|---|
| 444 |
sont générées avec un <emphasis>nouveau</emphasis>plan d'interrogation, et qui |
|---|
| 445 |
font disparaître les erreurs. Si votre pool de connexion tue les sessions, et en recrée de nouvelle, |
|---|
| 446 |
alors ces nouvelles session auront de <emphasis>nouveau</emphasis> plan d'exécution, et |
|---|
| 447 |
que les erreurs vont disparaître. </para></answer> |
|---|
| 448 |
|
|---|
| 449 |
En notre code nous laissons tomber le raccordement sur n'importe quelle |
|---|
| 450 |
erreur nous ne peut pas tracer à un état prévu. Ceci réutiliserait par la |
|---|
| 451 |
suite tous les raccordements sur de tels problÚmes inattendus aprÚs juste une |
|---|
| 452 |
erreur par raccordement. Naturellement si l'erreur apprête car une violation de |
|---|
| 453 |
contrainte qui est un état identifié, ce won' ; l'aide de t l'un ou l'autre, et |
|---|
| 454 |
si le problÚme est persistant, les raccordements maintiendra réutiliser qui |
|---|
| 455 |
laisseront tomber l'effet de la mise en commun, dans le dernier cas que |
|---|
| 456 |
le code de mise en commun pourrait également annoncer un Admin. pour jeter |
|---|
| 457 |
un coup d'oeil |
|---|
| 458 |
|
|---|
| 459 |
|
|---|
| 460 |
<answer> <para> Dans notre code nous éliminons toutes connexions ayant des erreurs inattendues dans |
|---|
| 461 |
le contexte. Ceci dit, les convexions devront être rétablis à la fin de chaque telle erreur |
|---|
| 462 |
inattendues, Ã raison d'une erreur par connexion. Naturellement si l'erreur remonte une violation de contrainte, |
|---|
| 463 |
qui est une condition reconnue, ne peut aider la situation, et si le problÚme persiste, les connexions sont restaurées, |
|---|
| 464 |
qui aura pour effet de casser l'effet de pool, dans ce dernier cas, l'administrateur aura à jeter |
|---|
| 465 |
un coup d'oeil sur le code. </para> </answer> |
|---|
| 466 |
|
|---|
| 467 |
</qandaentry> |
|---|
| 468 |
|
|---|
| 469 |
<qandaentry><question><para> J'ai migré mon &slony1; en version |
|---|
| 470 |
1.2. J'ai maintenant cet avertissement dans les logs:</para> |
|---|
| 471 |
|
|---|
| 472 |
<screen>NOTICE: Slony-I: log switch to sl_log_2 still in progress - sl_log_1 not truncated</screen> |
|---|
| 473 |
|
|---|
| 474 |
<para> Les deux <envar>sl_log_1</envar> et <envar>sl_log_2</envar> continue de prendre du volume, |
|---|
| 475 |
et <envar>sl_log_1</envar> n'est jamais remis à zéro. |
|---|
| 476 |
Quel est le souci? |
|---|
| 477 |
</para> </question> |
|---|
| 478 |
|
|---|
| 479 |
<answer><para> Ceci est un cas symptomatique et similaire au précÚdent, |
|---|
| 480 |
relatif à la suppression de réplication : s'il y a des connexions établies, s'attardant à utiliser des plan d'exécutions |
|---|
| 481 |
basés sur des vieilles fonctions stockées, donne par conséquence une écriture dans |
|---|
| 482 |
<envar>sl_log_1</envar> </para> |
|---|
| 483 |
|
|---|
| 484 |
<para> La fermeture des vieilles et l'ouverture des nouvelles connexions, résous ce problÚme.</para> </answer> |
|---|
| 485 |
|
|---|
| 486 |
<answer> <para> En d'autre terme, la présence d'un ordre dans la liste d'attente de &postgres; |
|---|
| 487 |
pour implémenter des dépendances, aura pour effet de descendre les plans d'exécution, lorsque cette dépendance |
|---|
| 488 |
joue sur l'objet qui change. </para> </answer> |
|---|
| 489 |
</qandaentry> |
|---|
| 490 |
|
|---|
| 491 |
<qandaentry> |
|---|
| 492 |
<question><para>J'ai pointé un noeud de souscription à un fournisseur différent, et il a cessé |
|---|
| 493 |
la réplication.</para></question> |
|---|
| 494 |
|
|---|
| 495 |
<answer><para> |
|---|
| 496 |
Nous rappelons que ceci arrive lorsque nous souhaitons initialiser un noeud où |
|---|
| 497 |
nous avons la configuration suivante: |
|---|
| 498 |
|
|---|
| 499 |
<itemizedlist> |
|---|
| 500 |
<listitem><para> Node 1 - fournisseur</para></listitem> |
|---|
| 501 |
<listitem><para> Node 2 - s'enregistrer au noeud 1 - le noeud que nous avons réinitialisé</para></listitem> |
|---|
| 502 |
<listitem><para> Node 3 - s'enregistrer au noeud 3 - le noeud qui doit répliquer</para></listitem> |
|---|
| 503 |
</itemizedlist></para> |
|---|
| 504 |
|
|---|
| 505 |
<para>L'abonnement pour le noeud 3 a changé dans le sens d'avoir |
|---|
| 506 |
le noeud 3 comme fournisseur, et on a fait<xref linkend="stmtdropset"/> /<xref |
|---|
| 507 |
linkend="stmtsubscribeset"/> pour le noeud 2 pour qu'il soit rechargé.</para> |
|---|
| 508 |
|
|---|
| 509 |
<para>Malencontreusement, la réplication a été arrêtée soudainement sur le noeud 3.</para> |
|---|
| 510 |
|
|---|
| 511 |
<para>Le problÚme était qu'il n'y avait pas un ensemble approprié de |
|---|
| 512 |
<quote>ports d'écoute</quote> dans <xref linkend="table.sl-listen"/> pour permettre aux évÚnements |
|---|
| 513 |
depuis le noeud 1 de se propager sur le 3. Les événements vont se reporter aux noeuds 2 et bloquent ainsi |
|---|
| 514 |
derriÚre l'évÚnement <xref linkend="stmtsubscribeset"/> que le noeud 2 est en train de traiter.</para> |
|---|
| 515 |
|
|---|
| 516 |
<para>Le port d'écoute a lâché le script suivant de slonik où le noeud 3 aurait dû, en passant par le noeud 2 |
|---|
| 517 |
de l'ajouter directement en ports d'écoute entre les deux noeuds 1 et 3. |
|---|
| 518 |
|
|---|
| 519 |
<programlisting> |
|---|
| 520 |
cluster name = oxrslive; |
|---|
| 521 |
node 1 admin conninfo='host=32.85.68.220 dbname=oxrslive user=postgres port=5432'; |
|---|
| 522 |
node 2 admin conninfo='host=32.85.68.216 dbname=oxrslive user=postgres port=5432'; |
|---|
| 523 |
node 3 admin conninfo='host=32.85.68.244 dbname=oxrslive user=postgres port=5432'; |
|---|
| 524 |
node 4 admin conninfo='host=10.28.103.132 dbname=oxrslive user=postgres port=5432'; |
|---|
| 525 |
try { |
|---|
| 526 |
store listen (origin = 1, receiver = 3, provider = 1); |
|---|
| 527 |
store listen (origin = 3, receiver = 1, provider = 3); |
|---|
| 528 |
drop listen (origin = 1, receiver = 3, provider = 2); |
|---|
| 529 |
drop listen (origin = 3, receiver = 1, provider = 2); |
|---|
| 530 |
} |
|---|
| 531 |
</programlisting></para> |
|---|
| 532 |
|
|---|
| 533 |
<para>Juste aprÚs que ce script a été terminé, les événements de <command>SYNC</command> ont commencé à |
|---|
| 534 |
propager encore sur le noeud 3. |
|---|
| 535 |
|
|---|
| 536 |
Ceci précise deux principes: |
|---|
| 537 |
<itemizedlist> |
|---|
| 538 |
<listitem><para> |
|---|
| 539 |
Si vous avez des noeuds multiples, et des abonnés en cascade, |
|---|
| 540 |
vous devez faire attention en repeuplant les entrés <xref |
|---|
| 541 |
linkend="stmtstorelisten"/>, et en modifiant leur structures de l'<quote>arbre</quote>de changement |
|---|
| 542 |
de réplication.</para></listitem> |
|---|
| 543 |
|
|---|
| 544 |
<listitem><para> La version 1.1 fourni des meilleurs outils pour gérer ce cas.</para> |
|---|
| 545 |
</listitem> |
|---|
| 546 |
|
|---|
| 547 |
</itemizedlist></para> |
|---|
| 548 |
|
|---|
| 549 |
<para>Les problÚmes relatifs aux <quote>chemins d'écoute</quote> sont discutés |
|---|
| 550 |
plus bas au <xref linkend="listenpaths"/> </para></answer> |
|---|
| 551 |
</qandaentry> |
|---|
| 552 |
|
|---|
| 553 |
<qandaentry id="multipleslonconnections"> |
|---|
| 554 |
|
|---|
| 555 |
<question><para> En redémarrant &lslon;, j'obtiens |
|---|
| 556 |
le message suivant <quote>FATAL</quote> dans le log. Que se passe-t-il??? </para> |
|---|
| 557 |
<screen> |
|---|
| 558 |
2006-03-29 16:01:34 UTC CONFIG main: slon version 1.2.0 starting up |
|---|
| 559 |
2006-03-29 16:01:34 UTC DEBUG2 slon: watchdog process started |
|---|
| 560 |
2006-03-29 16:01:34 UTC DEBUG2 slon: watchdog ready - pid = 28326 |
|---|
| 561 |
2006-03-29 16:01:34 UTC DEBUG2 slon: worker process created - pid = 28327 |
|---|
| 562 |
2006-03-29 16:01:34 UTC CONFIG main: local node id = 1 |
|---|
| 563 |
2006-03-29 16:01:34 UTC DEBUG2 main: main process started |
|---|
| 564 |
2006-03-29 16:01:34 UTC CONFIG main: launching sched_start_mainloop |
|---|
| 565 |
2006-03-29 16:01:34 UTC CONFIG main: loading current cluster configuration |
|---|
| 566 |
2006-03-29 16:01:34 UTC CONFIG storeSet: set_id=1 set_origin=1 set_comment='test set' |
|---|
| 567 |
2006-03-29 16:01:34 UTC DEBUG2 sched_wakeup_node(): no_id=1 (0 threads + worker signaled) |
|---|
| 568 |
2006-03-29 16:01:34 UTC DEBUG2 main: last local event sequence = 7 |
|---|
| 569 |
2006-03-29 16:01:34 UTC CONFIG main: configuration complete - starting threads |
|---|
| 570 |
2006-03-29 16:01:34 UTC DEBUG1 localListenThread: thread starts |
|---|
| 571 |
2006-03-29 16:01:34 UTC FATAL localListenThread: "select "_test1538".cleanupNodelock(); insert into "_test1538".sl_nodelock values ( 1, 0, "pg_catalog".pg_backend_pid()); " - ERROR: duplicate key violates unique constraint "sl_nodelock-pkey" |
|---|
| 572 |
|
|---|
| 573 |
2006-03-29 16:01:34 UTC FATAL Do you already have a slon running against this node? |
|---|
| 574 |
2006-03-29 16:01:34 UTC FATAL Or perhaps a residual idle backend connection from a dead slon? |
|---|
| 575 |
</screen> |
|---|
| 576 |
|
|---|
| 577 |
</question> |
|---|
| 578 |
|
|---|
| 579 |
<answer><para> La table <envar>sl_nodelock</envar> est utilisée comme un |
|---|
| 580 |
<quote>enclencheur</quote>pour prévenir que les deux process &lslon; essaient de prendre |
|---|
| 581 |
la gestion du même noeud en même temps. Le &lslon; essais d'insérer |
|---|
| 582 |
un enregistrement dans la table; seulement il peut le faire avec succÚs que |
|---|
| 583 |
si il est le seul à gérer le noeud. </para></answer> |
|---|
| 584 |
|
|---|
| 585 |
<answer><para> Ce message d'erreur est typiquement un signe que vous avez démarrez |
|---|
| 586 |
un second process &lslon; pour un noeud donné. Le &lslon;pose la question évidente qui est : |
|---|
| 587 |
<quote>Avez vous déjà un a slon démarré pour gérer ce noeud?</quote> </para></answer> |
|---|
| 588 |
|
|---|
| 589 |
Vous supposant éprouver une certaine sorte de panne de réseau, le raccordement |
|---|
| 590 |
entre le &lslon; et la base de données peut échouer, et le &lslon; peut |
|---|
| 591 |
figurer ceci dehors longtemps avant le &postgres; exemple il était relié fait. |
|---|
| 592 |
Le résultat est qu'il y aura un certain nombre de les raccordements à vide sont partis sur |
|---|
| 593 |
le serveur de base de données, qui won' ; t soit fermé jusqu'aux temps morts de TCP/IP complets, |
|---|
| 594 |
qui semble prendre normalement environ deux heures. Pour cette période de deux heures, le &lslon; |
|---|
| 595 |
essayera de se relier, Ã plusieurs reprises, et recevra le message mortel ci-dessus, plus d'et au-dessus de. |
|---|
| 596 |
|
|---|
| 597 |
<answer><para> Vous supposant éprouver une certaine sorte de panne de réseau, |
|---|
| 598 |
les connections entre &lslon; et la base de données peuvent échouer, et &lslon; |
|---|
| 599 |
peut avertir cela bien avant l'instance de &postgres; il était connecté pour ce faire. |
|---|
| 600 |
La conséquence en est qu'un certain nombre de connexion pré-établie vont s'ouvrir su la base de données |
|---|
| 601 |
et qui ne vont pas se terminer jusqu'à ce que le timeout de TCP/IP arrive à échéance, chose qui n'arrive que |
|---|
| 602 |
tous les deux heures. Durant cette période de deux heures, le &lslon; va essayer de se reconnecter, |
|---|
| 603 |
encore et encore, et obtient le message d'erreur ci-dessous réputé Fatl. </para> |
|---|
| 604 |
|
|---|
| 605 |
<para> Un administrateur peut mettre fin à cette situation en se connectant sur |
|---|
| 606 |
le serveur et en lançant <command>kill -2</command> pour terminer les connexions mourantes. |
|---|
| 607 |
Malheureusement , puisque le problÚme a eu lieu dans couche de gestion de réseau,ni &postgres; ni &slony1; |
|---|
| 608 |
a le moyen direct de détecter ceci. </para> |
|---|
| 609 |
|
|---|
| 610 |
<para> Vous pouvez <emphasis>la plupart</emphasis> des cas éviter ceci en s'assurant |
|---|
| 611 |
que le process &lslon; est hébergé quelque part prÚs des serveurs qu'il gÚre. Si le &lslon; |
|---|
| 612 |
est hébergé sur le même serveur que la base de donnée qu'il gÚre, alors |
|---|
| 613 |
toute <quote>panne de réseau</quote> qui peut interrompre les connexions |
|---|
| 614 |
seraient susceptibles d'être assez sérieux pour menacer le serveur entier. </para></answer> |
|---|
| 615 |
</qandaentry> |
|---|
| 616 |
|
|---|
| 617 |
|
|---|
| 618 |
<qandaentry> |
|---|
| 619 |
<question><para> Quand est-ce que je peux arrêter les process &lslon;?</para></question> |
|---|
| 620 |
|
|---|
| 621 |
<answer><para> Généralement ce n'est pas un grand compromis pour arrêter les processes &lslon; |
|---|
| 622 |
Chacun d'eux est un <quote>simplement</quote> un client de &postgres;, |
|---|
| 623 |
gérant chacun un noeud, qui engendre des fils pour gérer et recevoir des évÚnements |
|---|
| 624 |
depuis d'autre noeud. </para> |
|---|
| 625 |
|
|---|
| 626 |
<para>L'<quote>évÚnement d'écoute</quote> des serveurs n'est pas un travail sorcier; ils n'ont |
|---|
| 627 |
rien à faire que de temps en temps de tester le noeud distant pour déterminer si sur le noeud en question, |
|---|
| 628 |
il y a des tâches à faire. Si vous tuer le process &lslon; sa surveillance sera fermée, qui doit avoir peu |
|---|
| 629 |
ou pas du tout d'impact sur rien peut-être. Les éventements générés pour un &lslon; en arrêt reprendront |
|---|
| 630 |
lors de son redémarrage.</para> |
|---|
| 631 |
|
|---|
| 632 |
<para> La<quote>gestion des noeuds</quote> est un peu plus intéressant; |
|---|
| 633 |
la plupart du temps , vous pouvez prévoir, sur un abonné, pour son fil |
|---|
| 634 |
d'exécuter l'évÚnement<command>SYNC</command>. Si vous arrêtez |
|---|
| 635 |
le &lslon; durant un évÚnement, la transaction va échouer, et s'annuler, alors lorsque the &lslon; |
|---|
| 636 |
redémarre, il aura de reprendre l'évÚnement pour l'exécuter.</para> |
|---|
| 637 |
|
|---|
| 638 |
<para> L'unique situation où cela peut arriver est |
|---|
| 639 |
<emphasis>particuliÚrement</emphasis> <quote>l'arrêt de coeur</quote> si |
|---|
| 640 |
l'évÚnement qui vient de s'achever était un traitement de longue durée comme, |
|---|
| 641 |
<command>COPY_SET</command> pour une large réplication.</para> |
|---|
| 642 |
|
|---|
| 643 |
<para>L'autre chose qui <emphasis>pourrait</emphasis> causer l'ennui est |
|---|
| 644 |
si &lslon; travaille sur un noeud distant auxquels il est connecté; |
|---|
| 645 |
vous pouvez découvrir que les sessions de la base de données sont laissées <command>disponible en transaction</command>. |
|---|
| 646 |
Ceci peut normalement arriver si les connexions réseaux sont supprimées sans que &lslon; ni la base en ait pris connaissance |
|---|
| 647 |
.Dans ce cas vous pouvez découvrir que des connexions <quote>zombies</quote> traînent encore durant deux long heures |
|---|
| 648 |
si vous n'y aller pas à la main pour leur mettre fin dans &postgres; |
|---|
| 649 |
backends.</para> |
|---|
| 650 |
|
|---|
| 651 |
Il y a un autre cas qui pourrait causer l'ennui ; quand &lslon; |
|---|
| 652 |
la gestion du noeud d'origine ne fonctionne pas, événement de synchro |
|---|
| 653 |
ne fonctionne pas contre ce noeud. Si &lslon; les séjours vers le bas |
|---|
| 654 |
pendant une période prolongée, et quelque chose aiment isn' ; fonctionnement |
|---|
| 655 |
de t, vous pourriez être laissé avec une grande synchro au processus quand il |
|---|
| 656 |
vient support. Mais c'est seulement un souci si ce &lslon; est vers le bas |
|---|
| 657 |
pendant une période prolongée ; le fermant pour uns seconde shouldn' ; cause |
|---|
| 658 |
de t tout grand problÚme. |
|---|
| 659 |
|
|---|
| 660 |
|
|---|
| 661 |
<para> Il y a un autre cas qui pourrait causer l'ennui; quand |
|---|
| 662 |
&lslon; administrant son noeud d'attachement n'est pas en cours d'exécution |
|---|
| 663 |
,aucun évÚnement <command>SYNC</command> s'exécute sur ce même serveur. Si le &lslon; |
|---|
| 664 |
arrêté pour une longue durée, et que quelques chose du genre <xref linkend="gensync"/> n'est pas encours, |
|---|
| 665 |
vous pouvez vous retrouvez avec <emphasis>un énorme<command>SYNC</command></emphasis> à effectuer |
|---|
| 666 |
lorsque vous vous apprêtez à réaliser une sauvegarde. Ceci est vrai seulement si &lslon; est en arrêt pendant une période |
|---|
| 667 |
assez longue; alors que un arrêt de quelques seconds ne génÚre pas de problÚme.</para> </answer> |
|---|
| 668 |
</qandaentry> |
|---|
| 669 |
|
|---|
| 670 |
<qandaentry> |
|---|
| 671 |
<question><para> Y a-t-il des risques pour ce faire ? Quels en sont les avantages ?</para></question> |
|---|
| 672 |
|
|---|
| 673 |
<answer><para> En bref, si votre <command>COPY_SET</command> prend environ 18h pour s'exécuter |
|---|
| 674 |
finalement, ce n'est pas un grand sacrifice d'arrêter quelques moments un &lslon; |
|---|
| 675 |
ou peut-être même durant un cycle<emphasis>all</emphasis> de &lslon;s. </para> </answer> |
|---|
| 676 |
</qandaentry> |
|---|
| 677 |
|
|---|
| 678 |
</qandadiv> |
|---|
| 679 |
|
|---|
| 680 |
<qandadiv id="faqconfiguration"> <title> &slony1; FAQ: ProblÚmes de configuration </title> |
|---|
| 681 |
<qandaentry> |
|---|
| 682 |
<question><para>Slonik tombe en erreur - ne peut pas charger les librairies &postgres; - |
|---|
| 683 |
<command>PGRES_FATAL_ERROR load '$libdir/xxid';</command></para> |
|---|
| 684 |
|
|---|
| 685 |
<para> Lorsque j'exécute un simple script de configuration, j'obtiens un message similaire à |
|---|
| 686 |
: |
|---|
| 687 |
|
|---|
| 688 |
<command> |
|---|
| 689 |
stdin:64: PGRES_FATAL_ERROR load '$libdir/xxid'; - ERROR: LOAD: |
|---|
| 690 |
could not open file '$libdir/xxid': No such file or directory |
|---|
| 691 |
</command></para></question> |
|---|
| 692 |
|
|---|
| 693 |
<answer><para> Evidemment, vous n'avez pas accÚs à la librairie |
|---|
| 694 |
<filename>xxid.so</filename> dans le répertoire <envar>$libdir</envar> |
|---|
| 695 |
où l'instance &postgres; est en usage. Notez que le composant &slony1;doit être installé sur le noyau du &postgres; |
|---|
| 696 |
pour <emphasis>chacun des noeud</emphasis> et pas seulement sur le noeud d'origine.</para> |
|---|
| 697 |
|
|---|
| 698 |
<para>Cela peut également venir du fait d'une disparité entre les binaires |
|---|
| 699 |
du noyau &postgres; et celui du noyau de &slony1;. Si vous avez manuellement compilé &slony1; |
|---|
| 700 |
vous même, sur une machine où il y a plusieurs noyau de |
|---|
| 701 |
&postgres; <quote>se trouvant autour,</quote> il est possible |
|---|
| 702 |
que les binaires slon ou lslonik demande de charger une librairie qui n'est pas accessible |
|---|
| 703 |
actuellement dans les répertoires du noyau de &postgres; gérant le cluster.</para> |
|---|
| 704 |
|
|---|
| 705 |
<para>Court et concis: Ceci indique un besoin de <quote>auditer</quote> |
|---|
| 706 |
quel mode d'installation de &postgres; et de &slony1; vous avez en place sur vos machines. |
|---|
| 707 |
Malheureusement,n'importe quelle incompatibilité peut faire remonter ce genre |
|---|
| 708 |
de soucis. Voir aussi<link linkend="threadsafety"> |
|---|
| 709 |
sécurité des thread </link> à propos de la gestion des thread sur Solaris. |
|---|
| 710 |
...</para> |
|---|
| 711 |
|
|---|
| 712 |
<para> La situation sera plus simple si vous aviez un seul noyau de &postgres; installé par serveur |
|---|
| 713 |
dans ce cas il n'y aura pas d' <quote>incompatibilité |
|---|
| 714 |
de chemins</quote> dans lequel les composants de &slony1; sont installés.</para> |
|---|
| 715 |
Si vous avez une installation multiple, |
|---|
| 716 |
vous devrez vous assurez de la compatibilité de la bonne |
|---|
| 717 |
versions de &slony1; associé à la bonne version du noyau de |
|---|
| 718 |
&postgres;. </answer></qandaentry> |
|---|
| 719 |
|
|---|
| 720 |
<qandaentry> |
|---|
| 721 |
<question> <para>J'essai de créer un cluster dont le nom contient un "-". |
|---|
| 722 |
Cela ne marche pas!.</para></question> |
|---|
| 723 |
|
|---|
| 724 |
<answer><para> &slony1; Utilise les même rÚgles de nommage que &postgres; |
|---|
| 725 |
alors confirmation, il ne faudra pas utiliser un "-" |
|---|
| 726 |
dans le nom.</para> |
|---|
| 727 |
|
|---|
| 728 |
<para> Vous pouvez tenter de mettre des simples <quote>quotes</quote> pour l'identifiant |
|---|
| 729 |
,mais vous allez vous exposer à des soucis, qui pourront surgir à tout moment.</para> |
|---|
| 730 |
</answer> |
|---|
| 731 |
</qandaentry> |
|---|
| 732 |
|
|---|
| 733 |
<qandaentry> |
|---|
| 734 |
<question><para>La commande ps affiche le mot de passe en claire</para> |
|---|
| 735 |
|
|---|
| 736 |
<para> Si je lance une commande <command>ps</command>, tout le monde, |
|---|
| 737 |
peut voir le mot de passe qui a été fourni à la ligne de commande.</para></question> |
|---|
| 738 |
|
|---|
| 739 |
<answer> <para>Conservez vous mot de passe en dehors de la configuration Slony, en les mettant dans |
|---|
| 740 |
des fichiers <filename>$(HOME)/.pgpass.</filename></para> |
|---|
| 741 |
</answer></qandaentry> |
|---|
| 742 |
|
|---|
| 743 |
<qandaentry> |
|---|
| 744 |
<question><para>Sommaire de questions posées sur namespace |
|---|
| 745 |
|
|---|
| 746 |
<programlisting> |
|---|
| 747 |
set add table (set id = 1, origin = 1, id = 27, |
|---|
| 748 |
full qualified name = 'nspace.some_table', |
|---|
| 749 |
key = 'key_on_whatever', |
|---|
| 750 |
comment = 'Table some_table in namespace nspace with a candidate primary key'); |
|---|
| 751 |
</programlisting></para></question> |
|---|
| 752 |
|
|---|
| 753 |
<answer><para> Si vous avez <command> key = |
|---|
| 754 |
'nspace.key_on_whatever'</command> la demande |
|---|
| 755 |
<emphasis>echoura</emphasis>.</para> |
|---|
| 756 |
</answer></qandaentry> |
|---|
| 757 |
|
|---|
| 758 |
<qandaentry> |
|---|
| 759 |
<question> <para> La réplication a été retardée, et il semble que les interrogations pour restituer des données |
|---|
| 760 |
depuis <xref linkend="table.sl-log-1"/>/<xref |
|---|
| 761 |
linkend="table.sl-log-2"/> prennent beaucoup de temps en indiquant quelques demande de |
|---|
| 762 |
<command>SYNC</command>s. </para> |
|---|
| 763 |
</question> |
|---|
| 764 |
|
|---|
| 765 |
<answer> <para> Jusqu'Ã la version 1.1.1, la table <xref |
|---|
| 766 |
linkend="table.sl-log-1"/>/<xref linkend="table.sl-log-2"/>,possédait seulement un index, et si plusieurs jeu de réplication |
|---|
| 767 |
se mettaient en route en même temps, quelques colonnes dans l'indexe n'était pas trÚs discriminent pour la maniÚre d'accÚs. |
|---|
| 768 |
Si l'index ne contient pas la colonne<function> log_xid</function>, il est conseillé de l'ajouter. Voir le script |
|---|
| 769 |
<filename>slony1_base.sql</filename> pour regarder la maniÚre de créer un indexe. |
|---|
| 770 |
</para> |
|---|
| 771 |
</answer> |
|---|
| 772 |
</qandaentry> |
|---|
| 773 |
|
|---|
| 774 |
<qandaentry><question> <para> J'ai besoin de renommer une colonne qui figure dans la clef |
|---|
| 775 |
primaire pour l'une de mes tables répliquées. L'opération s'avÚre un peu dangereuse, est-ce vrai ? |
|---|
| 776 |
Aurai-je à la recréer en dehors de la réplication ?</para> |
|---|
| 777 |
</question> |
|---|
| 778 |
|
|---|
| 779 |
<answer><para> Affirmatif, c'est un scénario qui fonctionne proprement. &slony1; fait un usage intensif de |
|---|
| 780 |
clef primaire, mais actuellement c'est ainsi et on espÚre une gestion intégrée et transparente prochainement</para>. |
|---|
| 781 |
|
|---|
| 782 |
<para> Supposez que vous souhaiter renommer une colonne, comme dans uns script sql, on utiliserais la |
|---|
| 783 |
commande DDL suivante<command> alter table accounts alter column aid rename to cid; </command> Ceci |
|---|
| 784 |
permet de renommer la colonne dans la table; elle permet de maniÚre |
|---|
| 785 |
<emphasis>transparente</emphasis> de effectuer la mise à jour dans clef primaire qui contient la colonne en question. |
|---|
| 786 |
Le résultat est que ce genre de changement s'effectue simultanément sur les différents composants, du noeud.</para> |
|---|
| 787 |
|
|---|
| 788 |
<para> Dans l' <emphasis>ideal</emphasis> et pour bien faire les choses |
|---|
| 789 |
il aurait fallu utiliser <xref linkend="stmtddlscript"/> pour déployer la modification |
|---|
| 790 |
en étant sur que le bon changement s'applique aux bons noeuds.</para> |
|---|
| 791 |
|
|---|
| 792 |
<para> Pour la clarté des choses, tant que la modification commence par la partie répliquée et bien avant les abonnés, |
|---|
| 793 |
il n'y aura pas de cassure irrémédiable. Se retrouver avec quelques évÚnements de |
|---|
| 794 |
<command>SYNC</command> qui n'incluent pas la table sur laquelle il y a la modification, n'est pas un problÚme car ils vont se dérouler |
|---|
| 795 |
sans difficulté... Par contre si le changement est signalé d'abord par un abonné, alors |
|---|
| 796 |
point that the first update to the table is drawn in by a subscriber, |
|---|
| 797 |
<emphasis>ce</emphasis> sera le point de départ pour que |
|---|
| 798 |
<command>SYNC</command> tombe en erreur, puisque le fournisseur indiquera une |
|---|
| 799 |
<quote>nouvelle</quote> colonne alors que l'abonné connait toujours |
|---|
| 800 |
ses <quote>anciens</quote> formats. En appliquant la modification à postériori chez l'abonné, la commande |
|---|
| 801 |
<command>SYNC</command>, peut retrouver le |
|---|
| 802 |
<quote>nouveau</quote> nom de colonne et fonctionner sans plantage . |
|---|
| 803 |
</para> </answer></qandaentry> |
|---|
| 804 |
|
|---|
| 805 |
<qandaentry id="v72upgrade"> |
|---|
| 806 |
<question> <para> J'ai un &postgres; version 7.2 que je souhaite |
|---|
| 807 |
<emphasis>vraiment, vraiment</emphasis> employer avec &slony1; Que faut-il faire pour une migration en |
|---|
| 808 |
version 8.2 ? Quel est l'implication pour récupérer &slony1; afin de les exploiter ensemble?</para> |
|---|
| 809 |
</question> |
|---|
| 810 |
|
|---|
| 811 |
<answer> <para> Voici l'écrit d'un certain Rod Taylor sur le sujet ... |
|---|
| 812 |
</para> |
|---|
| 813 |
|
|---|
| 814 |
<para> Voici ce dont approximativement vous avez besoin:</para> |
|---|
| 815 |
<itemizedlist> |
|---|
| 816 |
<listitem><para>Prendre les formulaire 7.3 et de mes copier en 7.2 -- ou bien de |
|---|
| 817 |
mettre en dur 7.3 dans vos formulaire </para></listitem> |
|---|
| 818 |
<listitem><para>Supprimer toute trace de schémas dans le code sql de vos formulaires. |
|---|
| 819 |
Sommairement je remplace "." par "-". </para></listitem> |
|---|
| 820 |
<listitem><para> Le bloc de travail relatif aux models de données XID ainsi quÂaux fonctions. |
|---|
| 821 |
Par exemple, Slony crée des CASTs pour the xid en xxid et vice versa -- mais |
|---|
| 822 |
la 7.2 ne peut pas crée de nouveau casts et dans ce cas vous êtes obligé de le modifier à la main. |
|---|
| 823 |
Je rappelle la création d'une classe d'opérateur ainsi que l'édition de certaines fonctions. </para></listitem> |
|---|
| 824 |
<listitem><para>sl_log_1 aura de grave problÚme de performance quelque soit le volume de données. |
|---|
| 825 |
Ceci exige qu'un certain nombre d'indexe soient positionnés pour optimiser les interrogations en 7.2. 7.3 |
|---|
| 826 |
et supérieur. </para></listitem> |
|---|
| 827 |
<listitem><para> Ne pas s' embeter à essayer de travailler en séquence. Faites les à la main |
|---|
| 828 |
en utilisant pg_dump et grep. </para></listitem> |
|---|
| 829 |
</itemizedlist> |
|---|
| 830 |
<para> Bien sûr, une fois que ces pre-requis terminés, on n'est pas encore compatible avec |
|---|
| 831 |
le Slony standard. Ainsi ou bien, vous devez au moins implémenter la 7.2 de maniÚre artisanale |
|---|
| 832 |
du moins, forcer slony à travailler sans les schémas dans la nouvelle version versions de &postgres; |
|---|
| 833 |
ainsi le dialogue entre les deux peut être établi. |
|---|
| 834 |
</para> |
|---|
| 835 |
<para> Juste aprÚs le déroulement de la procédure de migration de 7.2 vers 7.4, |
|---|
| 836 |
on peut désinstaller la version bidouillée de Slony (à la main encore pour la majeur partie), et démarrer la migration |
|---|
| 837 |
de 7.2 à 7.4 sur les différentes machines en utilisant un Slony standard. |
|---|
| 838 |
Ceci permettant de s'assurer sur la fiabilité d'un catalogue systÚme qui avait subi des changement manuels. |
|---|
| 839 |
</para> |
|---|
| 840 |
|
|---|
| 841 |
<para> Tout cela pour dire, que nous migrons quelque centaine de GO de données, |
|---|
| 842 |
de 7.2 a 7.4 en espace de 30 minutes. (contre 48 heures auparavant annoncées myeneant un dump et |
|---|
| 843 |
restore) sans pertes de données. |
|---|
| 844 |
</para> |
|---|
| 845 |
</answer> |
|---|
| 846 |
|
|---|
| 847 |
<answer> <para> Ceci vous dresse un éventail assez laid qualifié de |
|---|
| 848 |
<quote>bidouille</quote> qu'il faut admettre entrer dans le périmÚtre de production. |
|---|
| 849 |
Si quelqu'un est intéressé pour le transformer en |
|---|
| 850 |
<quote>tâche de production</quote>, il y aura un sens dans ce cas de s'appuyer sur |
|---|
| 851 |
&slony1; en version 1.0, avec un maître mot de ne |
|---|
| 852 |
<emphasis>pas</emphasis> essayer de le rendre pérenne, étant donnée sa durée de vie limitée.</para> |
|---|
| 853 |
|
|---|
| 854 |
<para> Vous devriez seulement adapter cette solution que si vous êtes à l'aise avec |
|---|
| 855 |
&postgres; et &slony1; et que de mettre la main au code ne vous fait pas peur. </para> </answer> |
|---|
| 856 |
</qandaentry> |
|---|
| 857 |
|
|---|
| 858 |
<qandaentry> |
|---|
| 859 |
<question> <para> J'avais un réseau <quote>pas performant</quote> qui m'obligeais à utiliser |
|---|
| 860 |
<xref linkend="stmtfailover"/> un basculement sur un noeud secondaire. |
|---|
| 861 |
Le plantage n'était pas causé par un problÚme de corruption de donnée venant du disque, |
|---|
| 862 |
Pourquoi serais-je obligé de reconstruire depuis le début, le noeud planté ? </para></question> |
|---|
| 863 |
|
|---|
| 864 |
<answer><para> Le rÃŽle de <xref linkend="stmtfailover"/> est d' |
|---|
| 865 |
<emphasis>abandonner</emphasis> le noeud planté, et par conséquence il n'a plus de |
|---|
| 866 |
charge générée par l'activité de &slony1;. Plus le temps passe plus le serveur planté se désynchronise.</para></answer> |
|---|
| 867 |
|
|---|
| 868 |
<answer><para> L'<emphasis>énorme</emphasis> problÚme afin de restaurer le serveur planté, |
|---|
| 869 |
est qu'il peut contenir des mises à jours qui n'ont pas eu le temps de se propager endors. |
|---|
| 870 |
Vous ne pouvez pas non plus les rejouer, car elles vont être conflictuelles, car à moitié en place. |
|---|
| 871 |
En tout cas vous avez une sorte de corruption <quote>logique</quote>de donnée, qui n'est jamais causée par une erreur disque. |
|---|
| 872 |
dite <quote>physique.</quote> |
|---|
| 873 |
</para></answer> |
|---|
| 874 |
|
|---|
| 875 |
<answer><para> Comme cela a été abordé en <xref linkend="failover"/>, utiliser <xref |
|---|
| 876 |
linkend="stmtfailover"/> revient à accepter comme <emphasis>dernier |
|---|
| 877 |
ressort</emphasis> tant qu'il implique d'abandonner le noeud d'origine pour cette corruption.</para></answer> |
|---|
| 878 |
</qandaentry> |
|---|
| 879 |
|
|---|
| 880 |
|
|---|
| 881 |
<qandaentry> <question><para> AprÚs notification d'un abonnement sur un |
|---|
| 882 |
<emphasis>autre</emphasis> noeud, la réplication échoue sur l'un des abonnés, avec le message d'erreur suivant:</para> |
|---|
| 883 |
|
|---|
| 884 |
<screen> |
|---|
| 885 |
ERROR remoteWorkerThread_1: "begin transaction; set transaction isolation level serializable; lock table "_livesystem".sl_config_lock; select "_livesystem".enableSubscription(25506, 1, 501); notify "_livesystem_Event"; notify "_livesystem_Confirm"; insert into "_livesystem".sl_event (ev_origin, ev_seqno, ev_timestamp, ev_minxid, ev_maxxid, ev_xip, ev_type , ev_data1, ev_data2, ev_data3, ev_data4 ) values ('1', '4896546', '2005-01-23 16:08:55.037395', '1745281261', '1745281262', '', 'ENABLE_SUBSCRIPTION', '25506', '1', '501', 't'); insert into "_livesystem".sl_confirm (con_origin, con_received, con_seqno, con_timestamp) values (1, 4, '4896546', CURRENT_TIMESTAMP); commit transaction;" PGRES_FATAL_ERROR ERROR: insert or update on table "sl_subscribe" violates foreign key constraint "sl_subscribe-sl_path-ref" |
|---|
| 886 |
DETAIL: Key (sub_provider,sub_receiver)=(1,501) is not present in table "sl_path". |
|---|
| 887 |
</screen> |
|---|
| 888 |
|
|---|
| 889 |
<para> Par la suite l'erreur est suivie par un ensemble d'<xref |
|---|
| 890 |
linkend="slon"/> arrêt: de syncs:</para> |
|---|
| 891 |
|
|---|
| 892 |
<screen> |
|---|
| 893 |
DEBUG2 remoteListenThread_1: queue event 1,4897517 SYNC |
|---|
| 894 |
DEBUG2 remoteListenThread_1: queue event 1,4897518 SYNC |
|---|
| 895 |
DEBUG2 remoteListenThread_1: queue event 1,4897519 SYNC |
|---|
| 896 |
DEBUG2 remoteListenThread_1: queue event 1,4897520 SYNC |
|---|
| 897 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 898 |
DEBUG2 remoteListenThread_1: queue event 1,4897521 SYNC |
|---|
| 899 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 900 |
DEBUG2 remoteListenThread_1: queue event 1,4897522 SYNC |
|---|
| 901 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 902 |
DEBUG2 remoteListenThread_1: queue event 1,4897523 SYNC |
|---|
| 903 |
</screen> |
|---|
| 904 |
|
|---|
| 905 |
</question> |
|---|
| 906 |
|
|---|
| 907 |
<answer><para> Si vous regardez les journaux de &lslon; à l'arrêt avec des erreurs due à cet effet |
|---|
| 908 |
<emphasis>d'arrêt</emphasis>, vous auriez besoin de revenir en arriÚre en ignorant une partie de |
|---|
| 909 |
ces journalisation, |
|---|
| 910 |
<emphasis>en attendant</emphasis> aprÚs le redémarrage du serveur en erreur de trouver la cause d'origine.</para></answer> |
|---|
| 911 |
|
|---|
| 912 |
<answer><para> Dans ce cas particulier, l'erreur est due à la commande |
|---|
| 913 |
<xref linkend="stmtstorepath"/> qui n'est pas encore répercutée sur le noeud 4 en attendant la propagation |
|---|
| 914 |
de <xref linkend="stmtsubscribeset"/> command</para> |
|---|
| 915 |
|
|---|
| 916 |
<para>Ceci démontre encore un autre exemple où l'approximatif ne devra pas prendre le dessus, |
|---|
| 917 |
et que on doit avec assurance vérifier le bon fonctionnement des choses |
|---|
| 918 |
<emphasis>avant</emphasis> de suggérer un changement de la configuration. |
|---|
| 919 |
</para></answer> |
|---|
| 920 |
|
|---|
| 921 |
</qandaentry> |
|---|
| 922 |
|
|---|
| 923 |
<qandaentry> |
|---|
| 924 |
|
|---|
| 925 |
<question><para>J'ai juste utilisé <xref linkend="stmtmoveset"/> afin de déporter le noeud d'origine sur |
|---|
| 926 |
un nouveau serveur. Malheureusement certains abonnés sont toujours attachés à l'ancien noeud que je viens de migrer, |
|---|
| 927 |
or je ne peux les mettre hors service tant qu'il n'ont pas reçu le signalement de ce changement. |
|---|
| 928 |
Que puis-je faire? </para></question> |
|---|
| 929 |
|
|---|
| 930 |
<answer><para> Vous avez besoin d'utiliser <xref linkend="stmtsubscribeset"/> afin de modifier les abonnements |
|---|
| 931 |
de ces serveurs abonnés, que leurs fournisseur <emphasis>sera</emphasis> indisponible durant une période maintenance.</para> |
|---|
| 932 |
|
|---|
| 933 |
<warning> <para> Que vous avez <emphasis>omis</emphasis> de faire <xref |
|---|
| 934 |
linkend="stmtunsubscribeset"/>; pour que vous soyez obligé de recommencer à rafraîchir les noeuds depuis le début. |
|---|
| 935 |
|
|---|
| 936 |
</para></warning> |
|---|
| 937 |
</answer> |
|---|
| 938 |
</qandaentry> |
|---|
| 939 |
|
|---|
| 940 |
<qandaentry> |
|---|
| 941 |
<question><para> AprÚs la notification d'un abonnement auprÚs |
|---|
| 942 |
<emphasis>d'un autre</emphasis> serveur fournisseur, la réplication tombe en erreur, et commençant des messages d'erreurs |
|---|
| 943 |
avec :</para> |
|---|
| 944 |
|
|---|
| 945 |
<screen> |
|---|
| 946 |
ERROR remoteWorkerThread_1: "begin transaction; set transaction isolation level serializable; lock table "_livesystem".sl_config_lock; select "_livesystem".enableSubscription(25506, 1, 501); notify "_livesystem_Event"; notify "_livesystem_Confirm"; insert into "_livesystem".sl_event (ev_origin, ev_seqno, ev_timestamp, ev_minxid, ev_maxxid, ev_xip, ev_type , ev_data1, ev_data2, ev_data3, ev_data4 ) values ('1', '4896546', '2005-01-23 16:08:55.037395', '1745281261', '1745281262', '', 'ENABLE_SUBSCRIPTION', '25506', '1', '501', 't'); insert into "_livesystem".sl_confirm (con_origin, con_received, con_seqno, con_timestamp) values (1, 4, '4896546', CURRENT_TIMESTAMP); commit transaction;" PGRES_FATAL_ERROR ERROR: insert or update on table "sl_subscribe" violates foreign key constraint "sl_subscribe-sl_path-ref" |
|---|
| 947 |
DETAIL: Key (sub_provider,sub_receiver)=(1,501) is not present in table "sl_path". |
|---|
| 948 |
</screen> |
|---|
| 949 |
|
|---|
| 950 |
<para> Ceci est suivi plus tard par une série d'erreur de syncs puisque le <xref |
|---|
| 951 |
linkend="slon"/> est à l'arrêt: |
|---|
| 952 |
|
|---|
| 953 |
<screen> |
|---|
| 954 |
DEBUG2 remoteListenThread_1: queue event 1,4897517 SYNC |
|---|
| 955 |
DEBUG2 remoteListenThread_1: queue event 1,4897518 SYNC |
|---|
| 956 |
DEBUG2 remoteListenThread_1: queue event 1,4897519 SYNC |
|---|
| 957 |
DEBUG2 remoteListenThread_1: queue event 1,4897520 SYNC |
|---|
| 958 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 959 |
DEBUG2 remoteListenThread_1: queue event 1,4897521 SYNC |
|---|
| 960 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 961 |
DEBUG2 remoteListenThread_1: queue event 1,4897522 SYNC |
|---|
| 962 |
DEBUG2 remoteWorker_event: ignore new events due to shutdown |
|---|
| 963 |
DEBUG2 remoteListenThread_1: queue event 1,4897523 SYNC |
|---|
| 964 |
</screen> |
|---|
| 965 |
|
|---|
| 966 |
</para></question> |
|---|
| 967 |
|
|---|
| 968 |
<answer><para> Si lors d'un arrêt, vous voyez dans le journal d'un &lslon; |
|---|
| 969 |
<emphasis>des nouveaux évÚnements ignorés dus à l'arrêt</emphasis> , |
|---|
| 970 |
c'est le cas parlant où il faut revenir une étape en arriÚre |
|---|
| 971 |
<emphasis>avant</emphasis> l'arrêt pour voir l'origine de l'erreur. |
|---|
| 972 |
</para></answer> |
|---|
| 973 |
|
|---|
| 974 |
<answer><para> Dans ce cas particulier, le problÚme était que certain |
|---|
| 975 |
<xref linkend="stmtstorepath"/> commandes n'ont pas été transmises aux noeud 4 avant <xref linkend="stmtsubscribeset"/> |
|---|
| 976 |
la commande soit propagée. </para> |
|---|
| 977 |
|
|---|
| 978 |
<para>C'est encore un exemple où il ne faut pas hâtivement modifier les choses |
|---|
| 979 |
;vous devrez avec certitude, constater le disfonctionnement |
|---|
| 980 |
<emphasis>avant</emphasis> de faire de nouveau changement de configuration. |
|---|
| 981 |
</para></answer> |
|---|
| 982 |
|
|---|
| 983 |
</qandaentry> |
|---|
| 984 |
|
|---|
| 985 |
<qandaentry> |
|---|
| 986 |
<question> <para> Est-ce que dans une configuration globale, l'ordre dans lequel, on traite les tables |
|---|
| 987 |
est important ?</para> |
|---|
| 988 |
</question> |
|---|
| 989 |
<answer> <para> La plupart de temps il ne l'est pas. Vous devrez adapter un ordre selon lequel |
|---|
| 990 |
les tables <quote>maîtres</quote> sont mises à jour avant celles de <quote>détails</quote> |
|---|
| 991 |
en fonction de la relation de clef étrangÚre qui les relie; ceci ne sera <emphasis>pas exigé</emphasis> si sur le noeud abonné, |
|---|
| 992 |
on a pris le soin, de désactiver les déclencheurs. |
|---|
| 993 |
</para> |
|---|
| 994 |
</answer> |
|---|
| 995 |
|
|---|
| 996 |
<answer> <para>(Les commentaires de Jan Wieck:) L'ordre des ID des tables |
|---|
| 997 |
a une importance uniquement lors d'une opération de <xref linkend="stmtlockset"/> en préparation de basculement. |
|---|
| 998 |
Si l'ordre est différent de celui selon lequel les applications obtiennent des verrous, |
|---|
| 999 |
ces derniers peuvent se transformer en verrous mortels et par conséquent faire tomber l'application ou bien |
|---|
| 1000 |
<application>slon</application>. |
|---|
| 1001 |
</para> |
|---|
| 1002 |
<answer><para> (David Parker) Dans un autre cas, j'ai lancé l'opération où l'ordre des |
|---|
|
|---|