Erfolgreiche Webs Zehn Jahre Tomcat Peter Roßbach Historie Unsere Aufgabe Wo stehen wir mit dem Tomcat 6? Architektur, Connector, Deployment Apache und Tomcat => mod_jk Monitoring -> JMX pr@objektpark.de pero@apache.org 1 Mein Rucksack Dipl. Inform. Peter Roßbach Freiberuflicher IT-Systemarchitekt, Berater, Trainer und Autor Autor Committer im Apache Tomcat- Projekt Autor der TomC@Kolumne im Java Magazin Tomcat 5x http://tomcat.objektpark.org/ Tomcat 4x http://www.tom4.de Java Server und Servlets E-Mail : pr@objektpark.de Fachautor und Speaker auf deutschen Java Konferenzen Nächster Streich WJAX im November 2008 (München) JAX im April 2009 (Mainz) Tomcat 6 Buch Q3/2009 2
Ziele des Projekts Erstellen eines Java Webcontainer der konform mit der aktuellen Servlet- und JSP-Spezifikation ist. Integration von bestehenden Webserver (Apache, IIS, Sun One). Einen erweiterbare Architektur anbieten. Eine gute Integration für andere JEE Lösungen realisieren. Eine hochwertige Lösung für Entwickler und den produktiven Betrieb bereitstellen. Permanente Steigerung der Leistungsfähigkeit mit modern Techniken umsetzen. 3 Tomcat Historie 1997 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 Tomcat Architektur Servlet Api 0.x-2.1 JSP 0.4-1.0 tomcat ref Servlet Api 2.2 + JSP 1.0 jserv 3.0 3.1 3.2 3.2.4 X 3.3 3.3.2 3.3.trunk tomcat.next Catalina Architektur 4.0 4.0.6 X Servlet Api 2.3 JSP 1.1-1.2 4.1 4.1.10 4.1.31 4.1.34 4.1.36 5.0 5.0.19 5.0.27 5.0.trunk X Servlet Api 2.4 JSP 2.0 5.5 5.5.12 5.5.20 5.5.25 5.5.27 ServletAPI 2.5 JSP 2.1 6.0 6.0.10 6.0.15 6.0.18 6.1 6.1.trunk 4
Tomcat Community 23 Committer active + 51 (Emeritus Committers) dev list: 600-1200 Mails pro Monat http://mail-archives.apache.org/ mod_mbox/tomcat-dev/ user list: 1200-3000 Mails pro Monat http://mail-archives.apache.org/ mod_mbox/tomcat-users/ Nutzer und Installationen 150.000-500.000 Download pro Monat nur apache.org ohne Mirros (>30) http://people.apache.org/~vgritsenko/stats/months-graph.html 5 Core Committer Remy Maucherat Mark Thomas Rainer Jung Filip Hanik Mladen Turk Peter Roßbach Bill Barker Costin Manolache Yoav Shapira Jean-Frederic Clere 6
Distribution of the all Downloads nur apache.org Tomcat 6 Release Page Views apache.org 7 2002 http://www.sdtimes.com/article/story-20021001-02.html http://entwickler.de/zonen/portale/psecom,id,99,news,7710,.html 8
2004 http://javamagazin.de/itr/service/show.php3?id=189&nodeid=36&func=results&poll_id=16 9 2004 http://today.java.net/pub/pq/10 JBOSS + Tomcat = 68 % 10
LinuxMagzin https://www.linux-magazin.de/content/collectedinfo/15785 11 SpringSource Stand: 2.11.2007 JBOSS + Tomcat = 54% 12
Nutzer... JBOSS, Geronimo, Glassfish, Jonas, Spring (S2AP) Netbeans / Eclipse / IDEA Produkte Confluence, Jira, OpenCMS, Jalbum CoreMedia CMS & Government Site Builder... Viele WebServices und Portale nutzen Tomcat http://wiki.apache.org/tomcat/poweredby mehr als 80 Firmen gelistet... 13 Many Thanks Wir sind ein kleines Apache Projekt und sind mächtig Stolz, das wir eine große hilfreiche Community begeistern können. Vielen Dank, für den aktive Einsatz! 14
Architektur Web Anwendungen Catalina Architektur Core Elemente ClassLoader Source Struktur 15 Webanwendung Klassen:.jar, Servlets, Beans Anwendung Ressourcen: Jsp,html,css,gif web.xml server.xml od. context.xml Tomcat Webcontainer 16
Catalina Architektur Server Client Service Engine Request HTTP Response HTTPS Invoke Host Context Servlets Connector AJP13 Host Context Servlets... 17 Tomcat 6: server.xml <Server port="8005" shutdown="shutdown"> <Listener classname="org.apache.catalina.corejasperlistener" /> <GlobalNamingResources> <Resource name="userdatabase" auth="container" type="org.apache.catalina.userdatabase" factory="org.apache.catalina.users.memoryuserdatabasefactory" pathname="conf/tomcat-users.xml" readonly="true"/> </GlobalNamingResources> <Service name="catalina"> <Connector port="8080" /> <Engine name="catalina" defaulthost="localhost"> <Realm classname="org.apache.catalina.realm.userdatabaserealm" resourcename="userdatabase" /> <Host name="localhost" appbase="webapps" /> </Engine> </Service> </Server> 18
Tomcat Pipeline TOMCAT Server Service Request Engine 8080 HTTP Host 8443 8009 HTTPS AJP Response Pipeline Pipeline Context Wrapper ServletRequest FilterChain Filter 1...N Servlet Code Pipeline Pipeline ServletResponse Shutdown - 8005 JMX-Adaptor - 9000 HTTP - 1099 RMI - 0900 IIOP MBeanServer (JMX) Java Virtuelle Machine 19 Tomcat 6 Environment Server GlobalNamingResources LocalEJB Listener EJB Resource ServiceRef Valve Service Listener Ececutor Connector Transaction ResourceEnvRef Realm Listener InstanceListener Listener WrapperLifecycle WrapperListener Engine Host Context Resources Loader Valve Realm Listener Valve Realm Listener Manager Store Parameter ResourceLink Alias WatchedResource Manager Cluster Channel ClusterListener Listener Deployer Interceptor Membership Receiver Valve Sender Transport 20
Classloader /**/*.jsp /**/*.jspx JSP-Loader WEB-INF/lib*.jar WEB-INF/classes/**/*.class /myapps Anwendungen annotations-api.jar servlet-api.jar jsp-api.jar el-api.jar jasper.jar jasper-el.jar jasper-rt.jar tomcat-dbcp.jar tomcat-coyote.jar catalina-ant.jar catalina-tribes.jar catalina-ha.jar catalina.jar commons-daemon.jar tomcat-juli.jar bootstrap.jar System JDK (rt.jar,...) Bootstrap Common 21 Strukturen Vereinfachung der build Struktur Single Projekt löst Abhängigkeiten auf und baut verschieden Artifakte aus einem Source Tree. Separate Release Build Bestückung eines Maven Repository Insourcing der Jakarta Projekte 22
Strukturen 23 Maven Repo Snapshot http://people.apache.org/repo/m2-snapshot-repository/org/apache/ tomcat Release http://tomcat.apache.org/dev/dist/m2-repository/org/apache/ tomcat/ 24
Release Policy R-T-C Review-Then-Commit Erst Patch, dann Eintrag in STATUS Vote +1,-1 min 3 +1 und mehr als -1 dann commit in trunk Aktuell Weg für alle Tomcat Releases ausser mod_jk! Commit-Then-Review Commit, Streiten evtl. Ausbauen Grosse Problem über die Richtung im Bereich Comet 25 Neues vom Tomcat 6 Servlet API 2.5 und JSP 2.1 Connector Executor, NIO, Comet, APR, JIO AccessLogging Clustering Tribes, Backupmanager, Context Replikation Source Restruktierung Auslieferungverzeichnis verändert 26
AccessLogging Refactoring und Redesign Ausgabe Buffering Schneller Pattern Parseing Einfache Erweiterbarkeit Enabled - AccessLog via JMX aktivieren 27 AccessLogValve Web- Client Anfrage Web- Server Antwort 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:03 +0200] GET / HTTP/1.1 200 8132 - / 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/tomcat.gif HTTP/1.1 200 1934 - /tomcat-docs/images/tomcat.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/update.gif HTTP/1.1 200 627 - /tomcat-docs/images/update.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/printer.gif HTTP/1.1 200 438 - /tomcat-docs/images/printer.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/docs.gif HTTP/1.1 200 261 - /tomcat-docs/images/docs.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/asf-logo.gif HTTP/1.1 200 7279 - /tomcat-docs/images/asf-logo.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/add.gif HTTP/1.1 200 1037 - /tomcat-docs/images/add.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/changelog.html HTTP/1.1 200 209997 - /tomcat-docs/changelog.html 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:05 +0200] GET /tomcat-docs/images/fix.gif HTTP/1.1 200 345 - /tomcat-docs/images/fix.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:09 +0200] GET /manager/html HTTP/1.1 401 954 - /manager/html 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:13 +0200] GET /jsp-examples/ HTTP/1.1 200 16576 - /jsp-examples/ 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:13 +0200] GET /jsp-examples/images/execute.gif HTTP/1.1 200 1242 - /jsp-examples/images/execute.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:13 +0200] GET /jsp-examples/images/code.gif HTTP/1.1 200 292 - /jsp-examples/images/code.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:13 +0200] GET /jsp-examples/images/return.gif HTTP/1.1 200 1231 - /jsp-examples/images/return.gif 0:0:0:0:0:0:0:1%0 - "-" [24/Sep/2006:12:26:15 +0200] GET /jsp-examples/jsp2/el/basic-arithmetic.jsp HTTP/1.1 200 2052 7E8F040FD4A9B4C97230E0817745B4FA /jsp-examples/jsp2/el/ basic-arithmetic.jsp <!-- server.xml od. context.xml --> <Valve classname="org.apache.catalina.valves.accesslogvalve" enabled= true directory="logs" prefix="access-log." suffix=".txt" pattern="%h %l "%u" %t %r %s %b %D %S" resolvehosts="false"/> 28
AccessLogFormat %a - Remote IP address %A - Local IP address %b - Bytes sent, excluding HTTP headers, or '-' if zero %B - Bytes sent, excluding HTTP headers %h - Remote host name (or IP address if resolvehosts is false) %H - Request protocol %l - Remote logical username from identd (always returns '-') %m - Request method (GET, POST, etc.) %p - Local port on which this request was received %q - Query string (prepended with a '?' if it exists) %r - First line of the request (method and request URI) %s - HTTP status code of the response %S - User session ID %t - Date and time, in Common Log Format %u - Remote user that was authenticated (if any), else '-' %U - Requested URL path %v - Local server name %D - Time taken to process the request, in millis %T - Time taken to process the request, in seconds %I - current Request thread name %{xxx}i for incoming headers %{xxx}o for outcoming response headers %{xxx}c for a specific cookie %{xxx}r xxx is an attribute in the ServletRequest %{xxx}s xxx is an attribute in the HttpSession 29 Connectoren Vereinfachung und Vereinheitlichung der Implementierung Java 5 ThreadPool (Executor) Normale Threadspool reduzieren sich nicht mehr! Neue NIO HTTP + Sendfile Neue JIO AJP Implementierung Comet Support APR für HTTP und AJP Alte AJP Coyote Implementierung 30
Connector im Detail Service n Connector MapperListener Mapper Engine (Pipeline) 1 ProtocolHandler used CoyoteAdpater used used ServerSocket Http11Protocol Http11Processor RequestInfo n processorcache o.a.t.util.net.jioendpoint Http11Protocol$Http11ConnectionHandler used run od. <= maxthreads run 1..n o.a.t.util.net.jioendpoint$acceptor Exceutor o.a.t.util.net.jioendpoint$workerstack n o.a.t.util.net.jioendpoint$worker 31 ProtocolHandler Http org.apache.coyote.http11.http11protocol org.apache.coyote.http11.http11nioprotocol org.apache.coyote.http11.http11aprprotocol AJP org.apache.coyote.ajp.ajpprotocol org.apache.coyote.ajp.ajpaprprotocol org.apache.jk.server.jkcoyotehandler org.apache.jk.common.channelsocket org.apache.jk.common.channelniosocket 32
Connector ThreadPool wird nur durch Java 5 Executor realisiert NIO und APR Connectoren überarbeitet comet support sendfile async IO Neuer AJP Connector 33 NIO Konfiguration <Server...> <Service...>! <Executor name="tomcatthreads"! nameprefix="catalina-exec-"!! maxthreads="150"!! minsparethreads="50"/>! <Connector port="30014" URIEncoding="UTF-8"!! executor="tomcatthreads"!!! connectiontimeout="300000" protocol="org.apache.coyote.http11.http11nioprotocol"/> <!-- ThreadPool Sharing like Apache--> <Connector port="30011" URIEncoding="UTF-8"!! executor="tomcatthreads"!!! connectiontimeout="300000" protocol="org.apache.coyote.http11.http11protocol"/> 34
APR Konfiguration <Server...> <Service...> <Connector port="30011" URIEncoding="UTF-8"!! maxthreads="150"!! connectiontimeout="300000" protocol="org.apache.coyote.http11.http11aprprotocol"/>!! pollersize="8192" /> <Connector port="30013" scheme="https" secure="true" SSLEnabled="true" SSLCertificateFile="/usr/local/ssl/server.crt" SSLCertificateKeyFile="/usr/local/ssl/server.pem" clientauth="false" sslprotocol="tls" URIEncoding="UTF-8"!! maxthreads="150"!! connectiontimeout="300000" protocol="org.apache.coyote.http11.http11aprprotocol"/>!! pollersize="8192" /> http://tomcat.apache.org/tomcat-6.0-doc/apr.html 35 AJP mit NioChannel <Connector protocol="ajp/1.3" port="0" protocol="org.apache.jk.server.jkcoyotehandler" channelniosocket.sotimeout="300000" channelniosocket.port="8009" channelniosocket.maxthreads="250" channelniosocket.maxsparethreads="50" channelniosocket.minsparethreads="25" channelniosocket.buffersize="16384" /> 36
APR Verarbeitung Acceptor accept accept socket data received Worker Request Processor Poller socket event yes Keep Alive no keepalive timeout Connection Close 37 APR OS sendfile Support Acceptor accept accept socket data received Worker Request Processor Sendfile Poller socket event sendfile chunk sendfile enabled yes sendfile no Send via DefaultServlet Socket timeout error yes sendfile finished Keep Alive no Connection Close 38
Sendfile for everyone Request Attribute vom Container muss gesetzt sein: org.apache.tomcat.sendfile.support=boolean.true Setzen der folgenden Request Attribute org.apache.tomcat.sendfile.filename=<abs filename> Voraussetzungen die Daten liegen auf der Platte Start Offset as Long org.apache.tomcat.sendfile.start End Offset as Long org.apache.tomcat.sendfile.start Problem: AccessLog stimmt nicht da Datei nach der Valve Kette asynchrone geschrieben wird. 39 Leistungen Filip Hanik (http://blog.covalent.net/roller/ covalent/entry/20070308) Can Servlet Containers Scale? 16,000 Concurrent Connections using Tomcat 6! Umgebung (Tomcat 6.0.11 Java 5-2*2 XEON 2,8 GHz, 2Gb Mem Linux - 2.4.21-47.EL #1 SMP Wed Jul 5 20:30:36 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux Aktive Entwicklung: Unterstützung des Comet Bayeux 40
Deployment Developer (Hot Deployment) Manager App Ant tasks Produktion Don t touch a running system 41 Die Manager Anwendung 42
Server Status 43 Sessions 44
Deployment Deployment Archiv Verzeichnis WAR Datei META-INF/context.xml WEB-INF/web.xml server.xml ( <Context... >) Remote Deployment WAR, Verzeichnis, Tags, context.xml 45 Informationen zu einem Deployment Tomcat manager.xml context.xml.default myapps.xml web.xml.default $catalina.base/conf/catalina/localhost context.xml server.xml web.xml myapps web.xml manager web.xml $catalina.base/webapps $irgendwo.app $catalina.base/conf 46
Ladereihenfolge /conf /Catalina /localhost 1 4 /context.xml /web.xml 3 /myapps.xml 2 /context.xml.default 5 /web.xml.default /webapps /myapps[.war] 3 /META-INF/context.xml 6 /WEB-INF/web.xml 47 deployonstartup Parameter Kontrolle in conf/catalina/localhost/*.xml Kontrolle in webapps autodeploy Änderung reflektieren deployxml Kontrolle in conf/catalina/localhost und META-INF/context.xml ausschalten unpackwars <Host name="localhost" appbase="webapps" workdir= work unpackwars="true" autodeploy="true" deployonstartup="true" autodeploy="true"> Anwendung vor der Nutzung auspacken 48
ClassLoader Reloads <Context reloading="true"..> WatchedResource Element und context.xml <WatchedResource>WEB-INF/applicationcontext.xml</WatchedResource> <WatchedResource>WEB-INF/ struts.config</watchedresource> JSP web.xml JSPServlet => checkinterval, development Manager Anwendung/ant restart! 49 Risiken Laufende Threads! Request/Backends ClassLoader Issues Referenzen zum eigenen Code ausserhalb des eigenen ClassLoaders Offene IO-Verbindungen URL-Connection (KeepAlive Cache) JDBC Treiber / Pools 50
Produktion Trafik stoppen Warten das keine Anfragen mehr unterwegs Schwieriger bei Sessions => Cluster! Stoppen des Servers Austausch der Anwendung Löschen in webapps,work evtl. conf Neue Anwendung kopieren Starten / Testen / Vorheizen (cache) Trafik starten und beobachten... 51 Agenda mod_jk Apache JavaServer Protocol (AJP) Apache + mod_jk Installation mod_jk Konfiguration Worker Connection Mapping Logging Loadbalancer Strategie Status und Management Failover 52
Szenario: Apache 2 mit einem Tomcat Apache Server Tomcat Server Engine mod_jk AJP Host Context Tomcat Server AJP Engine Host Context 53 Apache Jserv Protocol Eigenschaften Stabile Verbindungen zwischen WebServer und Tomcat Senden von Kommandos und Datenblöcken, statt Stream mit Header und Body Maximale ca. 8K pro Block Der gesamte HTTP Header darf nicht größer als ca. 8K werden. Seit 1.2.21 dürfen die Header bis 64k gross werden. Reduktion der Header Größe durch Kodierung der StandardHeader- Keys und http Methods accept => 0xA001, cookie => 0xA009, GET => 1, POST => 4 Dokumentation http://tomcat.apache.org/connectors-doc/common/ajpv13a.html 54
AJP im Einsatz mod_jk Tomcat CPING Real connect CPONG Request REQUEST HEADER GET REQUEST GET REQUEST BODY BODY REQUEST REQUEST BODY BODY Response RESPONSE HEADER RESPONCE RESPONCE BODY RESPONSE BODY BODY RESPONSE END 55 AJP Pakets Server to Container Payload Data-Length server to container- Header............ req code 2 len 1 len 0x34 0x12 Apache/ mod_jk Tomcat/ AJP Connector Container to Server container to server - Header Data-Length Payload A B res 1 len 2 len............ code 56
Mod_jk Konfiguration Apache 2 Tomcat 3/4/5/6 oder Jetty 4/5/6 httpd.conf Include conf/mod_jk.conf mod_jk.conf http https JK 1.2.26 Mod_Jk AJP/1.3 Connector Tomcat <IfModule!mod_jk.c> LoadModule jk_module "modules/mod_jk.so" </IfModule> JkShmFile "logs/mod_jk.shm" JkLogFile "logs/mod_jk.log" JkLogLevel info JKWorkerProperty worker.list=loadbalancer,jkstatus JKWorkerProperty worker.node01.port=8009 JKWorkerProperty worker.node01.host=localhost JKWorkerProperty worker.node01.type=ajp13 JKWorkerProperty worker.loadbalancer.type=lb JKWorkerProperty worker.loadbalancer.balance_workers=node01 JKWorkerProperty worker.jkstatus.type=status JkMount /jkstatus jkstatus JkMount /myapps* loadbalancer server.xml JVM <Server> <Service name= Catalina > <Connector port="8009" protocol="ajp/1.3"/> <Engine name= Catalina defaulthost= localhost... jvmroute= node01 > 57 Template # template worker mod_jk apache JkWorkerProperty worker.template.type=ajp13 # used for MPM worker mode with CPING/CPONG JkWorkerProperty worker.template.connection_pool_timeout=300 JkWorkerProperty worker.template.connection_pool_minsize=0 #JkWorkerProperty worker.template.socket_keepalive=1 #JkWorkerProperty worker.template.socket_timeout=300 JkWorkerProperty worker.template.connect_timeout=30000 JkWorkerProperty worker.template.prepost_timeout=10000 #JkWorkerProperty worker.template.max_reply_timeouts=10 #JkWorkerProperty worker.template.reply_timeout=300000 JkWorkerProperty worker.template.lbfactor=1 JkWorkerProperty worker.template.retries=2 JkWorkerProperty worker.template.activation=a JkWorkerProperty worker.template.recovery_options=7 JKWorkerProperty worker.list=loadbalancer JKWorkerProperty worker.loadbalancer.balance_workers=node01 JKWorkerProperty worker.node01.port=20012 JKWorkerProperty worker.node01.host=localhost JKWorkerProperty worker.node01.reference=worker.template 58
Loadbalancer Gewichtes Round Robin Verschiedene Strategie die Last zu ermitteln Stickyness (route) Gruppen (Redirect, Domain, Distance) Failover Support Auto Retransmit 59 LB-Strategie REQEUST Zählt die Anfragen SESSIONS BUSY Zählt die angefangenen Sessions Kleinste Anzahl von Anfragen in Bearbeitung TRAFFIC Kleinster Trafik (read + write) 60
Mount Mounts JkMount /apps/* loadbalancer JkMount /apps/*/dispatch/* loadbalancer JkWorkerProperty worker.loadbalancer.mount=/apps/*,/apps2/* UnMount JkUnMount /apps/images/* loadbalancer In einem Vhost globale Mounts einbinden! JkMountCopy On oder JkMountCopy All (server global) 61 Externe Files JkMountFile conf/urimap.properties Mount: /apps/*=loadbalancer UnMount:!/apps/static/*=loadbalancer Disable -/apps/newcontent/*=loadbalancer JkMountFileReload = 60 0 Don t reload! 62
Location Andere Parameter als Worker Selector Bestandteile der URL Bestandteile des HTTP Header Apache 2.2 + mod_rewrite <Location *;jsessionid=> SetHandler jakarta-servlet SetEnv JK_WORKER_NAME my_worker </Location> <Location /apps/> SetHandler jakarta-servlet SetEnvIf REQUEST_URI ^/apps/([^/]*)/ JK_WORKER_NAME=$1 SetEnvIf REQUEST_URI ^/apps/([^/]*)/static no-jk </Location> 63 Apache mod_jk Integration Apache mod_jk LB Entscheidung in den Log LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{Set-Cookie}o\" %{pid}p %{tid}p %T %{SSL_PROTOCOL}x % {SSL_CIPHER}x %{SSL_CIPHER_ALGKEYSIZE}x %{SSL_CIPHER_USEKEYSIZE}x %{SSL_SESSION_ID}x %{JK_WORKER_NAME}n %{JK_LB_FIRST_NAME}n % {JK_LB_FIRST_STATE}n %{JK_LB_LAST_NAME}n %{JK_LB_LAST_STATE}n" mod_jk_log CustomLog " /usr/local/bin/rotatelogs /var/log/http2/apache228w_access_log 86400" mod_jk_log prozess und threadid Start + Dauer In/Out JsessionID Cookie LB Entscheidung 64
Request Log 65 Last verteilen Mehrere Tomcats Cache Stickyness Replikation Cluster Zellen Routing 66
Backup Instanz Apache /jkstatus status Tomcat worker.node2001 node2001 app1 app2 Tomcat worker.node2002 node2002 app1 app2 /app1 /app2 loadbalancer Tomcat worker.node2101 node2101 app1 app2 Tomcat worker.node2102 node2102 app1 app2 67 Routing /jkstatus Apache status Tomcat /app1 loadbalancer1 worker.node1a node2001 app1 route=node2001 node2002 app2 worker.node1b route=node2101 Tomcat /app2 loadbalancer2 worker.node2a route=node2002 node2101 app1 worker.node2b route=node2102 node2102 app2 68
Local Cache Apache /jkstatus status Tomcat worker.node2001 domain1 domain1 app1 app2 Tomcat cache /app1 /app2 loadbalancer worker.node2002 domain1 domain1 app1 app2 Tomcat worker.node2101 domain2 domain2 app1 app2 Tomcat cache worker.node2102 domain2 domain2 app1 app2 69 Cluster - Session State Apache /jkstatus status Tomcat worker.node2001 Domain1 node2001 app1 app2 CL 2011 Domain1 Tomcat /app1 /app2 loadbalancer worker.node2002 Domain2 node2002 app1 app2 Tomcat CL 2012 Domain2 worker.node2101 Domain1 node2101 app1 app2 CL 2111 Domain1 Tomcat worker.node2102 Domain2 node2102 app1 app2 CL 2112 Domain2 70
Apache 1 lb Distance Tomcat 1 Tomcat 2 Zelle 1 Apache 2 distance 0 Tomcat 3 IP V S lb distance 1 distance 1 Tomcat 4 IP V S Apache 3 lb Tomcat 5 Tomcat 6 Zelle 2 Apache 4 lb distance 0 Tomcat 7 Tomcat 8 71 jk_status 72
JkStatus als XML/Properties Ausgabe 73 mod_jk Activation Active Disabled Stopped 74
Dynamische Aktivierung 75 mod_jk State OK(idle) Error(Recoverable) OK Error(Probe) Error Error (Force Recoverable) OK(Busy) 76
Bewertung Status State / Activation OK OK(idle) BUSY Recovery Error active good good degraded degraded bad disable degraded degraded degraded degraded bad stopped bad bad bad bad bad 77 Zukunft Integration eines leistungsfähigen asynchrone IO API s Unterstützung von Servlet 3.0 API und JSP 3.0? Themen Schlanker werden Mehr Robustheit Steigerung der Performance Neue Eigenschaften die einen noch grösseren professionellen Einsatz erlauben Tools für Monitoring und Management Weitere Verbesserungen des mod_jk Proxy 78
W-JAX (München) 7.11.2008 Entwicklertage (München) 10.11-11.11.2008 OOSE (Hamburg) Schulungsseite Tomcat im produktiven Betrieb (3 Tage) 12.-14.11.2008 LinuxHotel (Essen) Apache Tomcat: Web-Container Administration und Management (5 Tage) 17.11-21.11.2008 Peter Roßbach InHouse Schulungen nach Vereinbarung oose. Innovative Informatik 79 F&Q Fragen und Antworten News Konfiguration Stabilität http://tomcat.apache.org/ http://tomcat.objektpark.org/ http://centaurus.sourceforge.net/ Kommen Sie zum Tomcat-Workshop und Sessions in Rahmen der JAX, LinuxHotel und OOSE Tomcat in großen Projekten Apache und Tomcat Tomcat und neue Connectoren AJAX und Tomcat mailto:pr@objektpark.de oder pero@apache.org 80