2011-04-15 3 views
2

Je configure le clustering pour deux tomcat en utilisant apache à l'avant et mod_jk en tant que connecteur. J'ai essayé une application de test pour vérifier la configuration et cela fonctionne bien. Les sessions sont répliquées avec succès et le basculement est détecté avec succès. Mais quand j'ai essayé ceci pour mon application réelle, cela ne fonctionne pas. J'ai fait la modification dans httpd.conf en conséquence et très attentivement. Il n'y a aucune exception, aucune erreur dans les journaux. Je suis incapable de suivre le problème. Initialement je recevais NotSerializableException pour des classes particulières et je les ai fait sérialisables. Maintenant, il n'y a pas d'exception mais je ne peux toujours pas charger l'application si l'hôte Tomcat est arrêté même si l'autre membre Tomcat du cluster est en vie. Pouvez-vous les gars s'il vous plaît aidez-moi. Je peux comprendre qu'il est assez difficile de produire la solution lorsque vous n'êtes pas sûr du problème.Le clustering ne fonctionne pas

Répondre

4

Vous avez donc 2 services, configurés de la même manière, sauf que l'un fonctionne correctement et l'autre pas?

Il existe une règle générale lorsque vous voyez quelque chose qui semble impossible. Et cette règle est que vous ne voyez pas ce que vous pensez voir. Fréquemment à cause de ce qu'on appelle en plaisantant PEBKAC (Problème existant entre le clavier et la chaise). Ce qui est vraiment frustrant, c'est que, aussi évident soit-il, vous pouvez le regarder 100 fois et ce ne sera pas évident parce que vous voyez ce que vous «savez» est là plutôt que ce qui est là. D'après mon expérience, il existe deux bonnes façons de résoudre ce genre de problème.

  1. Apportez-le à quelqu'un d'autre et demandez-lui de trouver ce que vous faites différemment. Étant donné qu'ils voient ce qui est là, et non ce que vous «savez» est là, ils verront souvent ce que vous ne pouvez pas. (Au cours du temps, vous pourrez peut-être retourner la faveur un jour.)
  2. Commencez avec la configuration de travail et celle qui ne fonctionne pas, et commencez à "bissecter" le chemin entre eux jusqu'à ce que vous obteniez une différence minime qui indique la différence entre le travail et le non-travail. Réduisez cette différence, et vous saurez quoi corriger, ou bien vous aurez un cas de test à donner à quelqu'un d'autre.

Les chances sont que vous devrez suivre la deuxième approche. Vous ne voulez probablement pas - je ne le fais jamais - mais c'est généralement moins douloureux que vous ne l'imaginez. Vous commencez par répliquer l'application complète sur un système de test et vous démontrez que vous avez le même échec. (Si ce n'est pas le cas, commencez à rechercher avec attention les différences entre la production et le test, notamment la version du système d'exploitation, les versions de la bibliothèque, etc.)

En supposant que vous ayez un système de test , sauvegardez cette configuration. Puis commencez à extraire de gros morceaux de votre application réelle que vous imaginez n'avoir rien à voir avec vos problèmes de configuration, en testant périodiquement que vous êtes sur la bonne voie. (Et économiser chaque fois que vous êtes.) Une fois que vous avez une application minimale, commencez à essayer de marcher vers l'application de test de travail. Quelque part, vous trouverez un changement qui fait la différence. Ça pourrait être n'importe où. Une fois que vous l'avez trouvé, vous savez généralement exactement comment réparer votre système de production. Ou si vous ne le faites pas, vous connaîtrez votre problème assez clairement.

Parfois, vous aurez trouvé un bug bizarre. Si oui, alors vous devriez commencer à essayer de tout simplifier autant que possible jusqu'à ce que vous ayez un bon rapport de bug à envoyer.

+0

@ Btilly, il n'y a rien de mal à la configuration parce que j'ai essayé ceci pour 2-3 applications de test et tout fonctionne bien, mais quand je suis essayer d'atteindre la même chose pour ma grande webapp cela ne fonctionne pas. Il y a peut-être quelque chose qui ne va pas dans la sécurité de l'application ou ailleurs que moi et mon équipe ne pouvons pas tracer. –

+0

@Kuri: Quelque part au fond de l'application, il se peut que vous mettiez en cache des choses dont vous n'êtes pas conscient.Par exemple, quelqu'un a écrit des choses dans des fichiers. Quoi qu'il en soit, l'algorithme de recherche binaire que j'ai décrit, aussi grand soit-il, est la seule méthode que je connaisse pour traquer des différences totalement inconnues dans beaucoup de code. Et vous avez une différence totalement inconnue à traiter. – btilly