Erfolgreiche Webs Zehn Jahre Tomcat. Peter Roßbach. pr@objektpark.de pero@apache.org



Ähnliche Dokumente
Tomcat Konfiguration und Administration

Loadbalancing und Clustering mit Tomcat 6

JSP und Servlet Programmierung

Henning Mersch. Tomcat. im Rahmen des RBG-Seminar SS04. Apache-Jakarta-Tomcat-Server RBG-Seminar 1/17

Installation von xpetstore auf Tomcat unter Verwendung von C-JDBC und eines Clusters aus HypersonicSQL Backends

Skalierbare Webanwendungen mit Apache und Apache Tomcat. W3L AG

1.1. Apache / Tomcat via JK JNI ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED

Ora Education GmbH. Lehrgang: Oracle Application Server 10g R3: Administration

Themen. Apache Webserver Konfiguration. Verzeichnisse für Web-Applikationen. Server Side Includes

Konfiguration und Deployment einer hochverfügbaren ADF Anwendung

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Centaurus-Platform - JSP/Servlets für Webhosting

JBoss 7 als Plattform für hochverfügbare Anwendungen

OS IDE Webserver Integration des Webservers in die IDE Wireshark Webserver II Dynamisches Webprojekt in Eclipse

Mit OSGi Webanwendungen entwickeln Was geht, was nicht?

Softwareentwicklung mit Enterprise JAVA Beans

WildFly Application Server Administration

Weblogic Server: Administration für Umsteiger

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

WebSphere Application Server Installation

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

Lektion 7: Web Tools: Log & Performance Analyse

Aus unserer Projekt- und Schulungserfahrung Oracle TechNet

Infrastruktur entwickeln mit Chef

Build-Pipeline mit Jenkins

Entwicklung von Web-Anwendungen auf JAVA EE Basis

MailUtilities: Remote Deployment - Einführung

Next generation open source BPM JBoss jbpm 4. Java Forum Stuttgart

Konfigurationsanleitung IGMP Multicast - Video Streaming Funkwerk / Bintec. Copyright 5. September 2008 Neo-One Stefan Dahler Version 1.

Benutzerhandbuch. Bürgel ConsumerCheck für OXID eshop

Anwendervortrag auf dem 2. LUGD-Tag am in Frankfurt. Liferay an Bord Portale für Zeppelin

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de (c) Michael Behrendt -

Java - Webapplikationen

RESTful Web. Representational State Transfer

MOUNT10 StoragePlatform Console

SWISSVAULT StorageCenter Console Version 5 Kurzanleitung für SWISSVAULT Combo Partner

swissdec-adapter Installationsanleitung für Patchrelease Versionsgeschichte Version Marco Stettler Patchversion 2.

Planung für Organisation und Technik

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung. September 2013

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Vorstellung SimpliVity. Tristan P. Andres Senior IT Consultant

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

WebService in Java SE und EE

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Zend Server Cluster Manager

Konfiguration Zentyal 3.3 Inhaltsverzeichnis

Stefan Dahler. 1. Remote ISDN Einwahl. 1.1 Einleitung

Tanuki Service Wrapper 101. JVM Verwaltung mit der Community Edition. Alexander Pacnik Karlsruhe,

Continuous Delivery in der Realität eines Großunternehmens

Ohne Build geht's besser: Makeloses Java mit dem z 2 -Environment. Henning Blohm

- Development: Tipps und Tricks

Linux Cluster mit Pacemaker und Heartbeat 3

Fachbereich Medienproduktion

jbpm5 in Java EE 6 Marek Iwaszkiewicz Pascal Schaerf akquinet AG

Internet Information Services v6.0

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Anwendungsprotokolle: HTTP, POP, SMTP

Business Application Framework für SharePoint Der Kern aller PSC-Lösungen

Apache Tomcat 7 Servlet API 3.0 (BETA)

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

Web- Applikationen. in Java-Web

Seite Wireless Distribution System (Routing / Bridging) 3.1 Einleitung

Automatisierter Java EE Entwicklungs-Lifecycle mit WebLogic Server 12c. Robin Müller-Bady Systemberater, Oracle Deutschland

SAP NetWeaver Gateway. 2013

Web 2.0 Software-Architekturen

Apache HTTP Server Administration

Powershell DSC Oliver Ryf

Technische Basis OpenCms

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Struts 2 Das Imperium schlägt zurück?

Log Parser 2.0 HackerScan.js. Beschreibung. Anforderungen. Unterstützte Plattformen. Script-Code. Zurück zur Übersichtsseite

Android VPN. Am Beispiel eines Netzwerktunnels für das Domain Name System (DNS) 1 Andiodine - Android DNS-VPN

Deep Security. Die optimale Sicherheitsplattform für VMware Umgebungen. Thomas Enns -Westcon

Hochverfügbare LDOMs mit Oracle Solaris Cluster

- XPages 2.0? René Winkelmeyer

Inhalt: Konfiguration: web.xml ; server.xml Workflow: Weiterleitung von Requests Lektion II-IV Lektion V-VI

HTBVIEWER INBETRIEBNAHME

Wiederherstellen der Beispieldatenbanken zum Buch Microsoft Project 2010

In diesem Dokument wird Tomcat als Beispiel Servletengine und Apache als Beispiel Webserver verwendet.

Uwe Baumann artiso Solutions

Verfügbarkeit von Applikationen und Failover Szenarien. Winfried Wojtenek.

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Elasticsearch aus OPS-Sicht Teil1. Markus Rodi Karlsruhe,

Installation des edu- sharing Plug- Ins für Moodle

XING und LinkedIn-Integration in das erecruiter-bewerberportal

Solaris Cluster. Dipl. Inform. Torsten Kasch Bielefeld.DE> 8. Januar 2008

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Mobiles SAP für Entscheider. Permanente Verfügbarkeit der aktuellen Unternehmenskennzahlen durch den mobilen Zugriff auf SAP ERP.

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Automatisiertes Testen von Java EE-Applikationen mit Arquillian

Virtual PBX Installationsanleitung für X-Lite

Das neue Volume-Flag S (Scannen erforderlich)

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

Grundlagen und Best Practices bei der SharePoint Entwicklung

MySQL Cluster und MySQL Proxy

Kommunikations-Parameter

Der Nutzen und die Entscheidung für die private Cloud. Martin Constam Rechenpower in der Private Cloud 12. Mai 2014

Transkript:

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