Neo4j Causal Cluster on GKE

I was inspired by Mark Needham’s post last week Kubernetes: Spinning up a Neo4j 3.1 Causal Cluster.  I was going through this exact exercise myself and this really short  circuited my learning curve. Mark left off that the next steps for him  were to spin it up on both Google Container Engine (GKE) and AWS. He  also wanted to add READ_REPLICA nodes into the mix. I couldn’t wait so I took what Mark had started with and built on it.


The CORE nodes can be separated from the EDGE nodes thus allowing each StatefulSet (PetSet) to be scaled in isolation.


First you will need s Google Compute Platform account. Google makes  this a really easy, low risk free proposition with the free trial right  now. They provide new contestants with a $300 USD credit for a 60 day  trial. Once you are signed up you will want to check out the Google Container Engine (GKE) quickstart guide. You will need to enable billing (involves a credit card) and create a project to proceed.


Using the Google Cloud Shell, you can get away without installing  anything locally. But if you are really committed you can download and  install the Cloud SDK.


The first thing to do is to create a new cluster in Google Container  Engine (GKE). This can be done via the command line or via the UI.


The following is the GKE Create Cluster url. The UI is very self explanatory.


 

NOTE: Of importance in creating a new cluster is enabling Kubernetes  alpha features. Click on more and then select the alpha features check  box.



Before it is created you can optionally click on command line at the  bottom of the page to get the equivalent command line version of the UI  options that you just selected


If you would rather create it via the command line and don’t want to go through the UI at all, creating a new container cluster via the CLI  can be done with something like the following.



The project id needs to be replaced with your actual project id but  other than that change this command will create a cluster that you can  use to run your Kubernetes Neo4j containers.


Now that the cluster of instances is set up all that is left to do is  deploy the containers. This can be accomplished with the exact command  Mark used and using Mark’s template.



This will bring up the same Neo4j Causal Core Cluster that Mark had in his example.


Now, say we want to add a few READ_REPLICA to the causal cluster. How  do we achieve that? I started with Mark’s template and I added a new StatefulSet (née PetSet) section for the read replicas. After some trial and error I came up with the following template:



I had to play around with the labels a bit to get the networking to  work forwards and backwards between the two StatefulSets. I still need  to understand this a little better but I ended up with two labels for  each: “app” and “role”. Having a different “app” yielded an incomplete solution but if the “app” was the same and the “role” was committed it  only worked partially too.


Now the cluster can be scaled horizontally with different  StatefulSets (PetSets). The CORE nodes can be separated from the EDGE  nodes thus allowing each StatefulSet (PetSet) to be scaled in isolation  from the other(s). The following command scales the CORE PetSet.



While this one scales the EDGE petset.



The resulting scaled causal cluster can be easily viewed in the Neo4j browser using the kubectl port-forward.