Deploying Yellowfin in Docker or Kubernetes containers makes high availability and rapid scaling easy, and requires little additional configuration. Before you read this guide it is beneficial to first familiarize yourself with Yellowfin application clustering:
This guide assumes that you have already installed a common configuration database. Attached is a zipped copy of the folder I use to spin up new application nodes. The core process is:
- Start the image with a core JRE
- Copy required files into the docker directory (due to size constraints I have removed the Yellowfin installation jar)
- Install Yellowfin without database access (so only the appserver is installed), using a silent installer.properties file. This file is where you will specify no db access, and instead point yellowfin to the configuration database shared by all nodes.
- Run init.yf script. This will start the application server, wait for the entire application to be unpacked from the yellowfin.war file, and then replace the web.xml file of this instance with a web.xml that is configured specifically for the database clustering.
- Expose the port for Yellowfin to listen on (in my case this is 7474, which was specified in the silent installer)
- Point the entry to start.sh. As Yellowfin’s startup script simply launches a background process, its lifespan is very short and a typical docker will shutdown after completing the script. In this example, my script simply starts the server, and logs status of the server every few minutes.
As an alternative to steps 3 and 4, you could maintain an application folder outside of docker containers (optionally in git), and simply copy this entire folder into the docker on build:
- When you first start Yellowfin with the startup script, tomcat will unpack the yellowfin.war file to build out the appserver/webapps folder. This will serve as your template going forward.
- Once this folder has been extracted, everything Yellowfin needs is ready to go and the entire Yellowfin folder can be moved around, without touching the installer jar or yellowfin.war file again.
- The only thing you will need to adjust between nodes is the web.xml file, to specify what background tasks each node is allowed to run.
- This will be easiest if you ensure Yellowfin lives in the same core directory on every node. eg "/opt/yellowfin/"
You do not need to specify a license for individual cluster nodes as the license parameters are stored in Yellowfin’s configuration database, and will be detected automatically when the node first connects to the database on startup. However, you will need to ensure that every node is started with a hostname that has been specified in the license. We recommend naming nodes with a variable appended to a consistent base text: my-reporting-server-1 my-reporting-server-2
Silent installer configuration: https://wiki.yellowfinbi.com/display/user80/Installer+Properties