SlideShare a Scribd company logo
30/06/17
Copyright @ 2014 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas
d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
www.parisjug.org
Tomcat: from aTomcat: from a
cluster to the Cloudcluster to the Cloud
Tomcat: from aTomcat: from a
cluster to the Cloudcluster to the Cloud
par Jean-Frederic Clere
@jfclere
par Jean-Frederic Clere
@jfclere
30/06/17
30/06/17
AgendaAgenda
●
Who I am
● A cluster:
– Session replication and application.
● The cloud:
– Nope it doesn’t work from scratch.
– External session replication
● Via Infinispan and KubePing
– Modify the tomcat cluster (still not finished)
● AKA dynamic list of nodes
●
Only TCP. (8888 port exported via deployment.yml)
– Demos
● What next? Questions / Suggestions
● Who I am
● A cluster:
– Session replication and application.
● The cloud:
– Nope it doesn’t work from scratch.
– External session replication
● Via Infinispan and KubePing
– Modify the tomcat cluster (still not finished)
●
AKA dynamic list of nodes
● Only TCP. (8888 port exported via deployment.yml)
– Demos
● What next? Questions / Suggestions
30/06/17
Who am I?Who am I?
● Jean-Frederic Clere
● Red Hat
● Years writing JAVA code and server software
● Tomcat committer since 2001
● Doing OpenSource since 1999
● Cyclist/Runner etc
● Lived 15 years in Spain (Barcelona)
● Now in Neuchâtel (CH)
● Jean-Frederic Clere
● Red Hat
● Years writing JAVA code and server software
● Tomcat committer since 2001
● Doing OpenSource since 1999
● Cyclist/Runner etc
● Lived 15 years in Spain (Barcelona)
● Now in Neuchâtel (CH)
30/06/17
A clusterA cluster
INTERNET
INTRANET
Router/Prox
y
6
30/06/17
How to replicate sessionsHow to replicate sessions
● In cluster:
● <distributable/> in web.xml
● <Cluster
className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
● Port upd 45564
● Ports tcp range 4000:4100
● In cluster:
● <distributable/> in web.xml
● <Cluster
className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
● Port upd 45564
● Ports tcp range 4000:4100
7
30/06/17
Demo
HAT
ServerWIFI
HATWIFI
● Number Guest clusterized.● Number Guest clusterized.
HTTP mod_balancerTomcat Tomcat
FireFox / Chrome
OPENSHIFTOPENSHIFT
● A Red Hat project / product
● See OpenShift
https://www.openshift.com/
● Docker 1.4
● Kubernetes 1.12
● A Red Hat project / product
● See OpenShift
https://www.openshift.com/
● Docker 1.4
● Kubernetes 1.12
Tomcat in OpenShiftTomcat in OpenShift
Developping Tomcat App in OpenShiftDevelopping Tomcat App in OpenShift
RHEL RHEL
When a developer
creates a new
application OpenShift
start a new pod
Web Console
Eclipse IDE
Command Line
Master Node Node Node
RHEL
pod
AWS / CloudForms / OpenStack (IaaS) / RHEV (Virt) / Bare Metal
Getting startedGetting started
● minishift:
– Allow to demo on single box.
– Easy to setup
– Small demo
● Bare metal / VM:
– Use ansible to install
– 2 nodes + master minimal
● Tomcat webapp with sessions
– Counter demo.
● minishift:
– Allow to demo on single box.
– Easy to setup
– Small demo
● Bare metal / VM:
– Use ansible to install
– 2 nodes + master minimal
● Tomcat webapp with sessions
– Counter demo.
Session replication in a clusterSession replication in a cluster
● HTTP/1.1
– No transaction
– No persistent connection
● Web App:
– Using cookies to carry session ID
– Store information in the session:
● Shopping cart etc.
● Multi nodes and dynamic
– Route request to right node
– Replicate information
● HTTP/1.1
– No transaction
– No persistent connection
● Web App:
– Using cookies to carry session ID
– Store information in the session:
● Shopping cart etc.
● Multi nodes and dynamic
– Route request to right node
– Replicate information
From a cluster to the CloudFrom a cluster to the Cloud
RHEL RHEL
Broker Node Node Node
RHEL
! Power
COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012
100
10
Ether 10/100
Load balancer Tomcat node Tomcat nodeTomcat node
HTTP
D
Problems for a cluster to cloud...Problems for a cluster to cloud...
● Many ways to solve:
– Embed tomcat with SpringBoot
– Create a docker image
– Extend an existing docker image
– Fabric8
● Tomcat session replication:
– No multicast in the cloud.
– Need a “ping” to find the other nodes
(KubePing)
– Add view to the system account of the
project.
● Many ways to solve:
– Embed tomcat with SpringBoot
– Create a docker image
– Extend an existing docker image
– Fabric8
● Tomcat session replication:
– No multicast in the cloud.
– Need a “ping” to find the other nodes
(KubePing)
– Add view to the system account of the
project.
GoalsGoals
● Have something:
– Minimal modification of the tomcat configuration (server.xml)
– Reuse existing code
● Some code still missing:
– Some in Tomcat
– Documentation / tests.
● Some more stuff:
– We use ansible for the install.
– Some maven builds and shells.
● Have something:
– Minimal modification of the tomcat configuration (server.xml)
– Reuse existing code
● Some code still missing:
– Some in Tomcat
– Documentation / tests.
● Some more stuff:
– We use ansible for the install.
– Some maven builds and shells.
Ismaïl Senhaji, Guillaume P
ythoud
16
30/06/17
SolutionSolution
Tomcat built-in solution
Peer discovery through multicast
heartbeat messages
Does not work in a cloud environment
Sessi
on
Data
Sessi
on
Data
Sessi
on
Data
Sessi
on
Data
Sessi
on
Data
Sessi
on
Data
Multicast
Our solution
Peer discovery through
Kubernetes Downward API
Works in OpenShift
Kubernetes API
Ismaïl Senhaji, Guillaume P
ythoud
17
30/06/17
Kubernetes APIKubernetes API
Tools for managing a
Kubernetes cluster
Accessible from the pods
within the cluster
GET
/api/v1/namespaces/tomcat-in-
the-cloud/pods
➔ Return a JSON representation of all
the pods in the cluster
Tools for managing a
Kubernetes cluster
Accessible from the pods
within the cluster
GET
/api/v1/namespaces/tomcat-in-
the-cloud/pods
➔ Return a JSON representation of all
the pods in the cluster
Ismaïl Senhaji, Guillaume P
ythoud
18
30/06/17
ArchitectureArchitecture
DynamicMembershipService
RefreshThread
● Call memberProvider.getMembers()
● Filter out already known Member
● Inform listeners of
new/dead members
KubernetesMemberProvider
● init():
● Get URL, cert, ... from
environment variables
● Set startTime
● getMembers():
● Call api to get pods
● Filter active pods
● Compute aliveTime
MemberProvider
● init(Properties)
● getMembers(): List<Member>
Where are we?Where are we?
● Main sites:
– https://docs.openshift.com
– https://github.com/Project31
– https://github.com/iSma/tomcat-
in-the-cloud/
● Thanks:
– Université de Neuchâtel
– Kurt Stam
<kstam@redhat.com>
● Main sites:
– https://docs.openshift.com
– https://github.com/Project31
– https://github.com/iSma/tomcat-
in-the-cloud/
● Thanks:
– Université de Neuchâtel
– Kurt Stam
<kstam@redhat.com>
Questions ?
Suggestions?
30/06/17
Titre
Merci !
30/06/17
Titre
Sponsors

More Related Content

PDF
TomcatCon: from a cluster to the cloud
PDF
Juggva cloud
PDF
From a cluster to the Cloud
PDF
HTTP/2, HTTP/3 and SSL/TLS State of the Art in Our Servers
PDF
Apache Httpd and TLS certificates validations
PDF
Cloud RPI4 tomcat ARM64
PDF
Anatomy of neutron from the eagle eyes of troubelshoorters
PPTX
Troubleshooting containerized triple o deployment
TomcatCon: from a cluster to the cloud
Juggva cloud
From a cluster to the Cloud
HTTP/2, HTTP/3 and SSL/TLS State of the Art in Our Servers
Apache Httpd and TLS certificates validations
Cloud RPI4 tomcat ARM64
Anatomy of neutron from the eagle eyes of troubelshoorters
Troubleshooting containerized triple o deployment

What's hot (20)

PPTX
6 Million Ways To Log In Docker - NYC Docker Meetup 12/17/2014
PDF
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
PDF
Taming AEM deployments
PDF
Pragmatic Monolith-First, easy to decompose, clean architecture
PDF
Kubernetes networking-made-easy-with-open-v switch
PDF
青云CoreOS虚拟机部署kubernetes
PDF
netfilter and iptables
PPTX
How to Troubleshoot OpenStack Without Losing Sleep
PPTX
Deep dive in Docker Overlay Networks
PDF
Troubleshooting Tips from a Docker Support Engineer
PDF
What is new in Go 1.8
PDF
Docker deploy
PDF
Understanding docker networking
PPTX
Discovering OpenBSD on AWS
PDF
Docker at Digital Ocean
PDF
Apache httpd reverse proxy and Tomcat
PPTX
Start tracking your ruby infrastructure
PDF
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
PDF
Install openstack
PDF
Использование Docker в CI / Александр Акбашев (HERE Technologies)
6 Million Ways To Log In Docker - NYC Docker Meetup 12/17/2014
Improving the ZFS Userland-Kernel API with Channel Programs - BSDCAN 2017 - M...
Taming AEM deployments
Pragmatic Monolith-First, easy to decompose, clean architecture
Kubernetes networking-made-easy-with-open-v switch
青云CoreOS虚拟机部署kubernetes
netfilter and iptables
How to Troubleshoot OpenStack Without Losing Sleep
Deep dive in Docker Overlay Networks
Troubleshooting Tips from a Docker Support Engineer
What is new in Go 1.8
Docker deploy
Understanding docker networking
Discovering OpenBSD on AWS
Docker at Digital Ocean
Apache httpd reverse proxy and Tomcat
Start tracking your ruby infrastructure
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Install openstack
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Ad

Similar to Tomcat from a cluster to the cloud on RP3 (20)

PDF
OpenShift Multicluster
PDF
DevNation Tech Talk: Getting GitOps
PPTX
OpenShift Enterprise 3.1 vs kubernetes
PDF
Openshift Container Platform: First ItalyMeetup
PPTX
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
PDF
SFSCON23 - Andrea Alfonsi - Kubernetes for IoT
PDF
Openbar 7 - Leuven - OpenShift - The Enterprise Container Platform - Piros
PDF
PRIVATE CLOUD SERVER IMPLEMENTATIONS FOR DATA STORAGE
PDF
Microservices with Kubernetes, Docker, and Jenkins
PDF
Microservices with Docker, Kubernetes, and Jenkins
PDF
Javaone kubernetesjenkins
PDF
Perth MeetUp November 2023
PDF
Java one kubernetes, jenkins and microservices
PDF
Sergio Seabra - Red Hat - OSL19
PDF
One cluster to serve them all
PPT
B2 2006 tomcat_clusters
PDF
Clusternaut: Orchestrating  Percona XtraDB Cluster with Kubernetes
PPTX
OCP Datacomm RedHat - Kubernetes Launch
PDF
RHTE 2016 - Get your App Dev on in the Cloud
PDF
Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...
OpenShift Multicluster
DevNation Tech Talk: Getting GitOps
OpenShift Enterprise 3.1 vs kubernetes
Openshift Container Platform: First ItalyMeetup
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
SFSCON23 - Andrea Alfonsi - Kubernetes for IoT
Openbar 7 - Leuven - OpenShift - The Enterprise Container Platform - Piros
PRIVATE CLOUD SERVER IMPLEMENTATIONS FOR DATA STORAGE
Microservices with Kubernetes, Docker, and Jenkins
Microservices with Docker, Kubernetes, and Jenkins
Javaone kubernetesjenkins
Perth MeetUp November 2023
Java one kubernetes, jenkins and microservices
Sergio Seabra - Red Hat - OSL19
One cluster to serve them all
B2 2006 tomcat_clusters
Clusternaut: Orchestrating  Percona XtraDB Cluster with Kubernetes
OCP Datacomm RedHat - Kubernetes Launch
RHTE 2016 - Get your App Dev on in the Cloud
Javantura v4 - Self-service app deployment with Kubernetes and OpenShift - Ma...
Ad

More from Jean-Frederic Clere (16)

PDF
HTTP/3 where are we now? State of the art in our servers.
PDF
FFM / Panama: A case study with OpenSSL and Tomcat
PDF
Having fun with a solar panel, camera and Apache projects.pdf
PDF
PDF
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
PDF
03_clere_Proxing to tomcat with httpd.pdf
PDF
01_clere_Having fun with a solar panel, camera and raspberry. How with a few ...
PDF
Apache httpd and TLS/SSL certificates validation
PDF
Having fun with Raspberry(s) and Apache projects
PDF
Tomcat openssl
PDF
Tomcat next
PDF
Having fun with Raspberry and Apache projects
PDF
HTTP/2 and SSL/TLS state of art in ASF servers
PDF
Tomcat next
PDF
Native 1.2.8
PDF
Tomcat openssl
HTTP/3 where are we now? State of the art in our servers.
FFM / Panama: A case study with OpenSSL and Tomcat
Having fun with a solar panel, camera and Apache projects.pdf
03_clere-HTTP2 HTTP3 the State of the Art in Our Servers.pdf
03_clere_Proxing to tomcat with httpd.pdf
01_clere_Having fun with a solar panel, camera and raspberry. How with a few ...
Apache httpd and TLS/SSL certificates validation
Having fun with Raspberry(s) and Apache projects
Tomcat openssl
Tomcat next
Having fun with Raspberry and Apache projects
HTTP/2 and SSL/TLS state of art in ASF servers
Tomcat next
Native 1.2.8
Tomcat openssl

Recently uploaded (20)

PPTX
Digital Literacy And Online Safety on internet
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PDF
The Internet -By the Numbers, Sri Lanka Edition
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PPTX
Introuction about WHO-FIC in ICD-10.pptx
PPTX
international classification of diseases ICD-10 review PPT.pptx
PPTX
Funds Management Learning Material for Beg
PPTX
Power Point - Lesson 3_2.pptx grad school presentation
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PDF
Introduction to the IoT system, how the IoT system works
PPTX
SAP Ariba Sourcing PPT for learning material
DOCX
Unit-3 cyber security network security of internet system
PDF
WebRTC in SignalWire - troubleshooting media negotiation
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
E -tech empowerment technologies PowerPoint
PPTX
artificial intelligence overview of it and more
Digital Literacy And Online Safety on internet
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
The Internet -By the Numbers, Sri Lanka Edition
Job_Card_System_Styled_lorem_ipsum_.pptx
INTERNET------BASICS-------UPDATED PPT PRESENTATION
An introduction to the IFRS (ISSB) Stndards.pdf
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PptxGenJS_Demo_Chart_20250317130215833.pptx
Introuction about WHO-FIC in ICD-10.pptx
international classification of diseases ICD-10 review PPT.pptx
Funds Management Learning Material for Beg
Power Point - Lesson 3_2.pptx grad school presentation
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Introduction to the IoT system, how the IoT system works
SAP Ariba Sourcing PPT for learning material
Unit-3 cyber security network security of internet system
WebRTC in SignalWire - troubleshooting media negotiation
Slides PDF The World Game (s) Eco Economic Epochs.pdf
E -tech empowerment technologies PowerPoint
artificial intelligence overview of it and more

Tomcat from a cluster to the cloud on RP3

  • 1. 30/06/17 Copyright @ 2014 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique www.parisjug.org
  • 2. Tomcat: from aTomcat: from a cluster to the Cloudcluster to the Cloud Tomcat: from aTomcat: from a cluster to the Cloudcluster to the Cloud par Jean-Frederic Clere @jfclere par Jean-Frederic Clere @jfclere 30/06/17
  • 3. 30/06/17 AgendaAgenda ● Who I am ● A cluster: – Session replication and application. ● The cloud: – Nope it doesn’t work from scratch. – External session replication ● Via Infinispan and KubePing – Modify the tomcat cluster (still not finished) ● AKA dynamic list of nodes ● Only TCP. (8888 port exported via deployment.yml) – Demos ● What next? Questions / Suggestions ● Who I am ● A cluster: – Session replication and application. ● The cloud: – Nope it doesn’t work from scratch. – External session replication ● Via Infinispan and KubePing – Modify the tomcat cluster (still not finished) ● AKA dynamic list of nodes ● Only TCP. (8888 port exported via deployment.yml) – Demos ● What next? Questions / Suggestions
  • 4. 30/06/17 Who am I?Who am I? ● Jean-Frederic Clere ● Red Hat ● Years writing JAVA code and server software ● Tomcat committer since 2001 ● Doing OpenSource since 1999 ● Cyclist/Runner etc ● Lived 15 years in Spain (Barcelona) ● Now in Neuchâtel (CH) ● Jean-Frederic Clere ● Red Hat ● Years writing JAVA code and server software ● Tomcat committer since 2001 ● Doing OpenSource since 1999 ● Cyclist/Runner etc ● Lived 15 years in Spain (Barcelona) ● Now in Neuchâtel (CH)
  • 6. 6 30/06/17 How to replicate sessionsHow to replicate sessions ● In cluster: ● <distributable/> in web.xml ● <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> ● Port upd 45564 ● Ports tcp range 4000:4100 ● In cluster: ● <distributable/> in web.xml ● <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> ● Port upd 45564 ● Ports tcp range 4000:4100
  • 7. 7 30/06/17 Demo HAT ServerWIFI HATWIFI ● Number Guest clusterized.● Number Guest clusterized. HTTP mod_balancerTomcat Tomcat FireFox / Chrome
  • 8. OPENSHIFTOPENSHIFT ● A Red Hat project / product ● See OpenShift https://www.openshift.com/ ● Docker 1.4 ● Kubernetes 1.12 ● A Red Hat project / product ● See OpenShift https://www.openshift.com/ ● Docker 1.4 ● Kubernetes 1.12
  • 10. Developping Tomcat App in OpenShiftDevelopping Tomcat App in OpenShift RHEL RHEL When a developer creates a new application OpenShift start a new pod Web Console Eclipse IDE Command Line Master Node Node Node RHEL pod AWS / CloudForms / OpenStack (IaaS) / RHEV (Virt) / Bare Metal
  • 11. Getting startedGetting started ● minishift: – Allow to demo on single box. – Easy to setup – Small demo ● Bare metal / VM: – Use ansible to install – 2 nodes + master minimal ● Tomcat webapp with sessions – Counter demo. ● minishift: – Allow to demo on single box. – Easy to setup – Small demo ● Bare metal / VM: – Use ansible to install – 2 nodes + master minimal ● Tomcat webapp with sessions – Counter demo.
  • 12. Session replication in a clusterSession replication in a cluster ● HTTP/1.1 – No transaction – No persistent connection ● Web App: – Using cookies to carry session ID – Store information in the session: ● Shopping cart etc. ● Multi nodes and dynamic – Route request to right node – Replicate information ● HTTP/1.1 – No transaction – No persistent connection ● Web App: – Using cookies to carry session ID – Store information in the session: ● Shopping cart etc. ● Multi nodes and dynamic – Route request to right node – Replicate information
  • 13. From a cluster to the CloudFrom a cluster to the Cloud RHEL RHEL Broker Node Node Node RHEL ! Power COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012 100 10 Ether 10/100 Load balancer Tomcat node Tomcat nodeTomcat node HTTP D
  • 14. Problems for a cluster to cloud...Problems for a cluster to cloud... ● Many ways to solve: – Embed tomcat with SpringBoot – Create a docker image – Extend an existing docker image – Fabric8 ● Tomcat session replication: – No multicast in the cloud. – Need a “ping” to find the other nodes (KubePing) – Add view to the system account of the project. ● Many ways to solve: – Embed tomcat with SpringBoot – Create a docker image – Extend an existing docker image – Fabric8 ● Tomcat session replication: – No multicast in the cloud. – Need a “ping” to find the other nodes (KubePing) – Add view to the system account of the project.
  • 15. GoalsGoals ● Have something: – Minimal modification of the tomcat configuration (server.xml) – Reuse existing code ● Some code still missing: – Some in Tomcat – Documentation / tests. ● Some more stuff: – We use ansible for the install. – Some maven builds and shells. ● Have something: – Minimal modification of the tomcat configuration (server.xml) – Reuse existing code ● Some code still missing: – Some in Tomcat – Documentation / tests. ● Some more stuff: – We use ansible for the install. – Some maven builds and shells.
  • 16. Ismaïl Senhaji, Guillaume P ythoud 16 30/06/17 SolutionSolution Tomcat built-in solution Peer discovery through multicast heartbeat messages Does not work in a cloud environment Sessi on Data Sessi on Data Sessi on Data Sessi on Data Sessi on Data Sessi on Data Multicast Our solution Peer discovery through Kubernetes Downward API Works in OpenShift Kubernetes API
  • 17. Ismaïl Senhaji, Guillaume P ythoud 17 30/06/17 Kubernetes APIKubernetes API Tools for managing a Kubernetes cluster Accessible from the pods within the cluster GET /api/v1/namespaces/tomcat-in- the-cloud/pods ➔ Return a JSON representation of all the pods in the cluster Tools for managing a Kubernetes cluster Accessible from the pods within the cluster GET /api/v1/namespaces/tomcat-in- the-cloud/pods ➔ Return a JSON representation of all the pods in the cluster
  • 18. Ismaïl Senhaji, Guillaume P ythoud 18 30/06/17 ArchitectureArchitecture DynamicMembershipService RefreshThread ● Call memberProvider.getMembers() ● Filter out already known Member ● Inform listeners of new/dead members KubernetesMemberProvider ● init(): ● Get URL, cert, ... from environment variables ● Set startTime ● getMembers(): ● Call api to get pods ● Filter active pods ● Compute aliveTime MemberProvider ● init(Properties) ● getMembers(): List<Member>
  • 19. Where are we?Where are we? ● Main sites: – https://docs.openshift.com – https://github.com/Project31 – https://github.com/iSma/tomcat- in-the-cloud/ ● Thanks: – Université de Neuchâtel – Kurt Stam <kstam@redhat.com> ● Main sites: – https://docs.openshift.com – https://github.com/Project31 – https://github.com/iSma/tomcat- in-the-cloud/ ● Thanks: – Université de Neuchâtel – Kurt Stam <kstam@redhat.com>