This is a project for university cours of shared systems.
Die unten aufgeführte Projektstruktur beschreibt, welche Orderner für welchen Zweck da sind.
| Ordner | Beschreibung |
|---|---|
| eclipse/WebShop | Eclipseprojekt zum importieren |
| docker/nginx-loadbalancer | HTTP-Loadbalancer Container basierend auf nginx |
| docker/nginx-mysql-loadbalancer | MYSQL-Loadbalancer Container basierend auf nginx |
| docker/webshop | WebSop Container basierend auf Tomcat |
Die Software basiert auf dem Framework Vaadin, mit dem der WebShop geschrieben ist. Unten sind weitere Komponenten aufgeführt
- Vaadin
- JPA
Um die HA zu erreichen wird folgende Software eingesetzt:
| Software | Beschreibung |
|---|---|
| Galera | Mysql-Cluster |
| mysql | Relationale Datenbank |
| nginx | Loadbalancer für http und mysql |
| tomcat | Java-Webserver |
| redis | InMemory-Databank für Sessionsharing |
Auf allen Host-Systemen wird das RancherOS installiert. Damit ist es möglich alle Docker-Container auf die jeweiligen Hosts transparent via RancherUI zu verteilen.
Jedes Land, also jede Domain, bekommt ein eigenen Serverpool, der seperat zu verwalten und physikalisch von anderen getrennt ist.
Dem öffentlichen DNS-Server werden alle IPs der HTTP-Loadbalancer mitgeteilt. Sobald einer ausfällt benutzt der Browser ein anderen Loadbalancer.
Die http-lbx-Loadbalancer verteilen die Anfragen auf alle tomcatx-Webserver. Diese Teilen ihre Session via redisx-Server, somit ist eine non-Sticky Session möglich. Alle Webserver sind greifen wiederum auf 2 mysql-lb-Loadbalancer zu, die die Anfragen auf das mysql-Cluster verteilen. Im Hintergrund arbeitet Galera, dass die Datenbanken synchron hält.
Kleine Installationsanleitung des Webshops.
Vorbedingungen
- docker > 1.10
Clonen und wechseln ins Verzeichnis.
git clone https://github.com/Programmnix/verteilte-systeme-webshop.git
cd verteilte-systeme-webshop/dockerStarten des HA-WebShops.
docker-compose upAufrufen des Webshops im Browser via http://localhost bzw. die IP der docker-machine
docker stop docker_webshop0_1oder
docker stop docker_webshop1_1docker stop docker_master_1oder
docker stop docker_node1_1oder
docker stop docker_node2_1