Earlier this month I’ve gave a workshop on geoserver clustering configuration.
Used the JMS cluster community module with a dedicated ActiveMQ broker, which worked fantastically, great job there.
It loads balance with a dockercloud/haproxy docker container and uses sticky sessions to access the web UI, so no need to have a dedicated “master” with UI access. I know there are a thousand topologies you can use, but this one seemed just so easy for an introductory course and worked so well that I was impressed.
You can check this docker-compose config [1]
The only pitfall to get it running properly on docker was to change the activemq server uri to use the 0.0.0.0 IP address, you’ll see in the Dockerfile[2]
“-Dactivemq.transportConnectors.server.uri="tcp://0.0.0.0:61666” added to the CATALINA_OPTS env variable. This is so the server listens on all interfaces and not just the loopback one 127.0.0.1. It would be great if the default was changed from 127.0.0.1 to 0.0.0.0
The other trick was to dynamically give each instance a unique id, which is done in the geoserver instance config by overriding the docker image’s startup comment with "command: /bin/bash -c “instanceName=$$(/bin/hostname) /usr/local/bin/start.sh”
All in all, I’m really enthusiastic about these community modules and hope to contribute asap.
Finally, thanks a lot to GeoSolutions for letting me use their documentation [3] to prepare the workshop’s material.
[1] <https://github.com/groldan/2019_foss4g-ar_taller_geoserver/blob/master/docker/broker_externo_scale/docker-compose.yml>
[2] <https://github.com/groldan/2019_foss4g-ar_taller_geoserver/blob/master/docker/broker/Dockerfile>
[3] <https://geoserver.geo-solutions.it/edu/en/clustering/>
Gabriel Roldán