dimanche 28 mars 2010

Une nouvelle version d’une application peut être déployée en même temps que l’ancienne sans affecter les clients en cours d’utilisation ainsi que les nouveaux clients.

Les clients existants continuent d’utiliser l’ancienne version et les nouveaux clients sont redirigés vers la nouvelle version de l’application. L’ancienne version passe à l’état undeployed une fois que tous les clients en cours sur cette version ont terminé leur travail. Le nombre de versions simultanées est limité à 2.


 Version d’une application


 Possibilités pour préciser la version d’une application :

  • Dans le MANIFEST.MF de l’EAR (préconisé)
  • Lors du déploiement avec la commande weblogic.Deployer

Manifest


La ligne à ajouter dans le fichier MANIFEST.MF est la suivante :

Weblogic-Application-Version: 1.0.1

Deployer


La version d’une application peut être précisée lors du déploiement seulement si aucune version n’a été précisée dans le manifest. Pour cela, il faut ajouter l’option –appversion lors du déploiement.

java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -password weblogic -deploy -name app -source TestSession-1.0.1.ear -targets Server1 -stage -appversion 1.0.1

Vérifier la version de l’application déployée


La version de l’application déployée peut être vue dans la console (Archive version)


Ou en utilisant le Deployer avec l’option -listapps :

java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -password weblogic -listapps

Déploiement d’une nouvelle version 


Lorsqu’une nouvelle version d’une application est déployée :

  • La nouvelle version est au statut Active.
  • L’ancienne version passe automatiquement du statut Active au statut Stop Running jusqu’à ce qu’il n’y ait plus de sessions clientes sur cette version, puis elle passe au statut Retired.

Ligne de commande pour redéployer une nouvelle version :

java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic
-password weblogic -redeploy -name TestSession
-source TestSession-1.0.2.ear
-retiretimeout 300

L’option retiretimeout permet de passer automatiquement l’ancienne version au statut Retired après le timeout sans attendre la fin des sessions clientes.


Une architecture cluster a pour objectif d’assumer une charge fluctuante et d’assurer un service transparent aux pannes et aux maintenances. Les concepts sont :

ü  Fail Over & High Availability     Rendre transparent aux utilisateurs finaux les pannes de la plate-forme et les maintenances applicatives pour un service 24/7.

ü  Load Balancing                  Capacité à répartir la charge utilisateur sur l’ensemble des ressources mise à disposition du cluster.

ü  Scalability                     Capacité à modifier la capacité de la plate-forme afin de répondre à une variation de charge.

ü  Centralization                  Centralisation de l’administration afin de faciliter les maintenances applicatives.

ü  Migration                       Les ressources singleton peuvent être migré sur une instance valide en cas de panne de l’instance hébergeur.

ü  Virtualization                  Compartimenter et maitriser les fluctuations de charge dynamiquement afin de mieux gérer les variations. Mieux répartir les clusters selon leurs charges pour mieux exploiter la plateforme machine.

Les grands principes étant de fragmenter le plus possible par paire les nœuds de façon a facilité les traitements internes (taille mémoire plus petite à gérer, nombre de threads internes plus nombreux pour l’infrastructure) et mieux géré les failover et failback (plus de nœuds disponibles pour assurer la surcharge lors de panne, failback meilleure répartition sur un retour à la normale).

Toutes les interfaces JEE (Servlet/JSP/EJB/JMS/JTA) et architectures (MAN/LAN/WAN) supporte par différent moyen et paramétrage le clustering.

Chaque Protocol implémente une interface associé au Cluster :

ü  HTTP
ü  RMI
ü  JMS
ü  JNDI
ü  JDBC

Plusieurs architectures sont possibles :

ü  LAN
ü  MAN
ü  WAN
  



DIALOGUE

Les mécanismes internes du cluster doivent implémenter les principes suivants. Pour cela, chaque nœud doit dialoguer avec l’ensemble des nœuds du cluster afin d’assurer la cohésion de celui-ci. Cela passe donc par des protocoles réseau.

ü  Etat de vie (Heart Beat)                  Observer son voisin pour savoir s’il est toujours en vie.
ü  Réplication (Fail Over)                   Répliquer les données utilisateurs sur une ressource distance.
ü  Répartition (Load Balancing)         Répartir la charge sur l’ensemble du cluster.
ü  Extensibilité (Dynamic Liste)         Gérer l’ajout de nœud dynamiquement.

Le heart beat peut être géré de deux façons différentes :

ü  MULTICATS
ü  UNICAST

Pour les autres échanges, c’est le mode point à point qui est utilisé.

MULTICAST

·         Principe : Le mode de dialogue multicast passe par un message Broadcast (type 4) pour la communication inter instance. L’avantage de ce mode est qu’il est robuste, mais propagé sur les autres réseaux (voir avec les experts système). Vérifier que l’adresse multicast du cluster n’est pas utilisée par d’autres composants afin d’éviter le conflit.

  
·         Pour valider le bon fonctionnement réseau, vous pouvez passer le test suivant. Lancer la commande sur chaque machine avec la même adresse multicast et éventuellement le même port, mais avec un nom différent par machine (prendre par exemple le nom de la machine). Appliquer ce test instance arrêté, car celui-ci peut engendrer un trafic perturbant.

Lancer la commande simultanément sur les machines du cluster, et vérifier que sur chaque machine, on reçoit bien les trames de la machine voisine en observant l’apparition du nom passé en paramètre.


-n
Nom
-a
adresse
-p
port
-t
timeout
-s
interval d’envoi (second)

Ex :

D:\bea\wlserver6.0sp1\config\CLUSTER> java utils.MulticastTest –n Server1 -a 224.0.0.0
***** WARNING ***** WARNING ***** WARN
Do NOT use the same multicast address


Starting test.  Hit any key to abort


Using multicast address 224.0.0.0:7001
Will send messages under the name Serv
Will print warning every 600 seconds i

                I (Server1) sent messa
Received message 2 from Server1
                I (Server1) sent messa
Received message 3 from Server1
                I (Server1) sent messa
Received message 4 from Server1
                I (Server1) sent messa

D:\bea\wlserver6.0sp1\config\CLUSTER>

En cas de problème, c’est qu’il n’y a peut-être pas de licence.

UNICAST

·         Principe : Le mode unicast permet d’implémenter le principe de l’état de vie (Heart Beat) sans devoir utiliser de dialogue broadcast. Les données sont mise à jour via un mode de déclaration de service (service announcements). Le Protocol utilisé est TCP/Point to Point :

ü  service announcements      Déclaration de service
ü  heartbeats              État de vies (battement de cœur)

·         Principes Unicast :

Connectivité point à point entre les membres du cluster. Optimisation des connexions sockets, car tous les membres ne sont pas connectés en même temps. Les membres du cluster sont divisés en groupes (10 max). Chaque groupe à un nœud leader. Tous les leaders sont reliés entre eux. Tous les nœuds membres du groupe ne sont reliés qu’au leader du groupe.
                                                                                               
·         Initialisation du cluster.

Lors du démarrage des instances, il y a échange de l’heure de démarrage. L’instance qui a démarré la 1re devient leader. La formation du groupe est limitée à 10 instances, car le trafique d’échange des membres entre groupes se fait par les leaders (surcharge de trafic sur ces instances). Si le leader du groupe disparaît, c’est l’instance du groupe la plus ancienne de prendre le rôle du nouveau leader du groupe. Dans le cas du retour de l’ancien leader (problème réseaux), c’est le nouveau leader qui continue jusqu'à rétablissement de l’ancien via le mécanisme cluster (pas plus de précision sur le sujet !).


UNICAST/MULTICAST

·         Fonctionnalité :

Les fonctionnalités Unicast/Multicast sont les mêmes, seule l’implémentation de propagations de l’information est différente. Le trafic Unicast est théoriquement plus fiable, car basé sur TCP mais préférer le mode multicast pour des grands clusters (le multicast étant plus perturbant pour le réseau, mais plus stable, car historique). Les éléments suivants sont les mêmes entre les deux modes :

ü  La taille des messages.
ü  La taille des flux.
ü  Les messages Heartbeats (500 bytes toutes les 10s).
ü  Le trafic à l’initialisation.

·         Paramétrage :

Les deux modes de cluster peuvent coexister. Pas de possibilité de paramétrage en mode unicast (contrairement au multicast) sauf via un network channel . Le cluster unicast implémente un nouveau protocole cluster-board (non exposé au paramétrage)

Paramétrage :

ü  Via la console
ü  ClusterMBean.ClusterMessagingMode = ‘unicast’

·         Détail de protocol (issue du support) :

Le type de protocole sera vu comme T3, mais encodé de façon différente pour être différencié des autres messages T3.
Le nœud de réception détectera cette spécificité de la requête unicast et court-circuitera la couche de connexion RJVM pour appeler le handler spéciale du cluster.
Les connexions socket établit par le protocole de message unicast ne sera pas partagé par les autres clients T3.
L’implémentation du Protocol unicast est indépendante des containers RMI ou http.

·         Monitoring :

Via le mbean UnicastMessagingRuntimeMBean


DiscoveredGroupLeaders
String[]
["managed1"]
Running group leader names
Groups
String
{managed1,
managed2}
Formatted group list
LocalGroupLeaderName
String
managed1
Name of the local group leader
RemoteGroupsDiscoveredCount
Integer
0
Returns the total groups discovered by this server
TotalGroupsCount
Integer
1
Total configured groups - running and not running

·         JMS

WebLogic Server provides an alternative to using multicast to handle cluster messaging and communications. Unicast configuration is much easier because it does not require cross network configuration that multicast requires. Additionally, it reduces potential network errors that can occur from multicast address conflicts.

JMS topics configured for multicasting can access WebLogic clusters configured for unicast because a JMS topic publishes messages on its own multicast address that is independent of the cluster address. However, the following considerations apply:

ü  The router hardware configurations that allow unicast clusters may not allow JMS multicast subscribers to work.
ü  JMS multicast subscribers need to be in a network hardware configuration that allows multicast accessibility.

For more details, see Communications In a Cluster in Using WebLogic Server Clusters.


·         Debug : Pour obtenir des informations de debug, vous pouvez activer l’option suivante dans les paramètres de la JVM de l’instance à analyser.

-Dweblogic.debug.DebugUnicastMessaging=true

Pour l’activité cluster :

-Dweblogic.debug.DebugCluster=true
-Dweblogic.debug.DebugClusterHeartbeats=true
-Dweblogic.debug.DebugClusterFragments=true

Ou

DebugCluster
DebugClusterAnnouncements
DebugFailOver
DebugReplication
DebugReplicationDetails

java weblogic.Admin -url t3://localhost:7001 -username system -password weblogic GET -type ServerDebug -property DebugCluster




SESSION PERSISTENCE

Plusieurs architectures sont possibles, selon les besoins. La contrainte étant les latences réseau qui peuvent perturber le trafic réseau (perte de heart beat, ralentissement des réplications de sessions).

LAN

Un même brin réseau et un même domaine pour toutes les machines en local. C’est l’architecture la plus rependue et la plus simple à mettre en place. Chaque nœud participant au domaine réplique les sessions sur le nœud voisin. Un load-balancer en amont assure la répartition de charge.


 MAN

Deux cluster sont mise en place avec deux load balancer en répartition la charge sur les deux clusters (server afinity). Un load balancer principal assurant la répartition sur les deux sites (cluster afinity). La session est répliquée en local et dupliquée sur le cluster voisin. Le fail over s’effectue localement tant qu’il y a des instances valides. Quand le cluster n’est plus disponible, il y a faile over sur le second cluster.


 WAN

Cluster inter-cite (asynchrone). Possibilité d’utiliser un site de Backup comme composant du cluster.


 COHERENCE

Utilisation du cache Coherance ainsi que l’architecture qui en découle.




REPARTITION


PRINCIPE

Le choix d’une architecture Weblogic se résumer à définir les domaines les instances associées et les ressources qui y sont déployées (cluster, ressources J2EE, applications). Les critères qui peuvent orienter ses choix sont :

ü  La répartition des ressources CPU/Mémoire.
ü  La centralisation de l’administration.
ü  La tolérance aux pannes et à l’indisponibilité de services
ü  La scalabilitée de la plate-forme.

DOMAINE MONO-INSTANCE

Dans le cas d’une architecture mono-domaine, mono-instance, la problématique est la disponibilité, car si la machine ou l’instance tombe, c’est le service qui est interrompu.

Dans le cas où l’on duplique cette architecture pour mettre en place un load-balancer et assurer la disponibilité, c’est l’administration et la scalabilité qui devient problématique, car il faut redéfinir les ressources sur chaque duplication.


DOMAINE MULTI-INSTANCE

Il est donc préférable de mettre en place un environnement multiinstance mono domaine pour la centralisation de l’administration et la scalablité de la solution.

Dans le cas d’un mono-domaine, multiinstance on a le choix du nombre d’instances et du nombre de machines. Cette architecture permet de rajouter en cas de besoins des ressources supplémentaires (accroissement de charge).

Pour l’instance d’administration, il est préférable de la mettre sur une machine différente des machines supportant les instances managées de façon à ne pas être gênées par la charge de production.

Dans le cas ou l’on choisi une architecture avec une seule instance par machine, la problématique sera d’assurer une charge multipliée sur les machines restantes dans le cas d’une panne hardware .

D’autre part, si l’instance d’une machine tombe alors que la machine est toujours disponible, la charge sera quand même routée vers les autres machines inutilement (ressource hardware toujours disponible, mais pas utilisé).


  
Il est donc préférable d’avoir au moins deux instances par machine pour assurer la disponibilité de la machine en cas de panne instance.
Si le type de machine choisi ne support pas un accroissement de charge en cas de panne hardware, il faudra augmenter le nombre de machines pour atténuer la dégradation.

REPARTITION DE LA CHARGE RESSOURCE

Les ressources à répartir sur l’architecture Weblogic sont :

ü  La CPU.
ü  La mémoire.

La ressource mémoire est gérée par la JVM. Dans le cas d’une JVM, la mémoire alloué pour l’application est limité en 32 bits à 2 Go. Le seul moyen d’ajouter de la ressource mémoire sur une machine et de rajouter des instances.

Sur la ressource CPU le fait de rajouter des instances ne suffit pas, car la répartition se fait par thread (chaque instance sollicitant de la même façon la CPU). Si l’on souhaite augmenter la capacité de la plate-forme, il faut rajouter des machines.

D’autre pas, dans le cas d’une plate-forme mutualisée (différente application déployée sur la même machine), il est préférable de compartimenter les ressources par instance ou par groupe d’instance. Dans le cas de la mémoire, c’est la JVM qui borne la charge. Dans le cas de la ressource CPU, c’est la machine. Il faut donc mettre en place un mécanisme de virtualisation ‘ pour borner la ressource CPU sur les instances (sur une même machine)





LOAD BALANCING

Le load balancing permet de répartir la charge sur les instances Weblogic. L’implémentation est différente selon le protocole utilisé.

HTTP

Le load balancing HTTP se fait à partir d’un boitier hardware avec affinité de session (CISCO/BigIP/etc ) ou via un serveur HTTP frontal avec le plug-in Weblogic (IIS, Apache, etc).

Prenons l’exemple d’un domaine avec 3 instances (A,B,C) et un frontal Apache sur lequel on aura paramétré le plugin. Trois utilisateurs se connectent sur cette plate-forme (u1,u2,u3). Le plug-in est paramétré de façon statique avec l’adresse des 3 instances en cluster.

Détail de paramétrage Apache (httpd.comf)


Au 1er appel du 1er utilisateur u1, le plug-in va détecté que l’utilisateur est nouveau, car  ne possédant pas de cookie. Il va choisir une instance dans la liste statique pour le 1er requêtage et prendre la 1er instance (en round robine en cas d’échec).

L’instance qui reçoit la requête détecte que c’est la 1er connexion de l’utilisateur et réalisée un ensemble d’initialisation :

ü  Création d’un ID unique pour l’utilisateur
ü  Sélection d’une instance secondaire dans le cluster (fonction des groupes de réplications) pour le backup des données
ü  Création d’une session utilisateur pour conserver les données utilisateur.
ü  Création d’un cookie contenant l’ID utilisateur généré, la référence d’elle-même et de l’instance secondaire.

Après traitement de la requête l’instance retourne le résultat avec le cookie.


Au second requêtage de l’utilisateur u1, le plug-in regarde le contenu du cookie et route l’appel sur l’instance primaire (affinité de session). Lors du requêtage de l’utilisateur u2, le plug-in va prendre la 2eme instance de la liste pour router l’utilisateur sur l’instance B (en round robine).


Ce modèle fonctionne hors cluster. L’ajout d’un cluster introduit une liste dynamique et la réplication des sessions (choix d’une instance secondaire et réplication des données). La liste est construite par les instances du cluster via le Heart Beat.


Quand une instance est défaillante, elle n’émet plus de Heart Beat et les instances voisines après un timeout invalide celle-ci de leur liste. A chaque requêtage utilisateur, cette liste est propagée dans le flux retour à destination du plugin. De cette façon lorsque qu’une instance n’est plus valide le plug-in est renseigné sans devoir la requête (économie du timeout réseau en cas d’échec).


Cela permet également d’ajouter une instance sans devoir la déclarer dans le paramétrage du plugin (scalabilité via la liste dynamique).


Dans le cas de tombée d’une instance sur une plate-forme sur le requêqage de l’utilisateur u1, le plug-in avec la liste dynamique va s’apercevoir que l’instance primaire de cet utilisateur n’est plus disponible et va retrouver dans le cookie l’instance secondaire contenant les données backupées. L’utilisateur est donc routé vers l’instance de backup (il ne s’apercevra pas l’interruption de service).


L’instance secondaire reçoit l’appel de l’utilisateur u1 en failover et restaure ses données pour desservir la requête. Elle va choisir une instance secondaire de backup disponible dans le cluster et se mettre en instance primaire dans le cookie.


Dans le cas d’une plate-forme hors cluster, le plug-in n’a pas l’information de la liste dynamique et utilise sont fichier de configuration (liste statique). Il va essayer de requêter l’instance A avec un timeout et un échec et invalider l’instance de sa liste (temps de timeout dégradant le temps du requêtage utilisateur).


Il va rerouter le flux sur l’instance secondaire, mais sans y retrouve ses données. L’utilisateur perd donc la saisie de ses données.


 RMI

Pour la partie EJB, le cluster est nécessaire, car c’est le client EJB qui reçoit le loadbalancer. Quand le client requête l’EJB HOME, il récupère le stub (partie client) qui en mode cluster embarque l’algorithme du loadbalancer.


Le 1er requêtage utilise le paramétrage statique (passé dans le lookup). Sur les autres appels, la liste dynamique rentre en jeux.


Il vaut mieux renseigner l’ensemble des instances associées au cluster dans le paramétrage initial (même remarque que pour la partie HTTP), car si on y place qu’une seule instance et que celle-ci n’est pas disponible sur le 1er appel, le client ne pourra par joindre les autres (pas d’amorçage de la liste dynamique).


Les algorithmes possibles sont plus nombreux et peuvent associés une préférence d’utilisation de ressource déjà crée (connexion). On peut également implémenter son propre algorithme si besoin.

 Attention, le cache de l’EJB HOME dans le cas d’optimisation peut poser problème. Valider ce point en faisant des tests de crash recovery.

JMS

Le déploiement de destinations JMS sur un cluster rend transparentes la création des ressources et la répartition de charge. Le fait de créer un queue ou topic sur un cluster entraine la création de cette queue sur l’ensemble des instances.


Lors de l’envoi d’un message sur un des nœuds, l’envoi est loadbalancer sur l’ensemble des instances plutôt que sur l’instance elle-même.


Dans le cas ou il n’y a pas de cluster, il faudra créer autant de file que d’instance et la publication et consommation de message se fera co localisé sur l’instance sans répartition de charge.

Le cluster introduit la notion de Cluster Wide JNDI Tree qui permet lors de la publication d’un objet dans l’arbre JNDI local de le rendre visible sur l’ensemble des nœuds en propageant cette référence sur l’ensemble des arbres JNDI des instances appartenant au cluster. De cette façon, une ressource déclarée est visible de partout et non plus co localisé sur l’instance.


 AUTRES

Pour la partie LDAP, il suffit de déclarer la liste des différentes instances (round robin).

Pour la partie JDBC, il faudra utiliser le mutli datasource ou un paramétrage JDBC sur un cluster Oracle RAC.




SINGLETON

 A venir …




GROUPE DE REPLICATION

 Définir des groupes de réplications pour orienter le choix du serveur secondaire qui va recevoir les données répliquées du serveur primaire. En prenant l’exemple d’une architecture à deux machines (I-II) avec un cluster de 4 instances (deux par machines). Définir un groupe A pour la machine I et un groupe B pour la machine II.

Définissez pour les instances a et b

Replication Group : A
Preferred Secondary : B

Définissez pour les instances c et d

Replication Group : B
Preferred Secondary : A


De cette façon, le choix de l’instance de réplication se fera plutôt sur les instances de l’autre machine.  Ce paramétrage se fait via la console WLS :

DomaineàServersà{Le Server}àConfigurationàCluster


Extraction de la documentation Weblogic

5-1 Ranking Server Instances for Session Replication
Server Rank
Server Resides on a Different Machine
Server is a Member of Preferred Replication Group
1
Yes
Yes
2
Yes
No
3
No
Yes
4
No
No
Using these rules, the primary WebLogic Server ranks other members of the cluster and chooses the highest-ranked server to host the secondary session state. For example, the following figure shows replication groups configured for different geographic locations.
Figure 5-1 Replication Groups for Different Geographic Locations
Replication Groups for Different Geographic Locations
In this example, Servers A, B, and C are members of the replication group "Headquarters" and use the preferred secondary replication group "Crosstown." Conversely, Servers X, Y, and Z are members of the "Crosstown" group and use the preferred secondary replication group "Headquarters." Servers A, B, and X reside on the same machine, "sardina."
If a client connects to Server A and creates an HTTP session state,
  • Servers Y and Z are most likely to host the replica of this state, since they reside on separate machines and are members of Server A's preferred secondary group.
  • Server X holds the next-highest ranking because it is also a member of the preferred replication group (even though it resides on the same machine as the primary.)
  • Server C holds the third-highest ranking since it resides on a separate machine but is not a member of the preferred secondary group.
  • Server B holds the lowest ranking, because it resides on the same machine as Server A (and could potentially fail along with A if there is a hardware failure) and it is not a member of the preferred secondary group.
To configure a server's membership in a replication group, or to assign a server's preferred secondary replication group, follow the instructions in Configure Replication Groups.



PROPERTIES

 A venir …




SERVICE SINGLETON

 A venir …


Application TestSession.war pour tester et valider votre architecture Weblogic Cluster


AUTEUR

Ma photo
Carrières Sur Sein, Yvelines, France
Consultant Oracle (Ancien consultant BEA depuis 2001), je m’occupe des expertises sur les produits Oracle : SOCLE (Weblogic, Coherence, JRockit) SOA (Service Bus, SOA Suite, BPM)
MON CV

LABEL 3D

Blogumulus by Roy Tanck and Amanda Fazani

LABEL CLOUD

MAP

Locations of visitors to this page

AUTRES BLOG

LIVRES

MEMBRES