3.2.8. Changements au clustering

3.2.8.1. Changements à votre application pour le clustering

  1. Démarrez JBoss EAP 6 avec le clustering activé

    Pour activer le clustering dans JBoss EAP 5.x, vous devrez démarrer vos instances de serveur avec le profil all ou undérivé, comme :
    $ EAP5_HOME/bin/run.sh -c all
    Dans JBoss EAP 6, la méthode d'activation du clustering dépend si les serveurs sont autonomes ou s'ils exécutent dans un domaine géré.
    1. Activer le clustering pour les serveurs qui exécutent dans un domaine géré

      Pour activer le clustering pour les serveurs déjà démarrés, qui utilisent le contrôleur de domaines, mettez à jour votre domain.xml et désignez un groupe de serveurs qui utilise le profil ha et un groupe de liaisons de sockets ha-sockets. Par exemple :
      <server-groups>
        <server-group name="main-server-group" profile="ha">
          <jvm name="default">
            <heap size="64m" max-size="512m"/>
          </jvm>
          <socket-binding-group ref="ha-sockets"/>
        </server-group>
      </server-group>
    2. Activer le clustering pour les serveurs autonomes

      Afin d'activer le clustering dans les serveurs autonomes, démarrez le serveur par le fichier de configuration qui convient comme suit :
      $ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
  2. Indiquer l'adresse de liaison

    Dans JBoss EAP 5.x, vous devez normalement indiquer l'adresse de liaison utilisée pour le clustering avec l'argument de ligne de commande -b comme suit :
    $ EAP5_HOME/bin/run.sh -c all -b 192.168.0.2
    JBoss EAP 6 relie les sockets aux adresses IP et aux interfaces contenues dans les éléments <interfaces> des fichiers standalone.xml, domain.xml et host.xml. Les configurations standards fournies dans JBoss EAP incluent deux configurations d'interface :
    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
           <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>
    Ces configurations d'interface utilisent les valeurs des propriétés système jboss.bind.address.management et jboss.bind.address. Si ces propriétés système ne sont pas définies, la valeur par défaut 127.0.0.1 sera utilisée pour chaque valeur.
    Vous pouvez également spécifier l'adresse de liaison en argument de ligne de commande lorsque vous démarrez le serveur ou vous pouvez la définir explicitement dans le fichier de configuration du serveur JBoss EAP 6.
    • Spécifier l'argument de liaison en ligne de commande quand vous démarrez le serveur JBoss EAP autonome.
      L'exemple suivant explique comment indiquer l'adresse de liaison en ligne de commande pour un serveur autonome :
      EAP_HOME/bin/standalone.sh -Djboss.bind.address=127.0.0.1

      Note

      Vous pouvez également faire usage de l'argument -b, un raccourci de -Djboss.bind.address=127.0.0.1 :
      EAP_HOME/bin/standalone.sh -b=127.0.0.1
      Le format de syntaxe JBoss EAP 5 est également pris en charge :
      EAP_HOME/bin/standalone.sh -b 127.0.0.1
      Notez que l'argument -b ne fait que changer l'interface publique. Il n'affecte pas l'interface de management.
    • Indiquer l'adresse de liaison dans le fichier de configuration du serveur.
      Pour les serveurs qui exécutent en domaines gérés, indiquer les adresses de liaison dans le fichier domain/configuration/host.xml. Pour les serveurs autonomes, indiquer les adresses de liaison dans le fichier standalone-ha.xml.
      Dans l'exemple suivant, l'interface public est spécifiée comme interface par défaut pour tous les sockets au sein du groupe de liaison de socket ha-sockets.
      <interfaces>
        <interface name="management">
          <inet-address value="192.168.0.2"/>
        </interface>
        <interface name="public">
          <inet-address value="192.168.0.2"/>
        </interface>
      </interfaces>
      <socket-binding-groups>
        <socket-binding-group name="ha-sockets" default-interface="public">
          <!-- ... -->
        </socket-binding-group>
      </socket-binding-groups>

      Note

      Si vous spécifiez l'adresse de liaison sous forme de valeur codée en dur et non pas sous forme de propriété système de configuration, vous ne pourrez pas remplacer cette valeur codée par un argument en ligne de commande.
  3. Configurer jvmRoute pour supporter mod_jk et mod_proxy

    Dans JBoss EAP 5, le serveur web jvmRoute a été configuré à l'aide d'une propriété dans le fichier server.xml. Dans JBoss EAP 6, l'attribut jvmRoute est configuré dans le sous-système web du fichier de configuration de serveur à l'aide de l'attribut instance-id comme suit :
    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="{JVM_ROUTE_SERVER}">
    
    {JVM_ROUTE_SERVER} ci-dessus doit être remplacé par l'ID du serveur jvmRoute.
    instance-id peut également être défini par le biais de la console de gestion.
  4. Indiquer l'adresse multidiffusion et le port

    Dans JBoss EAP 5.x, vous pouvez spécifier l'adresse multidiffusion et le port utilisés pour les communications intra-cluster par les arguments de ligne de commande -u et -m, respectivement, comme ceci :
    $ EAP5_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688
    Dans JBoss EAP 6, vous pouvez spécifier l'adresse multidiffusion et le port utilisés pour la communication entre les cluster par la liaison de socket référencée par la pile de protocoles JGroup qui convient.
    <subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
        <stack name="udp">
            <transport type="UDP" socket-binding="jgroups-udp"/>
            <!-- ... -->
        </stack>
    </subsystem>
    <socket-binding-groups>
        <socket-binding-group name="ha-sockets" default-interface="public">
            <!-- ... -->
            <socket-binding name="jgroups-udp" port="55200" multicast-address="228.11.11.11" multicast-port="45688"/>
            <!-- ... -->
        </socket-binding-group>
    </socket-binding-groups>
    
    Si vous voulez spécifier l'adresse de multidiffusion et le port dans la ligne de commande, vous pouvez définir l'adresse de multidiffusion et les ports comme des propriétés système et ensuite utiliser ces propriétés sur la ligne de commande lorsque vous démarrez le serveur. Dans l'exemple suivant, jboss.mcast.addr est le nom de la variable pour l'adresse de multidiffusion et jboss.mcast.port est le nom de la variable pour le port.
    <socket-binding name="jgroups-udp" port="55200"
     multicast-address="${jboss.mcast.addr:230.0.0.4}" multicast-port="${jboss.mcast.port:45688}"/>
    
    Vous pouvez alors démarrer votre serveur en utilisant les arguments de ligne de commande suivants :
    $ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688
  5. Utiliser une pile de protocoles différente

    Dans JBoss EAP 5.x, vous pouviez manipuler la pile de protocoles par défaut utilisée pour tous les services de clustering qui utilisaient la propriété système jboss.default.jgroups.stack.
    $ EAP5_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
    Dans JBoss EAP 6, la pile de protocoles par défaut est définie par le sous-système JGroups dans domain.xml ou standalone-ha.xml:
    <subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
        <stack name="udp">
            <!-- ... -->
        </stack>
    </subsystem>
  6. Remplacer la réplication de Buddy

    JBoss EAP 5.x utilise JBoss Cache Buddy Replication pour supprimer la réplication des données dans toutes les instances d'un cluster.
    Dans JBoss EAP 6, la réplication de Buddy a été remplacée par le cache distribué d'Infinispan, connu également sous le nom mode DIST. La distribution est un mode de gestion de clusters puissant qui permet à Infinispan de mettre à échelle en linéaire lorsque un certain nombre de serveurs sont ajoutés au cluster. Voici un exemple sur la façon de configurer le serveur pour utiliser le mode de mise en cache de DIST.
    1. Ouvrir une ligne de commandes et démarrer le serveur avec un Profil HA ou un FUll Profile, comme par exemple :
      EAP_HOME/bin/standalone.sh -c standalone-ha.xml
    2. Ouvrir une nouvelle ligne de commandes et connectez-vous au Management CLI.
      • Dans Linux, saisir ce qui suit au niveau de la ligne de commande :
        $ EAP_HOME/bin/jboss-cli.sh --connect
        
      • Dans Windows, saisir ce qui suit au niveau de la ligne de commande :
        C:\>EAP_HOME\bin\jboss-cli.bat --connect
        
      Vous devriez voir apparaître le résultat suivant :
      Connected to standalone controller at localhost:9999
    3. Lancer les commandes suivantes :
      /subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist)
      /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=3)
      :reload
      
      Vous devriez voir la réponse suivante après chaque commande :
      "outcome" => "success"
      
      Ces commandes modifient l'élément dist <distributed-cache> dans la configuration web <cache-container> du sous-système infinispan du fichier standalone-ha.xml comme suit :
      <cache-container name="web" aliases="standard-session-cache" default-cache="dist" module="org.jboss.as.clustering.web.infinispan">
          <transport lock-timeout="60000"/>
          <replicated-cache name="repl" mode="ASYNC" batching="true">
              <file-store/>
          </replicated-cache>
          <replicated-cache name="sso" mode="SYNC" batching="true"/>
          <distributed-cache name="dist" owners="3" l1-lifespan="0" mode="ASYNC" batching="true">
              <file-store/>
          </distributed-cache>
      </cache-container>
      
      Pour plus d'informations, voir le chapitre intitulé Clustering in Web Applications du Development Guide de JBoss EAP 6 qui se situe dans le Portail clients https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.