En attente de connexion JMX à 18080 Connectez-vous à plusieurs serveurs d'applications Java sur la plate-forme en même temps à partir d'une machine locale

Qu'est-ce que tu racontes?

Ceci est un exemple de réglage quand il est encore plus gênant de surveiller la connexion JVM par JMX, ce qui est gênant si vous passez sur la plate-forme.

Connectez-vous en même temps en utilisant la fonction TCP Proxy de Nginx.

Hypothèses de configuration

Je ne veux pas demander le réglage du port de la plate-forme un par un lorsque le nombre de serveurs AP augmente.

Ce que vous voulez résoudre

Pour surveiller la JVM avec JMX, démarrez généralement la fonction serveur qui écoute les connexions JXM en donnant les arguments suivants. Certains arguments ne peuvent être utilisés qu'avec Java 7 ou version ultérieure.

Ceci est pour le serveur AP app-srv-01.

-Djava.rmi.server.hostname=`hostname`              # hostname=app-srv-01
-Dcom.sun.management.jmxremote.port=18080
-Dcom.sun.management.jmxremote.rmi.port=18080
-Dcom.sun.management.jmxremote.ssl=false           #Tout
-Dcom.sun.management.jmxremote.authenticate=false #Tout

Le point à noter ici est java.rmi.server.hostname </ code>.

Ce paramètre est envoyé au client JMX qui se connecte et utilise ce nom d'hôte comme destination JMX.

En d'autres termes, du point de vue du client JMX, vous ne pouvez pas vous connecter à moins de voir la connexion JMX avec app-srv-01: 18080 </ code>.

Si vous passez par la plateforme, vous ne pourrez pas vous connecter car vous ne pouvez pas voir app-srv-XX.

Facile pour un

Avec un, ce problème peut être résolu rapidement.

Tout ce que vous avez à faire est de définir le transfert de port suivant dans la configuration de ssh et d'ajouter app-srv-XX aux hôtes.

~/.ssh/config


Host humidai-srv.net
     user  hoge-user
     IdentityFile    ~/.ssh/id_rsa.hoge
     LocalForward   18080 ap-srv-01:18080

hosts


### app-srv-XX jmx ###
127.0.0.1  app-srv-01

Vous pouvez maintenant voir ap-srv-ap01: 18080 </ code> comme destination de connexion JMX sur votre ordinateur local.

Si app-srv-01 a déjà été résolu comme une adresse IP différente en raison de l'environnement de la machine locale, jmx. </ Strong> est ajouté au début du nom d'hôte défini dans les arguments hosts et jvm. Ajoutez un préfixe tel que code>.

C'est gênant lorsqu'il y a plusieurs unités

Avec les paramètres pour une unité, le port 18080 de l'hôte local sera utilisé pour le transfert de port de ap-srv-ap01, de sorte que le port 18080 ne peut pas être utilisé comme port pour la connexion JMX après la deuxième unité. Je vais finir.

Je souhaite gérer ce problème et surveiller plusieurs JVM distants.

Solution

Cette fois, nous allons résoudre ce problème en utilisant la fonction TCP Proxy de Nginx.

Correction des paramètres de la première unité et ajout des paramètres de transfert de port et d'hôtes jusqu'à la nième unité

Avant de configurer Nginx, modifiez le transfert de port comme suit afin de ne pas bloquer le port 18080 de la machine locale (la cinquième unité et les suivantes sont omises).

~/.ssh/config


Host humidai-srv.net
     user  hoge-user
     IdentityFile    ~/.ssh/id_rsa.hoge
     LocalForward   18081 ap-srv-01:18080
     LocalForward   18082 ap-srv-02:18080
     LocalForward   18083 ap-srv-03:18080
     LocalForward   18084 ap-srv-04:18080
                   :
                   :

Ajoutez-le également au fichier Hosts. Veuillez noter que les adresses IP qui peuvent être dessinées sont toutes différentes. La raison sera décrite plus tard.

hosts


### app-srv-XX jmx ###
127.0.0.1  app-srv-01
127.0.0.2  app-srv-02
127.0.0.3  app-srv-03
127.0.0.4  app-srv-04
          :
          :

Paramètres Nginx

Version et module requis

Il n'y a pas de problème si vous installez normalement le dernier, mais cela fonctionne avec ce qui suit.

nginx version: nginx/1.11.9
--with-stream=dynamic #Bien sûr, c'est OK même si vous l'installez de manière statique

Paramètres de flux Nginx

Ajoutez ce qui suit aux paramètres Nginx.

L'endroit où écrire la directive Stream doit être au niveau supérieur, donc écrivez-le directement dans nginx.conf.

nginx.conf


stream {
    upstream up.app-srv-01 { server localhost:18081; }
    upstream up.app-srv-02 { server localhost:18082; }
    upstream up.app-srv-03 { server localhost:18083; }
    upstream up.app-srv-04 { server localhost:18084; }
                :
                :
    
    map $server_addr $upstr{
       127.0.0.1 "up.app-srv-01";
       127.0.0.2 "up.app-srv-02";
       127.0.0.3 "up.app-srv-03";
       127.0.0.4 "up.app-srv-04";
                  :
                  :
       default   "up.app-srv-01";
    }

    server {
       listen 18080;
       proxy_pass  $upstr;
    }
}

Bien qu'il s'agisse d'un paramètre de procédure TCP, contrairement au protocole http, nom_serveur n'est pas inclus dans l'en-tête, il n'est donc pas possible de spécifier la destination de transfert à l'aide de nom_serveur.

Ainsi, en attribuant différentes adresses IP de machine locale dans les hôtes, vous pouvez décider de l'amont à attribuer.

Confirmation de connexion

Vérifiez les connexions JMX suivantes avec un outil tel que java VisualVM.

app-srv-01:18080
app-srv-02:18080
app-srv-03:18080
app-srv-04:18080
   :
   :

Jusqu'ici cette fois.

Relation

Le module Steam de Nginx est vraiment utile et peut être utilisé de plusieurs manières.

Recevez toujours SMTP sur localhost: 25-http: //qiita.com/aya_eiya/items/dbd2ffff1f07a7bfedd6