JBoss AS 7 en domaine


L'objectif est de mettre en place un domaine JBoss, constitué d'un maître (appelé master) et un esclave (appelé host202).

Principe

Depuis JBoss AS 7, nous avons le choix entre un mode autonome (standalone) ou en domaine (domain). Le mode standalone est similaire à ce que nous connaissions dans les versions précédentes de JBoss, avec un serveur démarré et administré individuellement. Le mode domain permet de démarrer plusieurs instances avec une seule commande et d'administrer les instances sur plusieurs machines de façon centralisée.

Dans le mode domain, il y a 3 types d'acteurs :

Jboss7-domain-principe.png

Sur chaque machine, il faut démarrer un host controller (ou un domain controller), avec la commande

bin/domain.sh

En démarrant ainsi, la configuration se fait dans les fichiers domain/configuration/host.xml et domain.xml. Le fichier host.xml contient le paramétrage du contrôleur et le domain.xml configure les serveurs JBoss.

Configuration

Contrôleur de domaine / d'hôte

Ce qui différencie un contrôleur de domaine d'un contrôleur d'hôte c'est l'élément <domain-controller> dans host.xml.

Un contrôleur de domain se contrôle localement :

<domain-controller>
   <local/>
</domain-controller>

Un contrôleur d'hôte est contrôlé par un contrôleur de domaine distant :

<domain-controller>
   <remote host="192.168.1.201" port="9999" />
</domain-controller>

Chaque contrôleur doit avoir un nom unique dans l'environnement. On utilise souvent master pour le contrôleur de domaine et on change le nom des contrôleurs d'hôte :

<host name="host202" xmlns="urn:jboss:domain:1.0">
  [...]
</host>

Serveurs JBoss

Dans la terminologie des domaines JBoss AS 7, un serveur est une instance de JBoss. Ces serveurs sont démarrés par leurs contrôleurs ; chaque serveur est déclaré dans le fichier host.xml.

   <servers>
       <server name="server-one" group="main-server-group">
       </server>
       <server name="server-two" group="main-server-group">
       </server>
   </servers>

Le groupe de serveur qui est spécifié ici regroupe des serveurs qui ont le même profil de configuration, le même groupe de sockets et les mêmes applications. La configuration de chaque groupe de serveur est dans domain.xml.

Jboss7-domain-servergroup.png

Sur chaque hôte, chaque groupe fait référence à un profil qui est un assemblage de sous-systèmes, comme le logging, les datasources, web, ejb3,... Ce profil représente la configuration des instances.


Mise en oeuvre (sécurisé)

Ce paragraphe est un exemple de mise en oeuvre d'un domaine JBoss AS 7. L'environnement est simplifié, avec deux machin ; le maître est sur le serveur 192.168.1.201 et l'esclave sur le serveur 192.168.1.202.

Jboss7-domain.png

Configuration du master

Commençons pas configurer le maître. Le fichier host.xml par défaut convient bien pour cela. Pour simplifier l'environnement, je n'associe qu'un seul serveur au master. Il faut surtout ajouter un login pour l'esclave afin que celui-ci puisse s'authentifier auprès du master et se connecter à son interface de management.

 §JBOSS_HOME/bin/add-user.sh host202 hostpwd ManagementRealm

Le master peut maintenant être démarré, en prenant soin de lier l'interface de management à une adresse publique. Le choix de lier les interfaces applicatives à une adresse publique est secondaire ici (-b 0.0.0.0).

 $JBOSS_HOME/bin/domain.sh -bmanagement 0.0.0.0
 

Configuration du host

Configurons ensuite l'esclave. Pour cela, l'exemple à utiliser serait plutôt host-slave.xml. En effet, il faut en priorité spécifier un domain-controller distant,et lui associer un realm qui contient un server-identity.

   <domain-controller>
      <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
   </domain-controller>

Le server-identities contient le mot de passe en base64. Cela peut s'obtenir de plusieurs manière, directement en ligne de commande pour les systèmes d'exploitations civilisés, avec des outils tiers pour les autres systèmes, ou sur des sites Web comme http://www.motobit.com/util/base64-decoder-encoder.asp

 echo -n hostpwd | base64

La valeur obtenu est placée dans le realm.

 <security-realm name="ManagementRealm">
     <authentication>
         <properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
     </authentication>
     <server-identities>
         <secret value="aG9zdHB3ZA==" />
     </server-identities>
 </security-realm>

La configuration est prête, on peut donc démarrer l'esclave.

 $JBOSS_HOME/bin/domain.sh -b 0.0.0.0 -bmanagement 0.0.0.0 -Djboss.domain.master.address=192.168.1.201

En local, toute la partie sur l'authentification de l'esclave auprès du serveur est inutile. En effet, pour faciliter la tâche des développeurs qui utilisent JBoss AS 7, aucune authentification n'est nécessaire pour un accès local à l'interface native de management.