Warten auf JMX-Verbindung bei 18080 Stellen Sie von einem lokalen Computer aus gleichzeitig eine Verbindung zu mehreren Java-Anwendungsservern über die Plattform her

Worüber redest du?

Dies ist ein Einstellungsbeispiel, wenn es noch schwieriger ist, JVM über eine JMX-Verbindung zu überwachen. Dies ist problematisch, wenn Sie über die Plattform gehen.

Stellen Sie gleichzeitig eine Verbindung mit der TCP-Proxy-Funktion von Nginx her.

Konfigurationsannahmen

Ich möchte die Einstellung des Plattformports nicht einzeln anfordern, wenn die Anzahl der AP-Server zunimmt.

Was Sie lösen wollen

Um die JVM mit JMX zu überwachen, starten Sie normalerweise die Serverfunktion, die auf JXM-Verbindungen wartet, indem Sie die folgenden Argumente angeben. Es gibt einige Argumente, die nur mit Java 7 oder höher verwendet werden können.

Dies ist für den AP-Server 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           #Irgendein
-Dcom.sun.management.jmxremote.authenticate=false #Irgendein

Der hier zu beachtende Punkt ist java.rmi.server.hostname </ code>.

Diese Einstellung wird an den verbindenden JMX-Client gesendet und verwendet diesen Hostnamen als JMX-Ziel.

Mit anderen Worten, aus Sicht des JMX-Clients können Sie keine Verbindung herstellen, es sei denn, Sie sehen die JMX-Verbindung mit app-srv-01: 18080 </ code>.

Wenn Sie die Plattform durchlaufen, können Sie keine Verbindung herstellen, da Sie app-srv-XX nicht sehen können.

Einfach für einen

Mit einem kann dieses Problem schnell gelöst werden.

Alles, was Sie tun müssen, ist, den folgenden Port in der Konfiguration von ssh vorwärts zu setzen und den Hosts app-srv-XX hinzuzufügen.

~/.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

Jetzt können Sie ap-srv-ap01: 18080 </ code> als JMX-Verbindungsziel auf Ihrem lokalen Computer anzeigen.

Wenn app-srv-01 aufgrund der Umgebung des lokalen Computers bereits als andere IP aufgelöst wurde, wird jmx. </ Strong> am Anfang des in den Argumenten hosts und jvm festgelegten Hostnamens hinzugefügt. Fügen Sie ein Präfix wie Code> hinzu.

Es ist problematisch, wenn mehrere Einheiten vorhanden sind

Mit den Einstellungen für eine Einheit wird Port 18080 von localhost für den Port Forward von ap-srv-ap01 verwendet, sodass Port 18080 nach der zweiten Einheit nicht als Port für die JMX-Verbindung verwendet werden kann. Ich werde am Ende.

Ich möchte dieses Problem verwalten und mehrere Remote-JVMs überwachen.

Lösungen

Dieses Mal werden wir dieses Problem mithilfe der TCP-Proxy-Funktion von Nginx lösen.

Die Einstellungen der ersten Einheit wurden korrigiert und die Einstellungen für Port Forward und Hosts bis zur n-ten Einheit hinzugefügt

Ändern Sie vor dem Festlegen von Nginx den Port vorwärts wie folgt, um den Port 18080 des lokalen Computers nicht zu blockieren (die fünfte und die nachfolgenden Einheiten werden weggelassen).

~/.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
                   :
                   :

Fügen Sie es auch der Hosts-Datei hinzu. Bitte beachten Sie, dass die IPs, die gezeichnet werden können, alle unterschiedlich sind. Der Grund wird später beschrieben.

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
          :
          :

Nginx-Einstellungen

Version und erforderliches Modul

Es gibt kein Problem, wenn Sie das neueste normal installieren, aber es funktioniert mit den folgenden.

nginx version: nginx/1.11.9
--with-stream=dynamic #Natürlich ist es auch dann in Ordnung, wenn Sie es statisch installieren

Nginx Stream-Einstellungen

Fügen Sie den Nginx-Einstellungen Folgendes hinzu.

Der Ort zum Schreiben der Stream-Direktive muss sich auf der obersten Ebene befinden. Schreiben Sie sie daher direkt in die Datei 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;
    }
}

Obwohl es sich im Gegensatz zum http-Protokoll um eine TCP-Prozedur handelt, ist Servername nicht im Header enthalten, sodass das Übertragungsziel nicht mit Servername angegeben werden kann.

Durch Zuweisen verschiedener lokaler Computer-IPs in Hosts können Sie also entscheiden, welcher Upstream zugewiesen werden soll.

Verbindungsbestätigung

Überprüfen Sie die folgenden JMX-Verbindungen mit einem Tool wie Java VisualVM.

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

So weit diesmal.

Beziehung

Das Steam-Modul von Nginx ist sehr nützlich und kann auf viele Arten verwendet werden.

Empfangen Sie SMTP immer unter localhost: 25-http: //qiita.com/aya_eiya/items/dbd2ffff1f07a7bfedd6