
If you are considering running Neo4J there are several deployment options out there to consider.
We could consider the following:
Unfortunately, with AKS there is a lot of complexity with routing the traffic to the proper master node. Neo4j does it’s own clustering and essentially creates a double “routing” issue. AKS will end up with some form of ingress controller like nginx that will pass data to one of the nodes that might not be the master node for Neo4J.
One approach we found successful was spinning up a high-available cluster from ARM templates. The below Azure CLI is an example of how to do this.
# Create Neo4J Cluster
resourceGroupName="PolicyManager"
clusterNamePrefix="jwneo4j"
vmCount="3"
vmSize="Standard_A1"
adminUserName="$(whoami)"
adminCredential="$(cat ~/.ssh/id_rsa.pub)"
az group deployment create --resource-group "$resourceGroupName" --template-uri "https://raw.githubusercontent.com/neo4j/azure-neo4j/master/ha/mainTemplate.json" --parameters ClusterNamePrefix="$clusterNamePrefix" VmCount="$vmCount" VmSize="$vmSize" AdminUserName="$adminUserName" AdminAuthType="sshpublickey" AdminCredential="$adminCredential" VNetNewOrExisting="new" VNetResourceGroupName="$resourceGroupName" VNetName="neovnet" VNetAddressPrefix="10.0.0.0/16" SubnetName="neovnetsub" SubnetAddressPrefix="10.0.1.0/24" SubnetStartAddress="10.0.1.0" PublicIPNewOrExistingOrNone="new" PublicIPName="neopub" PublicIPAllocationMethod="Dynamic" PublicIPIdleTimeoutInMinutes="10" Neo4jPassword="$dataPassword" ArtifactsBase="https://raw.githubusercontent.com/neo4j/azure-neo4j/master/ha"